aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Claessens <xclaesse@src.gnome.org>2008-05-17 00:36:33 +0800
committerXavier Claessens <xclaesse@src.gnome.org>2008-05-17 00:36:33 +0800
commit2fa6db9433540394d8149609498cca5ddc9df54b (patch)
treee2a0f43e5054c4f2b2142406bf1a2f79adf23983
parent7308e23186a01d08d29683aeeeba6cb198a834fa (diff)
downloadgsoc2013-empathy-2fa6db9433540394d8149609498cca5ddc9df54b.tar
gsoc2013-empathy-2fa6db9433540394d8149609498cca5ddc9df54b.tar.gz
gsoc2013-empathy-2fa6db9433540394d8149609498cca5ddc9df54b.tar.bz2
gsoc2013-empathy-2fa6db9433540394d8149609498cca5ddc9df54b.tar.lz
gsoc2013-empathy-2fa6db9433540394d8149609498cca5ddc9df54b.tar.xz
gsoc2013-empathy-2fa6db9433540394d8149609498cca5ddc9df54b.tar.zst
gsoc2013-empathy-2fa6db9433540394d8149609498cca5ddc9df54b.zip
Tagged for release 0.23.2.EMPATHY_0_23_2
svn path=/tags/EMPATHY_0_23_2/; revision=1106
-rw-r--r--trunk/.gitignore46
-rw-r--r--trunk/AUTHORS4
-rw-r--r--trunk/CONTRIBUTORS19
-rw-r--r--trunk/COPYING340
-rw-r--r--trunk/ChangeLog.old2353
-rw-r--r--trunk/MAINTAINERS4
-rw-r--r--trunk/Makefile.am56
-rw-r--r--trunk/NEWS428
-rw-r--r--trunk/README12
-rw-r--r--trunk/TODO27
-rwxr-xr-xtrunk/autogen.sh23
-rw-r--r--trunk/configure.ac315
-rw-r--r--trunk/data/.gitignore3
-rw-r--r--trunk/data/Makefile.am51
-rw-r--r--trunk/data/aim.profile10
-rw-r--r--trunk/data/ekiga.profile14
-rw-r--r--trunk/data/empathy.desktop.in.in14
-rw-r--r--trunk/data/empathy.schemas.in309
-rw-r--r--trunk/data/fwd.profile15
-rw-r--r--trunk/data/groupwise.profile11
-rw-r--r--trunk/data/gtalk.profile16
-rw-r--r--trunk/data/icons/Makefile.am166
-rwxr-xr-xtrunk/data/icons/generate-png.sh15
-rw-r--r--trunk/data/icons/hicolor_actions_16x16_im-message-new.pngbin0 -> 693 bytes
-rw-r--r--trunk/data/icons/hicolor_actions_22x22_im-message-new.pngbin0 -> 955 bytes
-rw-r--r--trunk/data/icons/hicolor_actions_24x24_im-message-new.pngbin0 -> 994 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_16x16_empathy.pngbin0 -> 797 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_16x16_im-ekiga.pngbin0 -> 844 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_16x16_im-gizmo.pngbin0 -> 861 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_16x16_im-google-talk.pngbin0 -> 828 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_16x16_im-irc.pngbin0 -> 848 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_16x16_im-local-xmpp.pngbin0 -> 874 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_16x16_im-msn.pngbin0 -> 762 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_16x16_im-sip.pngbin0 -> 630 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_16x16_im-xmpp.pngbin0 -> 663 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_22x22_empathy.pngbin0 -> 1179 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_22x22_im-ekiga.pngbin0 -> 1299 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_22x22_im-gizmo.pngbin0 -> 1301 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_22x22_im-google-talk.pngbin0 -> 1252 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_22x22_im-irc.pngbin0 -> 1218 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_22x22_im-local-xmpp.pngbin0 -> 1358 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_22x22_im-msn.pngbin0 -> 1086 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_22x22_im-sip.pngbin0 -> 824 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_22x22_im-xmpp.pngbin0 -> 953 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_24x24_empathy.pngbin0 -> 1249 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_24x24_im-ekiga.pngbin0 -> 1431 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_24x24_im-gizmo.pngbin0 -> 1437 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_24x24_im-google-talk.pngbin0 -> 1363 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_24x24_im-irc.pngbin0 -> 1308 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_24x24_im-local-xmpp.pngbin0 -> 1505 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_24x24_im-msn.pngbin0 -> 1203 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_24x24_im-sip.pngbin0 -> 816 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_24x24_im-xmpp.pngbin0 -> 1013 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_32x32_empathy.pngbin0 -> 1813 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_32x32_im-ekiga.pngbin0 -> 2118 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_32x32_im-gizmo.pngbin0 -> 2061 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_32x32_im-google-talk.pngbin0 -> 1893 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_32x32_im-irc.pngbin0 -> 1695 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_32x32_im-local-xmpp.pngbin0 -> 2255 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_32x32_im-msn.pngbin0 -> 1734 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_32x32_im-sip.pngbin0 -> 1151 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_32x32_im-xmpp.pngbin0 -> 1492 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_48x48_empathy.pngbin0 -> 2930 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_48x48_im-ekiga.pngbin0 -> 3706 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_48x48_im-gizmo.pngbin0 -> 3284 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_48x48_im-google-talk.pngbin0 -> 3043 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_48x48_im-irc.pngbin0 -> 2428 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_48x48_im-local-xmpp.pngbin0 -> 3942 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_48x48_im-msn.pngbin0 -> 2876 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_48x48_im-sip.pngbin0 -> 1405 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_48x48_im-xmpp.pngbin0 -> 2413 bytes
-rw-r--r--trunk/data/icons/hicolor_apps_scalable_empathy.svg261
-rw-r--r--trunk/data/icons/hicolor_apps_scalable_im-ekiga.svg441
-rw-r--r--trunk/data/icons/hicolor_apps_scalable_im-gizmo.svg269
-rw-r--r--trunk/data/icons/hicolor_apps_scalable_im-google-talk.svg301
-rw-r--r--trunk/data/icons/hicolor_apps_scalable_im-irc.svg785
-rw-r--r--trunk/data/icons/hicolor_apps_scalable_im-local-xmpp.svg1723
-rw-r--r--trunk/data/icons/hicolor_apps_scalable_im-msn.svg302
-rw-r--r--trunk/data/icons/hicolor_apps_scalable_im-sip.svg251
-rw-r--r--trunk/data/icons/hicolor_apps_scalable_im-xmpp.svg632
-rw-r--r--trunk/data/icons/hicolor_status_16x16_empathy-available.pngbin0 -> 685 bytes
-rw-r--r--trunk/data/icons/hicolor_status_16x16_empathy-away.pngbin0 -> 536 bytes
-rw-r--r--trunk/data/icons/hicolor_status_16x16_empathy-busy.pngbin0 -> 618 bytes
-rw-r--r--trunk/data/icons/hicolor_status_16x16_empathy-extended-away.pngbin0 -> 752 bytes
-rw-r--r--trunk/data/icons/hicolor_status_16x16_empathy-offline.pngbin0 -> 405 bytes
-rw-r--r--trunk/data/icons/hicolor_status_16x16_empathy-pending.pngbin0 -> 606 bytes
-rw-r--r--trunk/data/icons/hicolor_status_16x16_im-message.pngbin0 -> 510 bytes
-rw-r--r--trunk/data/icons/hicolor_status_16x16_user-typing.pngbin0 -> 587 bytes
-rw-r--r--trunk/data/icons/hicolor_status_22x22_empathy-available.pngbin0 -> 967 bytes
-rw-r--r--trunk/data/icons/hicolor_status_22x22_empathy-away.pngbin0 -> 740 bytes
-rw-r--r--trunk/data/icons/hicolor_status_22x22_empathy-busy.pngbin0 -> 1041 bytes
-rw-r--r--trunk/data/icons/hicolor_status_22x22_empathy-extended-away.pngbin0 -> 1115 bytes
-rw-r--r--trunk/data/icons/hicolor_status_22x22_empathy-offline.pngbin0 -> 571 bytes
-rw-r--r--trunk/data/icons/hicolor_status_22x22_empathy-pending.pngbin0 -> 806 bytes
-rw-r--r--trunk/data/icons/hicolor_status_24x24_empathy-available.pngbin0 -> 1075 bytes
-rw-r--r--trunk/data/icons/hicolor_status_24x24_empathy-away.pngbin0 -> 825 bytes
-rw-r--r--trunk/data/icons/hicolor_status_24x24_empathy-busy.pngbin0 -> 1081 bytes
-rw-r--r--trunk/data/icons/hicolor_status_24x24_empathy-extended-away.pngbin0 -> 1199 bytes
-rw-r--r--trunk/data/icons/hicolor_status_24x24_empathy-offline.pngbin0 -> 570 bytes
-rw-r--r--trunk/data/icons/hicolor_status_24x24_empathy-pending.pngbin0 -> 950 bytes
-rw-r--r--trunk/data/icons/hicolor_status_32x32_empathy-available.pngbin0 -> 1433 bytes
-rw-r--r--trunk/data/icons/hicolor_status_32x32_empathy-away.pngbin0 -> 1057 bytes
-rw-r--r--trunk/data/icons/hicolor_status_32x32_empathy-busy.pngbin0 -> 1218 bytes
-rw-r--r--trunk/data/icons/hicolor_status_32x32_empathy-extended-away.pngbin0 -> 1612 bytes
-rw-r--r--trunk/data/icons/hicolor_status_32x32_empathy-offline.pngbin0 -> 724 bytes
-rw-r--r--trunk/data/icons/hicolor_status_32x32_empathy-pending.pngbin0 -> 1298 bytes
-rw-r--r--trunk/data/icons/hicolor_status_48x48_empathy-available.pngbin0 -> 2211 bytes
-rw-r--r--trunk/data/icons/hicolor_status_48x48_empathy-away.pngbin0 -> 1606 bytes
-rw-r--r--trunk/data/icons/hicolor_status_48x48_empathy-busy.pngbin0 -> 1848 bytes
-rw-r--r--trunk/data/icons/hicolor_status_48x48_empathy-extended-away.pngbin0 -> 2622 bytes
-rw-r--r--trunk/data/icons/hicolor_status_48x48_empathy-offline.pngbin0 -> 1062 bytes
-rw-r--r--trunk/data/icons/hicolor_status_48x48_empathy-pending.pngbin0 -> 2018 bytes
-rw-r--r--trunk/data/icons/hicolor_status_scalable_empathy-available.svg104
-rw-r--r--trunk/data/icons/hicolor_status_scalable_empathy-away.svg93
-rw-r--r--trunk/data/icons/hicolor_status_scalable_empathy-busy.svg140
-rw-r--r--trunk/data/icons/hicolor_status_scalable_empathy-extended-away.svg120
-rw-r--r--trunk/data/icons/hicolor_status_scalable_empathy-offline.svg101
-rw-r--r--trunk/data/icons/hicolor_status_scalable_empathy-pending.svg103
-rw-r--r--trunk/data/icq.profile11
-rw-r--r--trunk/data/irc.profile9
-rw-r--r--trunk/data/jabber.profile12
-rw-r--r--trunk/data/msn-haze.profile12
-rw-r--r--trunk/data/msn.profile12
-rw-r--r--trunk/data/salut.profile9
-rw-r--r--trunk/data/sipphone.profile16
-rw-r--r--trunk/data/sofiasip.profile10
-rw-r--r--trunk/data/yahoo.profile11
-rw-r--r--trunk/docs/.gitignore8
-rw-r--r--trunk/docs/Makefile.am2
-rw-r--r--trunk/docs/libempathy-gtk/.gitignore6
-rw-r--r--trunk/docs/libempathy-gtk/Makefile.am59
-rw-r--r--trunk/docs/libempathy-gtk/libempathy-gtk-docs.sgml59
-rw-r--r--trunk/docs/libempathy-gtk/libempathy-gtk.types20
-rw-r--r--trunk/docs/libempathy-gtk/version.xml.in1
-rw-r--r--trunk/docs/libempathy/.gitignore6
-rw-r--r--trunk/docs/libempathy/Makefile.am60
-rw-r--r--trunk/docs/libempathy/libempathy-docs.sgml57
-rw-r--r--trunk/docs/libempathy/libempathy.types21
-rw-r--r--trunk/docs/libempathy/version.xml.in1
-rw-r--r--trunk/extensions/.gitignore2
-rw-r--r--trunk/extensions/Channel_Handler.xml62
-rw-r--r--trunk/extensions/Makefile.am137
-rw-r--r--trunk/extensions/Stream_Engine.xml44
-rw-r--r--trunk/extensions/Tube_Handler.xml62
-rw-r--r--trunk/extensions/all.xml22
-rw-r--r--trunk/extensions/extensions-cli.c31
-rw-r--r--trunk/extensions/extensions.c6
-rw-r--r--trunk/extensions/extensions.h20
-rw-r--r--trunk/extensions/misc.xml11
-rw-r--r--trunk/help/.gitignore2
-rw-r--r--trunk/help/C/empathy.xml297
-rw-r--r--trunk/help/C/legal.xml76
-rw-r--r--trunk/help/Makefile.am8
-rw-r--r--trunk/help/empathy.omf.in10
-rw-r--r--trunk/help/es/.gitignore1
-rw-r--r--trunk/help/es/es.po310
-rw-r--r--trunk/libempathy-gtk/.gitignore2
-rw-r--r--trunk/libempathy-gtk/Makefile.am191
-rw-r--r--trunk/libempathy-gtk/empathy-account-chooser.c678
-rw-r--r--trunk/libempathy-gtk/empathy-account-chooser.h74
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-aim.glade190
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-generic.glade89
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-groupwise.glade192
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-icq.glade218
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-irc.c514
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-irc.glade449
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-irc.h33
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-jabber.glade337
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-msn.glade192
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-salut.glade219
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-sip.c124
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-sip.glade208
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-sip.h33
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget-yahoo.glade315
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget.c730
-rw-r--r--trunk/libempathy-gtk/empathy-account-widget.h54
-rw-r--r--trunk/libempathy-gtk/empathy-accounts-dialog.c1092
-rw-r--r--trunk/libempathy-gtk/empathy-accounts-dialog.glade350
-rw-r--r--trunk/libempathy-gtk/empathy-accounts-dialog.h36
-rw-r--r--trunk/libempathy-gtk/empathy-avatar-chooser.c577
-rw-r--r--trunk/libempathy-gtk/empathy-avatar-chooser.h60
-rw-r--r--trunk/libempathy-gtk/empathy-avatar-image.c302
-rw-r--r--trunk/libempathy-gtk/empathy-avatar-image.h59
-rw-r--r--trunk/libempathy-gtk/empathy-cell-renderer-activatable.c117
-rw-r--r--trunk/libempathy-gtk/empathy-cell-renderer-activatable.h54
-rw-r--r--trunk/libempathy-gtk/empathy-cell-renderer-expander.c478
-rw-r--r--trunk/libempathy-gtk/empathy-cell-renderer-expander.h60
-rw-r--r--trunk/libempathy-gtk/empathy-cell-renderer-text.c366
-rw-r--r--trunk/libempathy-gtk/empathy-cell-renderer-text.h54
-rw-r--r--trunk/libempathy-gtk/empathy-chat-view.c1468
-rw-r--r--trunk/libempathy-gtk/empathy-chat-view.h101
-rw-r--r--trunk/libempathy-gtk/empathy-chat.c1775
-rw-r--r--trunk/libempathy-gtk/empathy-chat.glade120
-rw-r--r--trunk/libempathy-gtk/empathy-chat.h88
-rw-r--r--trunk/libempathy-gtk/empathy-conf.c371
-rw-r--r--trunk/libempathy-gtk/empathy-conf.h110
-rw-r--r--trunk/libempathy-gtk/empathy-contact-dialogs.c348
-rw-r--r--trunk/libempathy-gtk/empathy-contact-dialogs.glade91
-rw-r--r--trunk/libempathy-gtk/empathy-contact-dialogs.h41
-rw-r--r--trunk/libempathy-gtk/empathy-contact-list-store.c1518
-rw-r--r--trunk/libempathy-gtk/empathy-contact-list-store.h109
-rw-r--r--trunk/libempathy-gtk/empathy-contact-list-view.c1308
-rw-r--r--trunk/libempathy-gtk/empathy-contact-list-view.h80
-rw-r--r--trunk/libempathy-gtk/empathy-contact-menu.c235
-rw-r--r--trunk/libempathy-gtk/empathy-contact-menu.h52
-rw-r--r--trunk/libempathy-gtk/empathy-contact-widget.c952
-rw-r--r--trunk/libempathy-gtk/empathy-contact-widget.glade558
-rw-r--r--trunk/libempathy-gtk/empathy-contact-widget.h52
-rw-r--r--trunk/libempathy-gtk/empathy-geometry.c182
-rw-r--r--trunk/libempathy-gtk/empathy-geometry.h45
-rw-r--r--trunk/libempathy-gtk/empathy-images.h45
-rw-r--r--trunk/libempathy-gtk/empathy-irc-network-dialog.c580
-rw-r--r--trunk/libempathy-gtk/empathy-irc-network-dialog.h35
-rw-r--r--trunk/libempathy-gtk/empathy-log-window.c1087
-rw-r--r--trunk/libempathy-gtk/empathy-log-window.glade310
-rw-r--r--trunk/libempathy-gtk/empathy-log-window.h39
-rw-r--r--trunk/libempathy-gtk/empathy-new-message-dialog.c161
-rw-r--r--trunk/libempathy-gtk/empathy-new-message-dialog.glade181
-rw-r--r--trunk/libempathy-gtk/empathy-new-message-dialog.h33
-rw-r--r--trunk/libempathy-gtk/empathy-presence-chooser.c974
-rw-r--r--trunk/libempathy-gtk/empathy-presence-chooser.glade132
-rw-r--r--trunk/libempathy-gtk/empathy-presence-chooser.h58
-rw-r--r--trunk/libempathy-gtk/empathy-profile-chooser.c190
-rw-r--r--trunk/libempathy-gtk/empathy-profile-chooser.h34
-rw-r--r--trunk/libempathy-gtk/empathy-smiley-manager.c349
-rw-r--r--trunk/libempathy-gtk/empathy-smiley-manager.h74
-rw-r--r--trunk/libempathy-gtk/empathy-spell-dialog.c274
-rw-r--r--trunk/libempathy-gtk/empathy-spell-dialog.glade130
-rw-r--r--trunk/libempathy-gtk/empathy-spell-dialog.h39
-rw-r--r--trunk/libempathy-gtk/empathy-spell.c445
-rw-r--r--trunk/libempathy-gtk/empathy-spell.h41
-rw-r--r--trunk/libempathy-gtk/empathy-theme-boxes.c801
-rw-r--r--trunk/libempathy-gtk/empathy-theme-boxes.h54
-rw-r--r--trunk/libempathy-gtk/empathy-theme-irc.c348
-rw-r--r--trunk/libempathy-gtk/empathy-theme-irc.h54
-rw-r--r--trunk/libempathy-gtk/empathy-theme-manager.c429
-rw-r--r--trunk/libempathy-gtk/empathy-theme-manager.h58
-rw-r--r--trunk/libempathy-gtk/empathy-theme.c410
-rw-r--r--trunk/libempathy-gtk/empathy-theme.h98
-rw-r--r--trunk/libempathy-gtk/empathy-ui-utils.c1423
-rw-r--r--trunk/libempathy-gtk/empathy-ui-utils.h116
-rw-r--r--trunk/libempathy-gtk/libempathy-gtk.pc.in11
-rw-r--r--trunk/libempathy-gtk/totem-subtitle-encoding.c585
-rw-r--r--trunk/libempathy-gtk/totem-subtitle-encoding.h12
-rw-r--r--trunk/libempathy/.gitignore4
-rw-r--r--trunk/libempathy/Makefile.am175
-rw-r--r--trunk/libempathy/empathy-avatar.c179
-rw-r--r--trunk/libempathy/empathy-avatar.h53
-rw-r--r--trunk/libempathy/empathy-chatroom-manager.c497
-rw-r--r--trunk/libempathy/empathy-chatroom-manager.dtd17
-rw-r--r--trunk/libempathy/empathy-chatroom-manager.h72
-rw-r--r--trunk/libempathy/empathy-chatroom.c363
-rw-r--r--trunk/libempathy/empathy-chatroom.h77
-rw-r--r--trunk/libempathy/empathy-contact-factory.c175
-rw-r--r--trunk/libempathy/empathy-contact-factory.h79
-rw-r--r--trunk/libempathy/empathy-contact-groups.c285
-rw-r--r--trunk/libempathy/empathy-contact-groups.dtd17
-rw-r--r--trunk/libempathy/empathy-contact-groups.h38
-rw-r--r--trunk/libempathy/empathy-contact-list.c219
-rw-r--r--trunk/libempathy/empathy-contact-list.h95
-rw-r--r--trunk/libempathy/empathy-contact-manager.c509
-rw-r--r--trunk/libempathy/empathy-contact-manager.h61
-rw-r--r--trunk/libempathy/empathy-contact.c761
-rw-r--r--trunk/libempathy/empathy-contact.h118
-rw-r--r--trunk/libempathy/empathy-debug.c109
-rw-r--r--trunk/libempathy/empathy-debug.h89
-rw-r--r--trunk/libempathy/empathy-dispatcher.c681
-rw-r--r--trunk/libempathy/empathy-dispatcher.h72
-rw-r--r--trunk/libempathy/empathy-idle.c661
-rw-r--r--trunk/libempathy/empathy-idle.h73
-rw-r--r--trunk/libempathy/empathy-irc-network-manager.c777
-rw-r--r--trunk/libempathy/empathy-irc-network-manager.h81
-rw-r--r--trunk/libempathy/empathy-irc-network.c361
-rw-r--r--trunk/libempathy/empathy-irc-network.h80
-rw-r--r--trunk/libempathy/empathy-irc-networks.dtd18
-rw-r--r--trunk/libempathy/empathy-irc-server.c229
-rw-r--r--trunk/libempathy/empathy-irc-server.h64
-rw-r--r--trunk/libempathy/empathy-log-manager.c796
-rw-r--r--trunk/libempathy/empathy-log-manager.h99
-rw-r--r--trunk/libempathy/empathy-log-manager.xsl148
-rw-r--r--trunk/libempathy/empathy-message.c500
-rw-r--r--trunk/libempathy/empathy-message.h79
-rw-r--r--trunk/libempathy/empathy-status-presets.c407
-rw-r--r--trunk/libempathy/empathy-status-presets.dtd14
-rw-r--r--trunk/libempathy/empathy-status-presets.h46
-rw-r--r--trunk/libempathy/empathy-time.c124
-rw-r--r--trunk/libempathy/empathy-time.h47
-rw-r--r--trunk/libempathy/empathy-tp-call.c843
-rw-r--r--trunk/libempathy/empathy-tp-call.h92
-rw-r--r--trunk/libempathy/empathy-tp-chat.c1230
-rw-r--r--trunk/libempathy/empathy-tp-chat.h76
-rw-r--r--trunk/libempathy/empathy-tp-contact-factory.c1291
-rw-r--r--trunk/libempathy/empathy-tp-contact-factory.h72
-rw-r--r--trunk/libempathy/empathy-tp-contact-list.c1096
-rw-r--r--trunk/libempathy/empathy-tp-contact-list.h57
-rw-r--r--trunk/libempathy/empathy-tp-group.c970
-rw-r--r--trunk/libempathy/empathy-tp-group.h92
-rw-r--r--trunk/libempathy/empathy-tp-roomlist.c398
-rw-r--r--trunk/libempathy/empathy-tp-roomlist.h59
-rw-r--r--trunk/libempathy/empathy-tp-tube.c509
-rw-r--r--trunk/libempathy/empathy-tp-tube.h69
-rw-r--r--trunk/libempathy/empathy-tube-handler.c229
-rw-r--r--trunk/libempathy/empathy-tube-handler.h64
-rw-r--r--trunk/libempathy/empathy-utils.c749
-rw-r--r--trunk/libempathy/empathy-utils.h115
-rw-r--r--trunk/libempathy/irc-networks.xml543
-rw-r--r--trunk/libempathy/libempathy.pc.in11
-rw-r--r--trunk/m4/.gitignore3
-rw-r--r--trunk/m4/acinclude.m465
-rw-r--r--trunk/m4/empathy-args.m419
-rw-r--r--trunk/m4/empathy-valgrind.m431
-rw-r--r--trunk/m4/python.m466
-rw-r--r--trunk/megaphone/.gitignore4
-rw-r--r--trunk/megaphone/Makefile.am2
-rw-r--r--trunk/megaphone/data/GNOME_Megaphone_Applet.schemas.in30
-rw-r--r--trunk/megaphone/data/GNOME_Megaphone_Applet.server.in.in25
-rw-r--r--trunk/megaphone/data/GNOME_Megaphone_Applet.xml9
-rw-r--r--trunk/megaphone/data/Makefile.am35
-rw-r--r--trunk/megaphone/src/Makefile.am17
-rw-r--r--trunk/megaphone/src/megaphone-applet.c559
-rw-r--r--trunk/megaphone/src/megaphone-applet.h54
-rw-r--r--trunk/nothere/.gitignore4
-rw-r--r--trunk/nothere/Makefile.am2
-rw-r--r--trunk/nothere/data/GNOME_NotHere_Applet.server.in.in25
-rw-r--r--trunk/nothere/data/GNOME_NotHere_Applet.xml7
-rw-r--r--trunk/nothere/data/Makefile.am35
-rw-r--r--trunk/nothere/src/Makefile.am17
-rw-r--r--trunk/nothere/src/nothere-applet.c137
-rw-r--r--trunk/nothere/src/nothere-applet.h52
-rw-r--r--trunk/po/.gitignore6
-rw-r--r--trunk/po/ChangeLog13
-rw-r--r--trunk/po/ChangeLog.old347
-rw-r--r--trunk/po/LINGUAS47
-rw-r--r--trunk/po/POTFILES.in75
-rw-r--r--trunk/po/POTFILES.skip6
-rw-r--r--trunk/po/ar.po2485
-rw-r--r--trunk/po/az.po1136
-rw-r--r--trunk/po/bg.po1406
-rw-r--r--trunk/po/ca.po3940
-rw-r--r--trunk/po/cs.po1924
-rw-r--r--trunk/po/cy.po2235
-rw-r--r--trunk/po/da.po2578
-rw-r--r--trunk/po/de.po1371
-rw-r--r--trunk/po/dz.po1419
-rw-r--r--trunk/po/el.po2225
-rw-r--r--trunk/po/en_CA.po2380
-rw-r--r--trunk/po/en_GB.po2135
-rw-r--r--trunk/po/eo.po1921
-rw-r--r--trunk/po/es.po1838
-rw-r--r--trunk/po/eu.po1762
-rw-r--r--trunk/po/fi.po1773
-rw-r--r--trunk/po/fr.po1794
-rw-r--r--trunk/po/ga.po1141
-rw-r--r--trunk/po/gl.po1934
-rw-r--r--trunk/po/he.po1877
-rw-r--r--trunk/po/hr.po1144
-rw-r--r--trunk/po/hu.po1767
-rw-r--r--trunk/po/it.po1843
-rw-r--r--trunk/po/ja.po1439
-rw-r--r--trunk/po/lt.po1745
-rw-r--r--trunk/po/ml.po1124
-rw-r--r--trunk/po/ms.po1982
-rw-r--r--trunk/po/nb.po1807
-rw-r--r--trunk/po/ne.po1259
-rw-r--r--trunk/po/nl.po1971
-rw-r--r--trunk/po/oc.po1664
-rw-r--r--trunk/po/pl.po2208
-rw-r--r--trunk/po/pt.po2003
-rw-r--r--trunk/po/pt_BR.po2685
-rw-r--r--trunk/po/ru.po2335
-rw-r--r--trunk/po/sl.po1737
-rw-r--r--trunk/po/sq.po1347
-rw-r--r--trunk/po/sr.po2314
-rw-r--r--trunk/po/sr@Latn.po2314
-rw-r--r--trunk/po/sv.po2897
-rw-r--r--trunk/po/tr.po854
-rw-r--r--trunk/po/uk.po1915
-rw-r--r--trunk/po/vi.po1940
-rw-r--r--trunk/po/zh_CN.po1961
-rw-r--r--trunk/po/zh_HK.po2561
-rw-r--r--trunk/po/zh_TW.po2561
-rw-r--r--trunk/python/.gitignore2
-rw-r--r--trunk/python/Makefile.am2
-rwxr-xr-xtrunk/python/example.py31
-rw-r--r--trunk/python/pyempathy.patch27
-rw-r--r--trunk/python/pyempathy/Makefile.am42
-rw-r--r--trunk/python/pyempathy/pyempathy.defs2305
-rw-r--r--trunk/python/pyempathy/pyempathy.override64
-rw-r--r--trunk/python/pyempathy/pyempathymodule.c24
-rw-r--r--trunk/python/pyempathygtk.patch18
-rw-r--r--trunk/python/pyempathygtk/Makefile.am43
-rw-r--r--trunk/python/pyempathygtk/pyempathygtk.defs1833
-rw-r--r--trunk/python/pyempathygtk/pyempathygtk.override74
-rw-r--r--trunk/python/pyempathygtk/pyempathygtkmodule.c23
-rwxr-xr-xtrunk/python/update-binding.sh86
-rwxr-xr-xtrunk/release.py299
-rw-r--r--trunk/rules/check.mak120
-rw-r--r--trunk/src/.gitignore9
-rw-r--r--trunk/src/Makefile.am58
-rw-r--r--trunk/src/bacon-message-connection.c396
-rw-r--r--trunk/src/bacon-message-connection.h43
-rw-r--r--trunk/src/empathy-about-dialog.c114
-rw-r--r--trunk/src/empathy-about-dialog.h36
-rw-r--r--trunk/src/empathy-accounts.112
-rw-r--r--trunk/src/empathy-accounts.c66
-rw-r--r--trunk/src/empathy-call-window.c564
-rw-r--r--trunk/src/empathy-call-window.glade334
-rw-r--r--trunk/src/empathy-call-window.h37
-rw-r--r--trunk/src/empathy-chat-window.c1508
-rw-r--r--trunk/src/empathy-chat-window.glade344
-rw-r--r--trunk/src/empathy-chat-window.h79
-rw-r--r--trunk/src/empathy-chatrooms-window.c586
-rw-r--r--trunk/src/empathy-chatrooms-window.glade306
-rw-r--r--trunk/src/empathy-chatrooms-window.h37
-rw-r--r--trunk/src/empathy-logs.c66
-rw-r--r--trunk/src/empathy-main-window.c1160
-rw-r--r--trunk/src/empathy-main-window.glade298
-rw-r--r--trunk/src/empathy-main-window.h35
-rw-r--r--trunk/src/empathy-new-chatroom-dialog.c574
-rw-r--r--trunk/src/empathy-new-chatroom-dialog.glade271
-rw-r--r--trunk/src/empathy-new-chatroom-dialog.h34
-rw-r--r--trunk/src/empathy-preferences.c994
-rw-r--r--trunk/src/empathy-preferences.glade604
-rw-r--r--trunk/src/empathy-preferences.h38
-rw-r--r--trunk/src/empathy-status-icon.c695
-rw-r--r--trunk/src/empathy-status-icon.glade59
-rw-r--r--trunk/src/empathy-status-icon.h53
-rw-r--r--trunk/src/empathy.124
-rw-r--r--trunk/src/empathy.c479
-rw-r--r--trunk/src/ephy-spinner.c977
-rw-r--r--trunk/src/ephy-spinner.h70
-rw-r--r--trunk/tests/.gitignore5
-rw-r--r--trunk/tests/Makefile.am52
-rw-r--r--trunk/tests/check-empathy-irc-network-manager.c877
-rw-r--r--trunk/tests/check-empathy-irc-network.c240
-rw-r--r--trunk/tests/check-empathy-irc-server.c93
-rw-r--r--trunk/tests/check-empathy-utils.c29
-rw-r--r--trunk/tests/check-helpers.c63
-rw-r--r--trunk/tests/check-helpers.h43
-rw-r--r--trunk/tests/check-irc-helper.c80
-rw-r--r--trunk/tests/check-irc-helper.h27
-rw-r--r--trunk/tests/check-libempathy.h9
-rw-r--r--trunk/tests/check-main.c43
-rw-r--r--trunk/tests/contact-manager.c34
-rw-r--r--trunk/tests/contact-run-until-ready-2.c63
-rw-r--r--trunk/tests/contact-run-until-ready.c53
-rw-r--r--trunk/tests/dlopen.supp127
-rw-r--r--trunk/tests/valgrind.supp711
-rw-r--r--trunk/tests/xml/.gitignore1
-rw-r--r--trunk/tests/xml/Makefile.am3
-rw-r--r--trunk/tests/xml/default-irc-networks-sample.xml30
-rw-r--r--trunk/tests/xml/user-irc-networks-sample.xml26
-rw-r--r--trunk/tools/.gitignore2
-rw-r--r--trunk/tools/Makefile.am55
-rw-r--r--trunk/tools/c-constants-generator.xsl299
-rw-r--r--trunk/tools/c-interfaces-generator.xsl84
-rw-r--r--trunk/tools/check-c-style.sh36
-rw-r--r--trunk/tools/check-coding-style.mk17
-rw-r--r--trunk/tools/check-misc.sh13
-rw-r--r--trunk/tools/check-whitespace.sh17
-rw-r--r--trunk/tools/doc-generator.xsl753
-rw-r--r--trunk/tools/glib-client-gen.py1138
-rw-r--r--trunk/tools/glib-client-marshaller-gen.py59
-rw-r--r--trunk/tools/glib-errors-enum-body.xsl72
-rw-r--r--trunk/tools/glib-errors-enum-header.xsl73
-rw-r--r--trunk/tools/glib-ginterface-gen.py711
-rw-r--r--trunk/tools/glib-gtypes-generator.py230
-rw-r--r--trunk/tools/glib-interfaces-body-generator.xsl47
-rw-r--r--trunk/tools/glib-interfaces-generator.xsl55
-rw-r--r--trunk/tools/glib-signals-marshal-gen.py55
-rw-r--r--trunk/tools/gobject-foo.py81
-rw-r--r--trunk/tools/identity.xsl7
-rw-r--r--trunk/tools/libglibcodegen.py320
-rw-r--r--trunk/tools/ls-interfaces.xsl35
-rw-r--r--trunk/tools/make-all-async.xsl43
-rw-r--r--trunk/tools/spec-to-introspect.xsl51
-rw-r--r--trunk/tools/telepathy-glib-env.in9
-rw-r--r--trunk/tools/with-session-bus.sh73
478 files changed, 170195 insertions, 0 deletions
diff --git a/trunk/.gitignore b/trunk/.gitignore
new file mode 100644
index 000000000..c30a47430
--- /dev/null
+++ b/trunk/.gitignore
@@ -0,0 +1,46 @@
+*.[oa]
+*.lo
+*.la
+Makefile.in
+Makefile
+.deps
+.libs
+*.sw[po]
+*enum-types*
+*.pc
+*.tar.*
+*.orig
+*.rej
+*.bak
+*~
+*.pyc
+*.loT
+.semanticache
+
+ChangeLog
+stamp-h1
+xmldocs.make
+INSTALL
+aclocal.m4
+config.guess
+config.h
+config.h.in
+config.log
+config.status
+config.status.lineno
+config.sub
+configure
+depcomp
+autom4te.cache
+gtk-doc.make
+install-sh
+intltool-*
+libtool
+ltmain.sh
+missing
+mkinstalldirs
+omf.make
+compile
+tags
+TAGS
+gnome-doc-utils.make
diff --git a/trunk/AUTHORS b/trunk/AUTHORS
new file mode 100644
index 000000000..2847eaa37
--- /dev/null
+++ b/trunk/AUTHORS
@@ -0,0 +1,4 @@
+Mikael Hallendal <micke@imendio.com>
+Richard Hult <richard@imendio.com>
+Martyn Russell <martyn@gnome.org>
+Xavier Claessens <xclaesse@gmail.com>
diff --git a/trunk/CONTRIBUTORS b/trunk/CONTRIBUTORS
new file mode 100644
index 000000000..232f6c27f
--- /dev/null
+++ b/trunk/CONTRIBUTORS
@@ -0,0 +1,19 @@
+Andreas Lööw
+Aurelien Naldi
+Bastien Nocera
+Christoffer Olsen
+Frederic Crozat
+Geert-Jan Van den Bogaerde
+Johan Hammar
+Jonatan Magnusson
+Jordi Mallach
+Kim Andersen
+Martyn Russell
+Mike Gratton
+Ross Burton
+Sjoerd Simons
+Thomas Reynolds
+Vincent Untz
+Xavier Claessens
+Andreas Nilsson
+Vinicius Depizzol
diff --git a/trunk/COPYING b/trunk/COPYING
new file mode 100644
index 000000000..d60c31a97
--- /dev/null
+++ b/trunk/COPYING
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/trunk/ChangeLog.old b/trunk/ChangeLog.old
new file mode 100644
index 000000000..6274dd053
--- /dev/null
+++ b/trunk/ChangeLog.old
@@ -0,0 +1,2353 @@
+2007-12-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-preferences.c:
+ * libempathy-gtk/empathy-preferences.glade:
+ * libempathy/empathy-idle.c: When NM is in sleeping (=disabled) state,
+ do just like if it was connected. Remove option from preference dialog
+ to disabled NM support because NM can be disabled using nm-applet, but
+ let the option in gconf, it can be useful in case of buggy NM.
+
+2007-12-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * data/empathy.schemas.in:
+ * libempathy-gtk/empathy-preferences.c:
+ * libempathy-gtk/empathy-preferences.glade:
+ * libempathy-gtk/empathy-preferences.h:
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy/empathy-idle.c:
+ * libempathy/empathy-idle.h: Add a preference option to disable/enable
+ NM support.
+
+2007-12-05 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * src/Makefile.am: Ship empathy-call.chandler as extra_dist if not
+ compiled with VoIP support. Fixes bug #501486.
+
+2007-12-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.21.4.
+
+2007-12-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-chat-window.c:
+ * libempathy-gtk/empathy-chat.c:
+ * libempathy-gtk/empathy-chat.h:
+ * libempathy-gtk/empathy-group-chat.c:
+ * libempathy-gtk/empathy-group-chat.h:
+ * libempathy-gtk/empathy-private-chat.c:
+ * libempathy-gtk/empathy-private-chat.h:
+ * libempathy/empathy-tp-chat.c:
+ * libempathy/empathy-tp-chat.h:
+ * python/pyempathy/pyempathy.defs:
+ * python/pyempathygtk/pyempathygtk.defs:
+ * src/empathy-chat-chandler.c: Cleanup chat objects API and request a
+ new Text channel if account gets reconnected.
+
+2007-12-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-debug.c: Call tp_debug_set_flags to get tp-glib
+ debug output.
+
+2007-12-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac:
+ * libempathy-gtk/empathy-account-chooser.c:
+ * libempathy-gtk/empathy-accounts-dialog.c:
+ * libempathy-gtk/empathy-chat.c:
+ * libempathy-gtk/empathy-contact-dialogs.c:
+ * libempathy-gtk/empathy-group-chat.c:
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/empathy-presence-chooser.c:
+ * libempathy-gtk/empathy-status-presets.c:
+ * libempathy/empathy-avatar.c:
+ * libempathy/empathy-contact-factory.c:
+ * libempathy/empathy-contact-manager.c:
+ * libempathy/empathy-tp-call.c:
+ * libempathy/empathy-tp-chat.c:
+ * libempathy/empathy-tp-chat.h:
+ * libempathy/empathy-tp-contact-list.c:
+ * libempathy/empathy-tp-group.c:
+ * libempathy/empathy-tp-roomlist.c:
+ * libempathy/empathy-utils.c:
+ * libempathy/empathy-utils.h:
+ * python/pyempathy/pyempathy.defs:
+ * src/empathy.c: Do not use deprecated symbols from libtelepathy. We
+ now link on telepathy-glib, make use of tp_strdiff and
+ tp_escape_as_identifier instead of using our own copy of those
+ functions.
+
+2007-12-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/Makefile.am:
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/empathy-new-message-dialog.c:
+ * libempathy-gtk/empathy-new-message-dialog.glade:
+ * libempathy-gtk/empathy-new-message-dialog.h:
+ * libempathy-gtk/empathy-status-icon.c: Implement New Message menu
+ entry. Fixes bug #489979.
+
+2007-11-30 Xavier Claessens <xclaesse@gmail.com>
+
+ * data/empathy.schemas.in:
+ * libempathy-gtk/empathy-group-chat.c:
+ * libempathy-gtk/empathy-preferences.h: Add a gconf key to define the
+ char to be added for tab completion.
+ Fixes bug #453418 (Matej Cepl, Xavier Claessens).
+
+2007-11-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-private-chat.c: Request new Text Channel if
+ the contact is online again and CM don't support offline message.
+
+2007-11-22 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-group-chat.c: use ":" instead of "," for nick
+ completion.
+
+2007-11-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * TODO: Updated.
+
+2007-11-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Add x11 to build deps.
+
+2007-11-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-group-chat.c:
+ * libempathy-gtk/empathy-chat.c:
+ * libempathy-gtk/empathy-chat.h: Add nick completion for MUCs.
+ Fixes bug #453418.
+
+2007-11-15 Xavier Claessens <xclaesse@gmail.com>
+
+ * docs/*:
+ * doc/*:
+ * configure.ac:
+ * Makefile.am: Remove doc directory and replace it with a better gtk-doc
+ in docs. More files are auto-generated, we have less files on SVN.
+
+2007-11-15 Xavier Claessens <xclaesse@gmail.com>
+
+ * src/Makefile.am: Do not build voip chandler if building without voip
+ support. Fixes bug #496861.
+
+2007-11-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-chandler.c:
+ * libempathy/empathy-filter.c: Do not use deprecated tp_conn_new(), use
+ tp_conn_new_without_connect() instead.
+
+2007-11-12 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.21.3.
+
+2007-11-12 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.c:
+ * src/empathy-call-chandler.c:
+ * src/empathy-call.chandler:
+ * src/org.gnome.Empathy.Call.service.in:
+ * src/empathy-chat.chandler:
+ * src/org.gnome.Empathy.Chat.service.in:
+ * src/empathy-chat-chandler.c: Don't use the same bus name for filter
+ and chandler programs.
+
+2007-11-12 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-jabber.glade: Jabber priority is
+ in the range -128 127 (Laurent Bigonville).
+
+2007-11-11 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-chat.c:
+ * src/empathy-call-chandler.c:
+ * src/org.gnome.Empathy.Chat.service.in:
+ * src/empathy-chat-chandler.c:
+ * src/empathy.c:
+ * src/Makefile.am: Move chats to its own process.
+
+2007-11-07 Xavier Claessens <xclaesse@gmail.com>
+
+ * src/org.gnome.Empathy.Call.service.in:
+ * src/Makefile.am: Install empathy-call-chandler to $libexecdir.
+
+2007-11-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-jabber.glade:
+ * libempathy-gtk/empathy-account-widget-jabber.c: Allow to change jabber
+ priority. Fixes bug #493992 (Laurent Bigonville).
+
+2007-11-04 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-main-window.c: Display error message when an
+ account failed to connect. Based on Gossip's code.
+
+2007-11-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-contact-factory.c: Call ClearAvatar if the data
+ is NULL or size <= 0 in empathy_contact_factory_set_avatar().
+
+2007-11-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-avatar-chooser.c:
+ * libempathy-gtk/empathy-avatar-chooser.h:
+ * python/pyempathy/pyempathy.defs:
+ * libempathy/empathy-contact-factory.c:
+ * libempathy/empathy-contact-factory.h: Rename
+ empathy_contact_factory_set_name() to _set_alias(). Implements
+ empathy_contact_factory_set_avatar(). Return the mime_type in
+ empathy_avatar_chooser_get_image_data().
+
+2007-11-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-main-window.c: Unref contact returned by
+ empathy_contact_factory_get_user().
+
+2007-11-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * src/empathy.c: Make use of gtk_init_with_args for command line
+ parsing. Fixes bug #491985 (Basilio Kublik).
+
+2007-11-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * data/icons/hicolor_status_scalable_empathy-pending.svg:
+ * data/icons/hicolor_status_16x16_empathy-pending.svg:
+ * data/icons/hicolor_status_scalable_empathy-extended-away.svg:
+ * data/icons/hicolor_status_16x16_empathy-extended-away.svg:
+ * data/icons/hicolor_status_scalable_empathy-away.svg:
+ * data/icons/hicolor_status_16x16_empathy-away.svg:
+ * data/icons/hicolor_status_scalable_empathy-offline.svg:
+ * data/icons/hicolor_status_16x16_empathy-offline.svg:
+ * data/icons/hicolor_status_scalable_empathy-busy.svg:
+ * data/icons/hicolor_status_16x16_empathy-busy.svg:
+ * data/icons/hicolor_status_scalable_empathy-available.svg:
+ * data/icons/hicolor_status_16x16_empathy-available.svg:
+ * data/icons/Makefile.am: Install SVG status images as scalable.
+ Fixes bug #492984.
+
+2007-11-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.21.2.
+
+2007-10-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * libempathy-gtk/empathy-contact-list-store.c:
+ * libempathy-gtk/empathy-contact-list-store.h:
+ * doc/libempathy-gtk/libempathy-gtk.types:
+ * doc/libempathy-gtk/tmpl/empathy-contact-list-store.sgml: Rename
+ COL_XXX to EMPATHY_CONTACT_LIST_STORE_COL_XXX since it's in public API.
+ Fixes bug #470804.
+
+2007-10-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.glade:
+ * libempathy-gtk/empathy-group-chat.glade:
+ * libempathy-gtk/empathy-main-window.glade:
+ * libempathy-gtk/empathy-images.h:
+ * src/empathy.c:
+ * src/Makefile.am:
+ * configure.ac:
+ * data/jabber.profile:
+ * data/salut.profile:
+ * data/msn.profile:
+ * data/gtalk.profile:
+ * data/irc.profile:
+ * data/22x22:
+ * data/32x32:
+ * data/24x24:
+ * data/16x16:
+ * data/48x48:
+ * data/scalable:
+ * data/Makefile.am:
+ * data/icons/*: Rename icons to follow fd.o icon naming spec. Move icons
+ to the right directory. Fixes bug #470418 (Michael Monreal).
+
+2007-10-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-smiley-manager.c: Update to new icon naming
+ spec for new avatars. Fixes bug #490173 (Michael Monreal).
+
+2007-10-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-dialogs.c: Change edit personal
+ information window title to "Personal Information". Fixes bug #490159.
+ Change add contact window title to "New Contact", need a capitalized
+ 'C'. Change edit contact information window title to
+ "Edit Contact Information".
+
+2007-10-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-chat.glade: Add Ctr-L accelerator to clear
+ the chat. Fixes bug #490125 (Marco Barisione).
+
+2007-10-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-main-window.glade: Change window title to
+ "Contact List", both words should be capitalised according to HIG.
+ Fixes bug #490076 (Michael Monreal).
+
+2007-10-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-main-window.glade: Remove "..." from the
+ "Manage Favorites..." menu item. Fixes bug #490086 (Michael Monreal).
+
+2007-10-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-images.h:
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * libempathy-gtk/empathy-chat.glade:
+ * libempathy-gtk/empathy-log-window.glade:
+ * libempathy-gtk/empathy-main-window.glade: Use "document-open-recent"
+ icon instead of gtk-justify-left for history icon.
+ Fixes bug #490080 (Michael Monreal, Xavier Claessens).
+
+2007-10-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-main-window.glade: Use "user-info" icon for
+ Edit->Personal Information menu item.
+ Fixes bug #490079 (Michael Monreal).
+
+2007-10-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-log-window.glade: Use the navigation icons in
+ the history dialog. Fixes bug #490077 (Michael Monreal).
+
+2007-10-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-log-window.glade: Set window title to
+ "Previous Conversations". Fixes bug #490075 (Michael Monreal).
+
+2007-10-24 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-chooser.c:
+ * libempathy-gtk/empathy-profile-chooser.c:
+ * libempathy-gtk/empathy-account-chooser.h:
+ * libempathy-gtk/empathy-profile-chooser.h:
+ * libempathy-gtk/empathy-images.h:
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/empathy-main-window.h:
+ * libempathy-gtk/empathy-cell-renderer-activatable.c:
+ * libempathy-gtk/empathy-account-widget-salut.c:
+ * libempathy-gtk/empathy-presence-chooser.c:
+ * libempathy-gtk/empathy-cell-renderer-activatable.h:
+ * libempathy-gtk/empathy-account-widget-salut.h:
+ * libempathy-gtk/empathy-account-widget-msn.c:
+ * libempathy-gtk/empathy-presence-chooser.h:
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy-gtk/empathy-contact-dialogs.c:
+ * libempathy-gtk/empathy-account-widget-msn.h:
+ * libempathy-gtk/empathy-status-icon.h:
+ * libempathy-gtk/empathy-contact-dialogs.h:
+ * libempathy-gtk/empathy-account-widget-jabber.c:
+ * libempathy-gtk/empathy-account-widget-jabber.h:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-contact-widget.h:
+ * libempathy-gtk/empathy-smiley-manager.c:
+ * libempathy-gtk/empathy-about-dialog.h:
+ * libempathy-gtk/empathy-smiley-manager.h:
+ * libempathy-gtk/empathy-accounts-dialog.h:
+ * libempathy/empathy-avatar.h:
+ * libempathy/empathy-debug.h: Cleanup licences and copyrights,
+ Modules with 100% collabora code are now relicenced to LGPL.
+
+ * doc/libempathy-gtk/tmpl/empathy-contact-list-store.sgml: Updated.
+
+2007-10-23 Xavier Claessens <xclaesse@gmail.com>
+
+ * doc/libempathy-gtk/tmpl/empathy-profile-chooser.sgml:
+ * doc/libempathy-gtk/tmpl/empathy-contact-dialogs.sgml:
+ * doc/libempathy-gtk/tmpl/empathy-contact-widget.sgml: Updated.
+
+2007-10-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-widget.h: Add
+ EMPATHY_CONTACT_WIDGET_EDIT_NONE to EmpathyContactWidgetFlags.
+
+2007-10-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-dialogs.h:
+ * libempathy-gtk/empathy-contact-dialogs.c:
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/empathy-contact-list-view.c: Don't allow to change
+ account if we are editing information of self-contact.
+
+2007-10-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-chooser.c:
+ * libempathy-gtk/empathy-contact-dialogs.c:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-contact-widget.h:
+ * libempathy-gtk/empathy-accounts-dialog.c: To know if an account is
+ connected, use mission_control_get_connection_status() instead of
+ mission_control_get_connection(). Update account chooser if an account's
+ status changes or if it get removed.
+ Move account chooser filter func for add-contact's window from
+ EmpathyContactWidget to EmpathyContactDialogs.
+
+2007-10-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-accounts-dialog.c: Update Enable/Disable
+ button when "account-enabled" or "account-disabled" are emitted on
+ McAccountMonitor. Set tooltip on protocol icon with the profile's
+ display name.
+
+2007-10-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-profile-chooser.c:
+ * libempathy-gtk/empathy-profile-chooser.h:
+ * libempathy-gtk/empathy-accounts-dialog.c: set unsensitive the add
+ button if there is no profile installed and tell the user to install
+ some connection managers.
+
+ * libempathy-gtk/empathy-ui-utils.c: Fix indentation.
+
+2007-10-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-chat-window.c: If EmpathyChat object does not
+ exist when DnD a contact, create one. Fixes bug #483168.
+
+2007-10-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.c: Fix crash when iconifying main
+ window if it's already hiden.
+
+2007-10-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-group-chat.c:
+ * libempathy/empathy-tp-chatroom.c:Don't accept invitation if we are
+ not invited.
+
+ * libempathy-gtk/empathy-status-icon.c: Correctly toggle visibility
+ with ALT-F4 on the main windows.
+
+2007-10-18 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-log-manager.c:
+ * libempathy/empathy-log-manager.h:
+ * libempathy/empathy-tp-chat.c:
+ * libempathy/empathy-contact-manager.c:
+ * libempathy/empathy-tp-chat.h:
+ * libempathy/empathy-contact-manager.h:
+ * libempathy/empathy-avatar.c:
+ * libempathy/empathy-chandler.c:
+ * libempathy/empathy-tp-contact-list.c:
+ * libempathy/empathy-chandler.h:
+ * libempathy/empathy-filter.c:
+ * libempathy/empathy-tp-roomlist.c:
+ * libempathy/empathy-tp-contact-list.h:
+ * libempathy/empathy-filter.h:
+ * libempathy/empathy-tp-chatroom.c:
+ * libempathy/empathy-tp-roomlist.h:
+ * libempathy/empathy-contact-factory.c:
+ * libempathy/empathy-tp-chatroom.h:
+ * libempathy/empathy-contact-list.c:
+ * libempathy/empathy-contact-factory.h:
+ * libempathy/empathy-contact-list.h:
+ * libempathy/empathy-chatroom.c:
+ * libempathy/empathy-idle.c:
+ * libempathy/empathy-tp-group.c:
+ * libempathy/empathy-chatroom.h:
+ * libempathy/empathy-idle.h:
+ * libempathy/empathy-tp-group.h: Cleanup licences and copyrights,
+ Modules with 100% collabora code are now relicenced to LGPL.
+
+2007-10-15 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-ui-utils.c: Don't warning if we try to load
+ a NULL icon.
+
+ * data/Makefile.am:
+ * data/aim.profile:
+ * data/sofiasip.profile: Add AIM and SIP profiles. Fixes bug #457740
+ (Jamey Hicks).
+
+2007-10-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-chat.c: Set chat state to ACTIVE when receiving
+ a message from a contact, avoid staying in COMPOSING state forever for
+ protocols like MSN that do not notify when contact stoped writing.
+
+2007-10-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-chat-view.h:
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/empathy-chat.c:
+ * libempathy-gtk/empathy-chat-window.c:
+ * libempathy-gtk/empathy-chat-view.c:
+ * libempathy/empathy-log-manager.c:
+ * libempathy/empathy-time.c:
+ * libempathy/empathy-tp-chat.c:
+ * libempathy/empathy-time.h:
+ * libempathy/empathy-message.c:
+ * libempathy/empathy-message.h:
+ * libempathy/empathy-presence.c:
+ * configure.ac: Don't use deprecated GtkTooltips API. Add commented out
+ lines in configure.ac to disable GLib and GTK deprecated symbols.
+ Replace EmpathyTime by time_t which is more appropriate for timestamps.
+
+ * doc/*: Updated.
+
+2007-10-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/empathy-presence-chooser.c:
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-chat.c:
+ * libempathy-gtk/empathy-contact-list-store.c:
+ * libempathy-gtk/empathy-chat-window.c:
+ * libempathy/empathy-idle.c:
+ * tests/contact-manager.c: Use g_timeout_add_seconds when appropriated
+ to avoid weaking the process too much.
+
+2007-10-11 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-contact-list.c: Set supress_handler to TRUE when
+ creating new group channel.
+
+2007-10-11 Xavier Claessens <xclaesse@gmail.com>
+
+ * po/POTFILES.in: Add missing files.
+
+2007-10-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump MissionControl version to 4.37, we uses new API
+ introduced in that version.
+
+2007-10-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/empathy-contact-dialogs.c:
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * libempathy-gtk/empathy-contact-dialogs.h:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-contact-widget.h:
+ * libempathy-gtk/empathy-chat-window.c:
+ * megaphone/src/megaphone-applet.c: More flexible API for
+ EmpathyContactWidget, we now have flags to set editable each fields.
+ Implement personal information menu item in main window.
+
+2007-10-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-widget.glade:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-avatar-chooser.c:
+ * libempathy-gtk/empathy-avatar-image.c: Makes avatar looks better in
+ information and edit dialogs.
+
+2007-10-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-ui-utils.c:
+ * libempathy-gtk/empathy-ui-utils.h:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-contact-widget.h:
+ * libempathy-gtk/empathy-avatar-chooser.c:
+ * libempathy-gtk/empathy-avatar-chooser.h:
+ * libempathy-gtk/empathy-avatar-image.c:
+ * libempathy-gtk/empathy-avatar-image.h:
+ * libempathy-gtk/Makefile.am:
+ * src/empathy.c: Implement EmpathyAvatarChooser and EmpathyAvatarImage
+ and make use of them in contact information windows. That means we can
+ now enlarge avatars when clicking on it and we can set our own avatar if
+ we edit our own contact.
+
+2007-10-03 Marco Barisione <marco@barisione.org>
+
+ * libempathy/empathy-contact-factory.c:
+ * libempathy/empathy-tp-call.c:
+ * libempathy/empathy-tp-group.c:
+ * libempathy/empathy-utils.c: Initialize every GError to NULL. Fixes
+ bug #482889.
+
+2007-10-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-contact-list.c: Add back protocol group.
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-list-view.c: Add a #ifdef HAVE_VOIP.
+ Fixes bug #482190 (Marco Barisione).
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * data/Makefile.am:
+ * data/empathy.desktop.in.in: Use fd.o standard location for autostart
+ desktop files. Fixes bug #481860 (Stephane Loeuillet).
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.15.
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/Makefile.am: Add tp-stream-engine.xml to EXTRA_DIST.
+ * po/POTFILES.in: Add empathy-call-window.glade.
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac:
+ * NEWS: Update before release.
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-private-chat.c: Fix refcounting of
+ priv->factory. Fixes bug #473116.
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-chat-window.c: Adding sanity checks to public
+ functions.
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-accounts-dialog.c:
+ * libempathy/empathy-utils.c: Add some sanity checks. Fixes bug #463051.
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-chat.c: Disconnect all signals in finalize.
+ Fixes bug #462815.
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-chatrooms-window.c: Disconnect signals on
+ chatroom manager. Fixes bug #456619.
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-list-store.c: Disconnect signals on
+ list and contacts when finalizing the store.
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * libempathy-gtk/empathy-chat-window.c: Hide VOIP stuff if empathy is
+ not compiled with --enable-voip=yes. Fixes bug #482111
+ (Sjoerd Simons, Xavier Claessens).
+
+2007-10-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * megaphone/src/megaphone-applet.c:
+ * megaphone/data/GNOME_Megaphone_Applet.schemas.in: Updated to use new
+ avatar cache.
+
+2007-09-29 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-group.c: ref group when async calls are in
+ flight to avoid destroying the object before receiving the reply.
+ * libempathy/empathy-utils.c: Unref the group to not leak it.
+
+2007-09-29 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-contact-factory.c: Refcount
+ ContactFactoryAccountData struct.
+
+2007-09-29 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-call-window.c:
+ * libempathy-gtk/empathy-call-window.h:
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * libempathy-gtk/empathy-call-window.glade:
+ * libempathy-gtk/Makefile.am:
+ * libempathy-gtk/empathy-chat-window.c:
+ * src/empathy-call-chandler.c:
+ * src/empathy-call.chandler:
+ * src/org.gnome.Empathy.Call.service.in:
+ * src/Makefile.am:
+ * libempathy/empathy-utils.c:
+ * libempathy/empathy-utils.h:
+ * libempathy/empathy-tp-call.c:
+ * libempathy/empathy-tp-call.h:
+ * libempathy/Makefile.am:
+ * libempathy/tp-stream-engine.xml:
+ * configure.ac:
+ * doc/libempathy-gtk/libempathy-gtk-docs.sgml:
+ * doc/libempathy/libempathy.types:
+ * doc/libempathy/libempathy-docs.sgml:
+ * doc/libempathy/Makefile.am:
+ * doc/libempathy/tmpl/empathy-utils.sgml: Initial Voice+Video support
+ Fixes bug #468204 (Elliot Fairweather, Xavier Claessens).
+
+2007-09-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.14.
+ * doc/*: Updated.
+
+2007-09-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * ChangeLog:
+ * configure.ac:
+ * NEWS: Updated for 0.13 release.
+
+2007-09-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac:
+ * src/empathy.c: Remove GnomeProgram, not useful anymore, drop libgnome
+ dependency. Fixes bug #442079
+
+ * libempathy/empathy-avatar.c:
+ * libempathy/empathy-avatar.h: Fix Copyright header.
+
+ * libempathy/empathy-contact-factory.c:
+ * libempathy/empathy-tp-group.c: Free return value for async DBus calls,
+ they are not owned by dbus-glib. This fix big leaks, thanks again to
+ valgrind.
+
+2007-09-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * src/Makefile.am: Correctly modify service.in files to expand bindir.
+
+2007-09-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-group.c: Look in the local_pendings list if a
+ contact is already local pending.
+ * tests/contact-manager.c: Fix white space typo.
+
+2007-09-27 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-utils.c:
+ * libempathy/empathy-contact-factory.c: Fix 2 leaks thanks to valgrind.
+
+2007-09-27 Xavier Claessens <xclaesse@gmail.com>
+
+ * tests/contact-manager.c:
+ * tests/Makefile.am: No need to init gtk, GMainLoop is enough and makes
+ easier to run valgrind.
+
+2007-09-27 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-avatar.c: Fix leak when loading avatar from cache.
+ * libempathy/empathy-contact-factory.c: Do not request avatar for
+ unknown tokens, wait for AvatarUpdate signal.
+
+2007-09-27 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-profile-chooser.c: Set the sort function before
+ begin to sort otherwise we get warnings.
+
+2007-09-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-utils.c:
+ * libempathy/empathy-utils.h:
+ * libempathy/empathy-avatar.c:
+ * libempathy/empathy-avatar.h:
+ * libempathy/empathy-contact-factory.c: Cache avatars and RequestAvatars
+ only when needed.
+
+2007-09-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-contact-factory.c: Fix capabilities update, the NOT
+ operator is ~ and not !
+
+2007-09-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-profile-chooser.c:
+ * libempathy-gtk/empathy-main-window.c: Fix warning when sort criterium
+ is NULL and when there is no profile. Fixes bug #479786
+ (Christian Persch, Xavier Claessens).
+
+2007-09-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-log-manager.c: Ignore log files that don't have a
+ good filename. Fixes bug #462046 (Michael Scherer).
+ * configure.ac: Bump GLIB version to 2.14.0.
+
+2007-09-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * doc/libempathy-gtk/Makefile.am: Explicitely use libempathy from
+ builddir. Fixes bug #478558 (Frederic Peters).
+
+2007-09-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-chat.c: Move TP_CHANNEL_CHAT_STATE_PAUSED to
+ the not typing case. Fixes bug #474603 (Cosimo Cecchi).
+
+2007-09-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.c: Tooltip for subscription request
+ shouldn't display "Message:" if the message is empty. Fixes bug #459538
+ (Cosimo Cecchi).
+ Do not update tooltip each time the icon change.
+
+2007-09-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-chat-window.c: Do not set "new message" in
+ the title of conversation windows, it's useless. Fixes bug #459523.
+
+2007-09-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-contact-list.c: Fix warnings when finalizing.
+
+ * tests/contact-manager.c:
+ * tests/Makefile.am:
+ * configure.ac:
+ * Makefile.am: Add a test program to track leaks.
+
+2007-09-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-list-view.c: Fix ref count error for
+ account objects.
+
+ * libempathy/empathy-contact-manager.c: Disconnect signals from
+ MissionControl object when finalising the contact manager.
+
+ * configure.ac:
+ * megaphone/src/megaphone-applet.c:
+ * megaphone/src/Makefile.am:
+ * megaphone/src/megaphone-applet.h:
+ * megaphone/data/GNOME_Megaphone_Applet.schemas.in:
+ * megaphone/data/Makefile.am:
+ * megaphone/data/GNOME_Megaphone_Applet.server.in.in:
+ * megaphone/data/GNOME_Megaphone_Applet.xml:
+ * megaphone/Makefile.am:
+ * nothere/src/nothere-applet.c:
+ * nothere/src/Makefile.am:
+ * nothere/src/nothere-applet.h:
+ * nothere/data/Makefile.am:
+ * nothere/data/GNOME_NotHere_Applet.server.in.in:
+ * nothere/data/GNOME_NotHere_Applet.xml:
+ * nothere/Makefile.am:
+ * Makefile.am:
+ * po/POTFILES.in:
+ * po/POTFILES.skip: Add Megaphone and Nothere applets. Fixes bug
+ #464954 (Raphael Slinckx, Xavier Claessens).
+
+2007-09-20 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy/empathy-idle.c:
+ * libempathy/empathy-idle.h:
+ * doc/libempathy/tmpl/empathy-idle.sgml: Add 2 properties to EmpathyIdle
+ to activate auto-away and auto-disconnect, default to off. Only empathy
+ main client will turn them on, like that if other processes are
+ running with an EmpathyIdle instance they won't change presence in the
+ same time than Empathy client.
+
+2007-09-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-smiley-manager.c: Fix a leak.
+
+2007-09-11 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/empathy-group-chat.c:
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * libempathy-gtk/empathy-contact-list-view.h:
+ * doc/libempathy-gtk/tmpl/empathy-contact-list-view.sgml: "interactive"
+ property on EmpathyContactListView to enable/disable context menu and
+ action when double-click on a contact.
+
+2007-09-10 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-contact-factory.c: Fix debug message.
+
+ * libempathy/Makefile.am:
+ * configure.ac: Remove useless code.
+
+2007-09-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * libempathy-gtk/empathy-chat-window.c: Request media channel when
+ clicking on call icon.
+
+2007-09-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-images.h:
+ * libempathy-gtk/empathy-chat.glade:
+ * libempathy-gtk/empathy-cell-renderer-activatable.c:
+ * libempathy-gtk/empathy-cell-renderer-activatable.h:
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * libempathy-gtk/empathy-contact-list-store.c:
+ * libempathy-gtk/empathy-contact-list-store.h:
+ * libempathy-gtk/Makefile.am:
+ * libempathy-gtk/empathy-chat-window.c:
+ * libempathy/empathy-contact.c:
+ * libempathy/empathy-contact.h: Adding UI to start a VoIP call. It does
+ nothing yet. Most of the code is ported from Gossip patch
+ (Raphael Slinckx, Xavier Claessens).
+
+2007-09-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-contact.c:
+ * libempathy/empathy-contact.h:
+ * libempathy/empathy-contact-factory.c: Adding capabilities contact
+ property.
+
+2007-09-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * libempathy-gtk/empathy-contact-list-store.c: Make use of the search
+ function to correctly find when typing in the contact list view.
+ Fixes bug #472309 (Will Thompson, Xavier Claessens).
+
+2007-09-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-log-window.c: Fix crash if there is no date
+ for a conversation. Fixes bug #473510.
+
+2007-09-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * python/pyempathygtk/pyempathygtk.override:
+ * python/pyempathygtk/pyempathygtk.defs: Updated for new API.
+
+2007-09-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump libtelepathy depend to 0.0.57.
+
+2007-09-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-chat-view.h:
+ * libempathy-gtk/empathy-ui-utils.c:
+ * libempathy-gtk/empathy-ui-utils.h:
+ * libempathy-gtk/empathy-chat.c:
+ * libempathy-gtk/empathy-smiley-manager.c:
+ * libempathy-gtk/empathy-smiley-manager.h:
+ * libempathy-gtk/Makefile.am:
+ * libempathy-gtk/empathy-chat-window.c:
+ * libempathy-gtk/empathy-chat-view.c: More dynamic smiley managment and
+ more efficient algorithm to detect smileys in messages.
+ Fixes bug #474167.
+
+ * doc/: Updated
+
+2007-08-31 Xavier Claessens <xclaesse@gmail.com>
+
+ * doc/libempathy-gtk/Makefile.am:
+ * doc/libempathy-gtk/tmpl/empathy-preferences.sgml:
+ * doc/libempathy-gtk/tmpl/empathy-images.sgml:
+ * doc/libempathy/libempathy.types:
+ * doc/libempathy/libempathy-docs.sgml:
+ * doc/libempathy/Makefile.am:
+ * doc/libempathy/tmpl/empathy-tp-group.sgml:
+ * doc/libempathy/tmpl/empathy-avatar.sgml:
+ * doc/libempathy/tmpl/empathy-contact.sgml:
+ * doc/libempathy/tmpl/empathy-contact-list.sgml: Updated.
+
+2007-08-30 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-contact-factory.c: Don't use deprecated
+ RequestAvatar method.
+
+2007-08-30 Xavier Claessens <xclaesse@gmail.com>
+
+ * python/pyempathy/pyempathy.defs:
+ * python/pyempathy/pyempathy.override:
+ * python/pyempathygtk/pyempathygtk.defs: Updated for new API.
+ * python/README: Explain how to update python binding.
+
+ * libempathy-gtk/empathy-images.h:
+ * libempathy-gtk/empathy-private-chat.c:
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy-gtk/empathy-group-chat.c:
+ * libempathy-gtk/empathy-ui-utils.c:
+ * libempathy-gtk/empathy-contact-dialogs.c:
+ * libempathy-gtk/empathy-contact-list-view.c:
+ * libempathy-gtk/empathy-contact-list-view.h:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-contact-list-store.c:
+ * libempathy-gtk/empathy-contact-list-store.h:
+ * libempathy-gtk/empathy-chat-window.c: Updated to use new libempathy
+ API.
+
+ * libempathy/empathy-log-manager.c:
+ * libempathy/empathy-contact.c:
+ * libempathy/empathy-contact.h:
+ * libempathy/empathy-tp-chat.c:
+ * libempathy/empathy-contact-manager.c:
+ * libempathy/empathy-contact-manager.h:
+ * libempathy/empathy-avatar.c:
+ * libempathy/empathy-avatar.h:
+ * libempathy/empathy-tp-contact-list.c:
+ * libempathy/empathy-tp-contact-list.h:
+ * libempathy/empathy-tp-chatroom.c:
+ * libempathy/empathy-contact-factory.c:
+ * libempathy/empathy-contact-factory.h:
+ * libempathy/empathy-contact-list.c:
+ * libempathy/empathy-contact-list.h:
+ * libempathy/empathy-tp-group.c:
+ * libempathy/empathy-marshal.list:
+ * libempathy/empathy-tp-group.h:
+ * libempathy/Makefile.am:
+ * configure.ac: Completely reworked ContactList API. Fixes bugs
+ #471611,
+ #467280,
+ #459540,
+ #462907.
+
+ * doc/*: Updated.
+
+2007-08-24 Xavier Claessens <xclaesse@gmail.com>
+
+ * python/pyempathy/Makefile.am:
+ * python/pyempathygtk/Makefile.am:
+ * configure.ac: Make use of AM_PATH_PYTHON to get python variables.
+ Fixes bug #470642 (Daniel Gryniewicz).
+
+2007-08-24 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.13.
+ * NEWS: Last NEWS entry is for version 0.12 and not 0.11.
+
+2007-08-24 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac:
+ * doc/libempathy-gtk/tmpl/empathy-preferences.sgml:
+ * NEWS:
+ * po/POTFILES.in: Updated.
+
+2007-08-24 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-new-chatroom-dialog.c:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-accounts-dialog.c:
+ * libempathy/empathy-tp-contact-list.c:
+ * data/salut.profile: Salut's protocol name is going to change to
+ local-xmpp. Fixes bug #469638 (Sjoerd Simons)
+
+2007-08-24 Xavier Claessens <xclaesse@gmail.com>
+
+ * src/empathy.c: Check if there is already a Salut account before
+ creating a new one and add more debug messages.
+
+2007-08-24 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac:
+ * data/22x22/Makefile.am:
+ * data/22x22/empathy-proto-jabber.svg:
+ * data/22x22/empathy-proto-jabber.png:
+ * data/48x48/Makefile.am:
+ * data/32x32/Makefile.am:
+ * data/32x32/empathy-proto-jabber.svg:
+ * data/32x32/empathy-proto-jabber.png:
+ * data/24x24:
+ * data/24x24/Makefile.am:
+ * data/24x24/empathy-proto-jabber.png:
+ * data/16x16/empathy-proto-jabber.svg:
+ * data/16x16/Makefile.am:
+ * data/16x16/empathy-proto-jabber.png:
+ * data/scalable/empathy-proto-jabber.svg:
+ * data/scalable/Makefile.am:
+ * data/Makefile.am: Change jabber icon. Fixes bug #466377
+ (Björn Martensen).
+
+2007-08-23 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-salut.glade:
+ * libempathy-gtk/empathy-account-widget-salut.c:
+ * libempathy-gtk/empathy-account-widget-salut.h:
+ * libempathy-gtk/empathy-preferences.h:
+ * libempathy-gtk/empathy-accounts-dialog.c:
+ * libempathy-gtk/Makefile.am:
+ * src/empathy.c:
+ * configure.ac:
+ * data/empathy.schemas.in: Add specialised UI for salut settings.
+ Configure a Salut account first time empathy is started with
+ salut CM installed using gnome-about-me information. Fixes bug #447467
+ (Cosimo Cecchi, Xavier Claessens).
+
+2007-08-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * python/pyempathy/Makefile.am:
+ * python/pyempathy/pyempathy.override:
+ * python/pyempathygtk/Makefile.am: Fix build system, make distcheck now
+ works.
+
+2007-08-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * python/pyempathy/pyempathy.defs:
+ * python/pyempathy/pyempathymodule.c:
+ * python/pyempathy/Makefile.am:
+ * python/pyempathy/pyempathy.override:
+ * python/pyempathygtk/pyempathygtk.override:
+ * python/pyempathygtk/pyempathygtk.defs:
+ * python/pyempathygtk/Makefile.am:
+ * python/pyempathygtk/pyempathygtkmodule.c:
+ * python/Makefile.am:
+ * libempathy/empathy-time.h:
+ * configure.ac:
+ * Makefile.am: Add python binding. Fixes bug #457660 (Michael Sheldon).
+
+2007-08-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-main-window.glade: Edit menu should be second
+ from the left. Fixes bug #467827 (Cosimo Cecchi).
+
+2007-08-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-group-chat.c: Only update the topic of it has
+ really be changed, avoid diplaying many times "Topic set to:" message.
+
+ * libempathy-gtk/empathy-chat.c: Some Jabber chatroom sends messages
+ received before we joined the room, this avoid displaying those messages
+ if we already logged them last time we joined that room. Previous
+ workaround prevented Empathy to log offline messages.
+
+2007-08-12 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.12.
+
+2007-08-12 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Update libtool version.
+
+ * doc/libempathy-gtk/tmpl/empathy-images.sgml:
+ * doc/libempathy-gtk/tmpl/empathy-status-presets.sgml:
+ * NEWS: Updated.
+
+2007-08-12 Xavier Claessens <xclaesse@gmail.com>
+
+ * data/irc.profile: Removed spaces in the SupportedPresences key to
+ workaround a MC warning SF bug 1772539.
+
+2007-08-11 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-accounts-dialog.c: Make "Add account" button
+ insensitive when we are creating one. Fixes bug #459170
+ (Jaap A. Haitsma).
+
+2007-08-11 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-contact-list.c: s/Local Network/People nearby/
+ (Sjoerd Simons)
+
+2007-08-10 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-accounts-dialog.c: Unselect accounts when
+ clicking on "add" button. Fixes bug #459173 (Cosimo Cecchi).
+
+2007-08-10 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-presence-chooser.glade: add some spacing in
+ "Custom message" dialog. Fixes bug #465360 (Frederic Peters).
+
+2007-08-10 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-images.h:
+ * libempathy-gtk/empathy-presence-chooser.c:
+ * libempathy-gtk/empathy-ui-utils.c:
+ * libempathy/empathy-presence.c: Add hidden supprot. Fixes bug #455510
+ (Cosimo Cecchi).
+
+ * data/gtalk.profile:
+ * data/jabber.profile:
+ * data/salut.profile:
+ * data/irc.profile:
+ * data/msn.profile: Updated to use SupportedPresences field.
+
+2007-08-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-presence-chooser.glade:
+ * libempathy-gtk/empathy-presence-chooser.c:
+ * libempathy-gtk/empathy-status-presets.c:
+ * libempathy-gtk/empathy-status-presets.h:
+ * libempathy-gtk/empathy-ui-utils.c: Remove per-state
+ "Custom message..." item and add one on the bottom of the menu. Add
+ a combobox on the custom message dialog to select the state and change
+ the action of the checkbox, now it add/remove the message from saved
+ messages. Make easier to add other states to the list if needed.
+ Fixes bug #460678.
+
+2007-08-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-presence.c:
+ * libempathy/empathy-idle.c:
+ * configure.ac: Remove workaround for mc-enum-types.h not being
+ installed by MC and bump MC minimal version to 4.33.
+
+2007-08-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-preferences.c:
+ * libempathy-gtk/empathy-preferences.glade: Useless spell checker
+ option. Fixes bug #459164 (Cosimo Cecchi).
+
+2007-08-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * autogen.sh: Requier automake 1.9. Fixes bug #464822 (Cosimo Cecchi).
+
+2007-08-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * MAINTAINERS: Updated the MAINTAINERS file to match new syntax.
+
+2007-08-07 Marco Barisione <marco@barisione.org>
+
+ * libempathy/Makefile.am:
+ * libempathy/empathy-marshal-main.c: Remove empathy-marshal-main.c and
+ include empathy-marshal.h from empathy-marshal.c.
+
+ * libempathy/Makefile.am:
+ * libempathy-gtk/Makefile.am: Generate files for enum types with
+ glib-mkenums.
+
+ * libempathy/empathy-contact.c:
+ * libempathy/empathy-idle.c:
+ * libempathy/empathy-message.c:
+ * libempathy/empathy-presence.c:
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/empathy-preferences.c:
+ * doc/libempathy-gtk/libempathy-gtk.types:
+ * doc/libempathy-gtk/tmpl/empathy-contact-list-store.sgml: Use
+ g_param_spec_enum() and g_param_spec_flags() instead of
+ g_param_spec_(u)int.
+ Fixes bug #462465.
+
+ * libempathy-gtk/empathy-contact-list-store.c:
+ * libempathy-gtk/empathy-contact-list-store.h: Remove
+ empathy_contact_list_store_sort_get_type() as it's now auto-generated
+ by glib-mkenums.
+
+2007-08-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-main-window.glade: Change main window's title
+ to "Contact list".
+
+2007-08-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-chat.c: Don't forget to reverse the glist of
+ pending messages.
+
+ * libempathy/empathy-tp-roomlist.c: Fix wrong room list names when
+ listing them.
+
+2007-08-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-msn.glade:
+ * libempathy-gtk/empathy-account-widget-msn.c: Add an Advanced section
+ and remove size_group.
+ Fixes bug #463759 (Jaap A. Haitsma, Xavier Claessens).
+
+ * README: Use ./autogen.sh instead of gnome-autogen.sh.
+
+2007-08-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-accounts-dialog.glade:
+ * libempathy-gtk/empathy-accounts-dialog.c: Click on the treeview to
+ edit the name of an account. Fixes bug #459166.
+
+2007-08-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-jabber.c: Do not try to guess
+ the Jabber server from the jid, gabble does that for us.
+
+2007-08-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * doc/libempathy-gtk/tmpl/empathy-account-chooser.sgml:
+ * doc/libempathy-gtk/tmpl/empathy-ui-utils.sgml:
+ * doc/libempathy-gtk/tmpl/empathy-contact-widget.sgml:
+ * doc/libempathy/tmpl/empathy-message.sgml:
+ * doc/libempathy/tmpl/empathy-utils.sgml: Update doc.
+
+2007-08-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-profile-chooser.c: Do not list profiles that
+ don't have the corresponding CM installed when creating a new account.
+ This is a workaround for MC bug: SF #1688779.
+
+2007-08-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-generic.c: Remove size_group.
+ Fixes bug #462792.
+
+2007-08-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-accounts-dialog.c:
+ * libempathy/empathy-utils.c:
+ * libempathy/empathy-utils.h: Adding new empathy_strdiff API stolen from
+ telepathy-glib. It check if strings are != NULL before using strcmp.
+ Using that API to fix bug #461886. Should be used in more places.
+
+2007-08-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.c: Click on the tray icon shows the
+ window if it's not active and hide if it is. Fixes bug #462057
+ (Olivier Valentin).
+
+2007-08-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-group-chat.c: don't display
+ "Topic set to: (null)". Fixes bug #460205 (Michael Scherer).
+
+2007-07-30 Xavier Claessens <xclaesse@gmail.com>
+
+ * autogen.sh: Added back, it calls gnome-autogen.sh.
+
+2007-07-29 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-profile-chooser.c:
+ * libempathy/empathy-message.c: Add missing include string.h.
+
+2007-07-29 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.11.
+
+2007-07-29 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-generic.c:
+ * libempathy-gtk/empathy-account-widget-generic.h: Align param names
+ on the left.
+
+ * libempathy-gtk/empathy-accounts-dialog.glade:
+ * libempathy-gtk/empathy-accounts-dialog.c: Simpler header to describe
+ the selected account. Fixes bug #459169.
+
+ * configure.ac: Set Collabora Ltd. in the Copyright.
+
+2007-07-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-profile-chooser.c: Makes easier to change to
+ profile order.
+
+2007-07-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-jabber.c: Try to guess the
+ server from the jid only if we are using the jabber profile. When we
+ guessed a server don't forget to set the "server" McAccount param,
+ setting the entry's text is not enough.
+
+2007-07-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-profile-chooser.c: Improve the sort function
+ a bit to have Jabber before GTalk.
+
+2007-07-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-accounts-dialog.glade:
+ * libempathy-gtk/empathy-accounts-dialog.c: Update the Enable/Disable
+ button even if there is no account selected. Set it insensitive if no
+ account is selected. Fixes bug #459012.
+
+2007-07-27 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-profile-chooser.c: Sort profiles to have
+ free protocols first. Fixes bug #460605.
+
+2007-07-27 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-message.c:
+ * libempathy/empathy-message.h:
+ * libempathy/empathy-log-manager.c: Add message type in log files.
+ Fixes bug #459579.
+
+ * doc/*: Updated.
+
+2007-07-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * po/POTFILES.in: Add missing file
+ libempathy-gtk/empathy-account-widget-msn.glade.
+
+2007-07-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-jabber.glade:
+ * libempathy-gtk/empathy-account-widget-jabber.c: Hide
+ "advanced options" for jabber in a GtkExpander. Fixes bug #459168
+ (Guillaume Desmottes).
+
+2007-07-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-new-chatroom-dialog.c:
+ * libempathy/empathy-tp-roomlist.c: Fix Room listing. Fixes bug #460416
+ (Sjoerd Simons).
+
+2007-07-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/Makefile.am:
+ * libempathy/Makefile.am:
+ * configure.ac: Use libtool -version-info. Fixes bug #460579
+ (Laurent Bigonville).
+
+2007-07-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * README:
+ * autogen.sh: Remove the autogen.sh script and use gnome-autogen.sh
+ instead. Fixes bug #460590.
+
+2007-07-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-chooser.c:
+ * libempathy-gtk/empathy-new-chatroom-dialog.c:
+ * libempathy-gtk/empathy-account-chooser.h:
+ * libempathy-gtk/empathy-contact-dialogs.c:
+ * libempathy-gtk/empathy-chatrooms-window.c:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-contact-widget.h:
+ * libempathy-gtk/empathy-log-window.c:
+ * doc/*: Do not show salut accounts in the add contact dialog. Rework
+ a bit EmpathyContactWidget. Fixes bug #459100
+ (Guillaume Desmottes, Xavier Claessens).
+
+2007-07-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-accounts-dialog.c: add contact frame is not
+ hidden after cancelling. Fixes bug #458997 (Frederic Peters).
+
+2007-07-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-idle.c: Fix problems when NM is not running. Fixes
+ bug #460419.
+
+ * doc/*: Updated documentation.
+
+2007-07-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.10
+
+2007-07-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-filter.c: Adding more debug output.
+
+2007-07-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-contact-list.c: Add a check to be sure the
+ new channel is valid in the NewChannel cb. Fixes bug #451564.
+
+2007-07-20 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/Makefile.am:
+ * libempathy/empathy-tp-roomlist.h:
+ * libempathy/empathy-tp-roomlist.c:
+ * libempathy-gtk/empathy-chatrooms-window.c:
+ * libempathy-gtk/empathy-new-chatroom-dialog.c: Initial room list
+ support. It does not works yet.
+
+ * libempathy-gtk/empathy-account-widget-generic.c: Add support for all
+ types of integer and float. Fixes bug #457740 (Jamey Hicks).
+
+ * libempathy/empathy-tp-chat.c:
+ * libempathy-gtk/empathy-chat.c: If there is an error sending a message,
+ show an error message to the user.
+
+ * libempathy-gtk/empathy-accounts-dialog.c: Fix a leak, profile should
+ be unrefed after mc_account_get_profile.
+
+ * libempathy/empathy-utils.c:
+ * libempathy/empathy-utils.h:
+ * libempathy/empathy-tp-chatroom.c:
+ * libempathy/empathy-tp-group.h:
+ * libempathy/empathy-tp-group.c:
+ * src/empathy.c: Rename empathy_get_channel_id() to
+ empathy_inspect_channel(). We now have empathy_inspect_handle().
+
+ * po/POTFILES.in:
+ * libempathy/empathy-tp-contact-list.c: Set all contacts from salut
+ protocol to the "Local Network" group.
+
+ * libempathy/empathy-idle.c: Fix NetworkManager support.
+
+ * libempathy/empathy-chatroom.h: Fix indentation.
+
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy-gtk/empathy-ui-utils.c:
+ * libempathy-gtk/empathy-ui-utils.h:
+ - Iconify main window to the status icon like in rhythmbox.
+ Fixes bug #458106 (Jaap A. Haitsma).
+ - Rounded avatars. Fixes bug #457992 (Raphael Slinckx)
+
+ * Makefile.am: Fix distcheck for gtkdoc (Vincent Untz)
+
+ * data/empathy.desktop.in.in: Change application description
+ (Jaap A. Haitsma).
+
+2007-07-14 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-list-store.c: Show avatars by default.
+
+2007-07-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.c: If there is no pending msg
+ when a text channel should be filtered wait for the first message
+ instead of not dispatching the channel which may cause messages to be
+ lost.
+
+2007-07-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-contact-list.c: Fix avatar request queue.
+
+2007-07-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-new-chatroom-dialog.c:
+ * libempathy-gtk/empathy-new-chatroom-dialog.glade: Remove unused
+ nickname entry and use a GtkTable for room information. More work is
+ needed here.
+
+ * libempathy-gtk/empathy-contact-widget.glade: Change padding to 6.
+
+ * libempathy-gtk/empathy-contact-dialogs.c: Set a window title.
+
+ * libempathy-gtk/empathy-contact-widget.c: Fix alignment of widgets.
+
+ * libempathy/empathy-tp-contact-list.c: Add more debug msg for avatar
+ handling.
+
+2007-07-12 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/Makefile.am: Fix missing header for
+ EmpathyAccountWidgetMSN.
+
+ * configure.ac: Fix useless "\".
+
+ * autogen.sh: run gtkdocize if needed.
+
+2007-07-12 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac:
+ * doc/*:
+ * Makefile.am: Adding initial API documentation using gtk-doc.
+
+2007-07-12 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-contact-list.c: Auto-accept to publish presence
+ to contacts that are in our subscribe list. When accepting a pending
+ contact add it to publish and subscribe list.
+
+2007-07-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * src/empathy.c:
+ * libempathy/empathy-debug.c:
+ * libempathy/empathy-debug.h: Add EMPATHY_LOGFILE env variable. Fixes
+ bug #455240 (Guillaume Desmottes).
+
+2007-07-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-msn.glade:
+ * libempathy-gtk/empathy-account-widget-msn.c:
+ * libempathy-gtk/empathy-account-widget-msn.h:
+ * libempathy-gtk/empathy-accounts-dialog.c:
+ * libempathy-gtk/Makefile.am: Add MSN setting UI. Fixes bug #443162
+ (Cosimo Cecchi).
+
+ * libempathy-gtk/empathy-chat-view.c:
+ * libempathy/empathy-log-manager.c:
+ * libempathy/empathy-log-manager.h: Add needed API to show chat logs in
+ Tracker. Fixes bug #452536.
+
+2007-07-07 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-generic.c: Workaround to fix a
+ commonly reported crash. Fixes bug #454277
+ * libempathy/empathy-tp-group.c: Add a missing check.
+
+2007-06-30 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump MC version required to 4.27.
+ * TODO: Updated.
+
+2007-06-30 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-account-widget-generic.c: Fix a leaked ref.
+
+ * src/empathy.c: If we get a chatroom we have to create an
+ EmpathyTpChatroom object.
+
+ * src/Makefile.am: Fix build system, programs links to libempathy-gtk
+ and libempathy.
+
+ * configure.ac: libempathy does not depends on libgnome-vfs.
+
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy-gtk/empathy-chat.c:
+ * libempathy/empathy-tp-chat.c:
+ * libempathy/empathy-tp-chat.h:
+ * libempathy/empathy-filter.c:
+ * libempathy/empathy-filter.h:
+ * libempathy/empathy-filter.xml:
+ * libempathy/Makefile.am: Filter incoming text channels and make
+ status icon flash when there we receive a new message. Dispatch the
+ channel only when we get a message and the user click on the icon.
+
+2007-06-22 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/libempathy-gtk.pc.in:
+ * libempathy-gtk/Makefile.am:
+ * libempathy/libempathy.pc.in:
+ * libempathy/Makefile.am:
+ * configure.ac: Install libempathy and libempathy-gtk and make their
+ API public.
+
+2007-06-22 Xavier Claessens <xclaesse@gmail.com>
+
+ * po/POTFILES.in: s/gossip/empathy/
+
+2007-06-22 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/*.[ch]:
+ * libempathy-gtk/*.[ch]:
+ * src/*.[ch]: Rename all filenames starting with "gossip" by "empathy",
+ change namespace of all gossip_*() functions to empathy_*().
+ Fixes bug #444490 (Mario Danic, Xavier Claessens).
+
+2007-06-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.9
+
+2007-06-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-contact-list.c: Fix typo causing warnings.
+
+2007-06-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-dialogs.c:
+ * libempathy-gtk/gossip-contact-list-store.c:
+ * libempathy-gtk/gossip-contact-list-view.c:
+ * libempathy/empathy-contact-manager.c:
+ * libempathy/empathy-tp-contact-list.c:
+ * libempathy/empathy-contact-list.c:
+ * libempathy/empathy-contact-list.h:
+ * libempathy/gossip-contact.c: We show in our roster all contacts
+ members and remote-pending of subscribe list. Adding/Removing a contact
+ only add/remove from subscribe list. Accept/Reject a contact in
+ local-pending of publish list is done using _process_pending().
+
+2007-06-15 Xavier Claessens <xclaesse@gmail.com>
+
+ * src/empathy.c:
+ * libempathy/empathy-idle.c: Adding NetworkManager support.
+
+2007-06-15 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy-gtk/gossip-presence-chooser.c:
+ * libempathy-gtk/gossip-presence-chooser.h:
+ * libempathy/empathy-idle.c:
+ * libempathy/empathy-idle.h: Prepare for slack time when coming back
+ from auto away. Not yet fully implemented.
+
+2007-06-14 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-images.h:
+ * libempathy-gtk/gossip-chat.c: Use gtk-info for contact informaiton.
+
+ * data/22x22/empathy-proto-salut.png:
+ * data/22x22/Makefile.am:
+ * data/16x16/empathy-proto-salut.png:
+ * data/16x16/Makefile.am:
+ * data/scalable/empathy-proto-salut.svg:
+ * data/scalable/Makefile.am:
+ * data/salut.profile: Add salut icon. Fixes bug #447659 (Michael Monreal).
+
+2007-06-14 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-contact-list-view.c: Show logs when right
+ click on a contact in the roster.
+
+2007-06-14 Xavier Claessens <xclaesse@gmail.com>
+
+ * src/org.gnome.Empathy.Chat.service.in:
+ * src/empathy-accounts.c:
+ * src/empathy-accounts-main.c:
+ * src/empathy-chat-main.c:
+ * src/empathy.c:
+ * src/Makefile.am:
+ * src/empathy-main.c:
+ * libempathy/gossip-chatroom-manager.c:
+ * autogen.sh: Empathy is no more splitted into 2 processes. It makes
+ debugging more difficult when emmpathy-chat crashes. It's also more
+ optimised like that since contact objects can be shared.
+
+2007-06-14 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-chat-window.c: Disconnect signals from
+ chatroom_manager. Fixes bug #447178.
+
+2007-06-14 Xavier Claessens <xclaesse@gmail.com>
+
+ * po/POTFILES.in:
+ * po/POTFILES.skip: Get strings in empathy.desktop.in.in and skip
+ empathy.desktop.in. Fixes bug #446161.
+
+2007-06-14 Xavier Claessens <xclaesse@gmail.com>
+
+ * po/POTFILES.in: Adding missing files.
+
+2007-06-14 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-log-window.c:
+ * libempathy-gtk/gossip-chat-window.c:
+ * libempathy/empathy-log-manager.c:
+ * libempathy/empathy-log-manager.h: Do not create log directory for a
+ chat if there is no messages to put in. Show logs and information for
+ the contact we are speaking with in the chat window menu.
+
+2007-06-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/Makefile.am:
+ * libempathy-gtk/gossip-log-window.glade:
+ * libempathy-gtk/gossip-log-window.h:
+ * libempathy-gtk/gossip-log-window.c:
+ * libempathy/empathy-log-manager.c:
+ * libempathy/empathy-log-manager.h:
+ * libempathy-gtk/gossip-chat.c:
+ * libempathy-gtk/empathy-main-window.c: New window for viewing logs.
+
+ * libempathy-gtk/gossip-chat-view.c: Do not use smooth scroll when
+ resizing the view.
+
+ * libempathy-gtk/gossip-contact-list-store.c: Do not set active
+ contacts when creating the store, and when contact groups changed.
+
+ * src/empathy-main.c: Fix warning when using command-line options.
+
+ * libempathy/empathy-tp-contact-list.c: Check if we have an aliasing
+ iface before setting the alias of a contact.
+
+ * TODO: Updated.
+
+ * data/jabber.profile: Ignore ssl errors by default. This is a security
+ vulnerability but we don't really have the choice.
+
+ * libempathy/gossip-contact.h:
+ * libempathy/gossip-contact.c: Add a "is-user" property to know if
+ it's our self contact.
+
+ * libempathy/gossip-message.h:
+ * libempathy/gossip-message.c: Add a "receiver" property like that we
+ have our self contact for nick highlight.
+
+2007-06-10 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-spell-dialog.glade:
+ * libempathy-gtk/gossip-spell-dialog.c:
+ * libempathy-gtk/gossip-spell-dialog.h:
+ * libempathy-gtk/gossip-chat.c:
+ * libempathy-gtk/Makefile.am:
+ * configure.ac: Adding spellcheck support.
+
+ * libempathy-gtk/gossip-spell.c:
+ * libempathy/gossip-conf.c: Remove useless debug messages.
+
+2007-06-10 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-chat-view.c: Smooth scrolling.
+ Fixes bug #445859 (Raphael Slinckx).
+
+2007-06-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/gossip-contact.c: Emit notify signal only if the property
+ value effectively changed.
+
+2007-06-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-contact-list-view.c: Fix warning for DnD.
+ patch imported from gossip.
+
+2007-06-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.8
+
+ * libempathy-gtk/gossip-ui-utils.c: Fix usage of contact subscription
+ property.
+
+ * data/gtalk.profile:
+ * data/jabber.profile:
+ * data/msn.profile: Add VCardField and VCardDefault to profiles for
+ eds-sync support.
+
+2007-06-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-widget.c: Fix a warning.
+
+2007-06-09 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/empathy-contact-widget.glade:
+ * libempathy-gtk/empathy-contact-dialogs.c:
+ * libempathy-gtk/empathy-contact-dialogs.h:
+ * libempathy-gtk/empathy-contact-widget.c: We can now add a new contact.
+ EmpathyContactWidget can change the contact it's displaying on-the-fly,
+ like that we can display info when typing the contact ID we want to
+ add to our contact list.
+
+ * libempathy/empathy-tp-contact-list.c: Fix a refcount bug.
+
+2007-06-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/gossip-chatroom-manager.c: Checks if the chatroom has
+ an account and a room. Fixes bug #444135.
+
+2007-06-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-dialogs.c:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-contact-widget.h: Do not save when closing the
+ dialog. Update information in real-time and just provides a "Close"
+ button. That's more GNOME spirite.
+ * libempathy/empathy-tp-contact-list.c:
+ * libempathy/gossip-contact.h:
+ * libempathy/gossip-contact.c: New methods:
+ gossip_contact_add/remove_group(). This fixes leaks when a contact is
+ added/removed from a group.
+
+2007-06-08 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-chat.c: Fix build on 64bits arch.
+ Fixes bug #444680 (Matej Cepl).
+
+2007-06-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-dialogs.glade:
+ * libempathy-gtk/empathy-contact-dialogs.c: Fix response and action
+ buttons.
+
+2007-06-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-dialogs.glade:
+ * libempathy-gtk/empathy-contact-widget.glade:
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy-gtk/empathy-contact-dialogs.c:
+ * libempathy-gtk/empathy-contact-dialogs.h:
+ * libempathy-gtk/gossip-ui-utils.c:
+ * libempathy-gtk/empathy-subscription-dialog.glade:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/gossip-ui-utils.h:
+ * libempathy-gtk/gossip-contact-list-view.c:
+ * libempathy-gtk/empathy-subscription-dialog.c:
+ * libempathy-gtk/Makefile.am:
+ * libempathy-gtk/empathy-subscription-dialog.h: Implement editing and
+ viewing contact information with right click on the roster.
+
+2007-06-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-contact-widget.glade:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-contact-widget.h:
+ * libempathy-gtk/empathy-subscription-dialog.c: EmpatchContactWidget
+ has 2 modes: editable or not.
+
+2007-06-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * po/POTFILES.in: Updated with new files.
+
+2007-06-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy-gtk/empathy-subscription-dialog.glade:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/gossip-contact-list-view.c:
+ * libempathy-gtk/empathy-subscription-dialog.c:
+ * libempathy-gtk/Makefile.am:
+ * libempathy-gtk/empathy-subscription-dialog.h:
+ * libempathy/empathy-tp-contact-list.c: New dialog:
+ EmpathySubscriptionDialog. It uses EmpathyContactWidget to display
+ information about the contact who wants to get your presence. This
+ dialog appears when clicking on the status icon when it blinks. You
+ can also remove contacts when right-click on it in the roster.
+
+2007-06-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy-gtk/empathy-contact-widget.glade:
+ * libempathy-gtk/empathy-contact-widget.c:
+ * libempathy-gtk/empathy-contact-widget.h:
+ * libempathy-gtk/Makefile.am: New widget: EmpathyContactWidget. It
+ displays information about a contact, it can be used in any kind of
+ dialog which needs to display contact information like alias, groups,
+ avatar, etc. If the contact is the selfcontact information are editable.
+
+ * libempathy/empathy-tp-contact-list.c: Do not take care of subscription
+ changes.
+
+ * libempathy/gossip-contact.c: Use
+ gossip_presence_state_get_default_status (MC_PRESENCE_OFFLINE)
+ when there is no presence.
+
+2007-06-06 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.c: Add support for blinking when
+ there is an event. Make use of EmpathyIdle for presence handling. Add
+ an event when a contact requets subscription.
+
+ * libempathy-gtk/gossip-contact-list-store.c:
+ * libempathy-gtk/gossip-contact-list-view.c:
+ * libempathy/empathy-contact-manager.c:
+ * libempathy/empathy-tp-contact-list.c:
+ * libempathy/empathy-tp-chatroom.c:
+ * libempathy/empathy-contact-list.c:
+ * libempathy/empathy-contact-list.h: get_contacts() is renamed to
+ get_members(). Adding a signal and a method for local-pending with
+ contacts with the message. Rework completely the contact-list handling in
+ EmpathyTpContactList to follow tp spec.
+
+ * libempathy/empathy-idle.c:
+ * libempathy/empathy-idle.h: Add properties for the state and the
+ status message. EmpathyIdle is now a singleton to manager self presence.
+
+ * TODO: Updated.
+
+2007-06-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-accounts-dialog.glade: Set use_stock for
+ button_connect to False, to avoid a crasher when opening the accounts
+ window with GTK+ trunk. Fixes bug #439931.
+ * libempathy-gtk/gossip-chat.c: Do not add backlog for chatrooms and
+ do not log backlog from jabber server.
+
+2007-06-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-ui-utils.c
+ * libempathy-gtk/gossip-accounts-dialog.c
+ * libempathy-gtk/Makefile.am
+ * src/empathy-accounts-main.c
+ * src/empathy-chat-main.c
+ * src/Makefile.am
+ * src/empathy-main.c
+ * libempathy/gossip-utils.c
+ * libempathy/Makefile.am
+ * src/empathy-filter.h
+ * src/empathy-filter-plugin.c
+ * src/empathy-filter.xml
+ * src/empathy-filter.c
+ * libempathy/gossip-paths.c
+ * libempathy/gossip-paths.h: Remove unused code and append DATADIR to
+ dirs where GTK should search icons.
+
+2007-06-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * po/POTFILES.in:
+ * po/POTFILES.skip: Add missing files that have strings for translation.
+ Skip empathy-desktop.in.in. (Olivier Crete)
+
+2007-06-03 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-group-chat.c:
+ * libempathy-gtk/gossip-private-chat.c:
+ * libempathy-gtk/gossip-chat.c:
+ * libempathy-gtk/gossip-chat.h:
+ * libempathy/empathy-tp-chat.c: Add all properties described by TP spec
+ for the Text channel on EmpathyTpChat. Make use of "name" and "subject"
+ properties in GossipGroupChat.
+
+2007-06-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-log-manager.c: Fix crash when there is no log
+ available for a chat.
+ * libempathy/empathy-tp-contact-list.c: Fix a crash when destroy signal
+ is emitted before StatusChanged.
+
+2007-06-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-group-chat.c:
+ * libempathy-gtk/gossip-private-chat.c:
+ * libempathy-gtk/gossip-chat.c:
+ * libempathy/empathy-log-manager.c:
+ * libempathy/empathy-log-manager.h:
+ * libempathy/empathy-log-manager.xsl:
+ * libempathy/Makefile.am: Log chats and display 10 last messages when
+ opening a new chat.
+
+2007-06-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-group-chat.c:
+ * libempathy/empathy-tp-contact-list.c:
+ * libempathy/gossip-contact.c: Set default presence to available if
+ there is no presence iface.
+
+2007-06-02 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-ui-utils.c:
+ * libempathy-gtk/gossip-ui-utils.h:
+ * configure.ac: Use gnome_vfs_url_show() instead of gnome_url_show()
+ to avoid libgnomeui dependency (Ross Burton).
+
+2007-06-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-chatrooms-window.c:
+ * libempathy-gtk/gossip-chat-window.c:
+ * libempathy/gossip-chatroom.c:
+ * libempathy/gossip-chatroom-manager.c:
+ * configure.ac: Monitor changes on chatrooms.xml file and relead it
+ when it's modified. connect chatroom-added/removed in some places where
+ needed.
+
+2007-06-01 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.7
+
+2007-05-31 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-new-chatroom-dialog.c: No need to RequestHandle,
+ MissionControl has API to request the channel from handle string.
+
+ * libempathy-gtk/empathy-main-window.c: Request room channel when
+ clicking on favorite rooms.
+
+ * TODO: Add a task: supporting registering.
+
+2007-05-31 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-idle.c: Do not restore away presence message when
+ coming back after the user set manually to away.
+
+2007-05-31 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-account-chooser.c: Fix warning when selecting
+ all accounts.
+
+ * src/empathy-accounts-main.c:
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy-gtk/gossip-accounts-dialog.h:
+ * libempathy-gtk/gossip-accounts-dialog.c:
+ * libempathy-gtk/gossip-preferences.h:
+ * libempathy-gtk/gossip-preferences.c: Set parent window.
+
+ * libempathy-gtk/empathy-main-window.c: Implement favorite chatroom
+ menu and fix a leak.
+
+ * libempathy-gtk/Makefile.am:
+ * libempathy/Makefile.am:
+ * libempathy/gossip-chatroom.c:
+ * libempathy/gossip-chatroom.h:
+ * libempathy/gossip-chatroom-manager.c:
+ * libempathy/gossip-chatroom-manager.h:
+ * libempathy/gossip-chatroom-manager.dtd:
+ * libempathy-gtk/gossip-chatrooms-window.glade:
+ * libempathy-gtk/gossip-chatrooms-window.c:
+ * libempathy-gtk/gossip-chatrooms-window.h: New files to implement
+ favorite chatrooms and a window to show them.
+
+
+ * libempathy-gtk/gossip-chat.c: Fix tooltip leaked.
+
+ * libempathy-gtk/gossip-chat-window.h:
+ * libempathy-gtk/gossip-chat-window.c: Do not use deprecated
+ gtk_object_sink(). Implement favorite chatroom features. Find a chat
+ by comparing the account AND the chat ID.
+
+ * src/empathy-chat-main.c:
+ * libempathy/empathy-tp-chat.h:
+ * libempathy/empathy-tp-chat.c:
+ * libempathy/gossip-utils.h:
+ * libempathy/gossip-utils.c: empathy_tp_chat_get_id() returns the Text
+ channel's name. The chat ID is unique only for a specified account.
+
+ * libempathy/empathy-tp-contact-list.c: Fix some leaks and add a FIXME
+ comment for a leak not yet fixed.
+
+ * TODO: Would be cool to have a glade catalog for libempathy-gtk.
+
+2007-05-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-contact-list-store.c: Do not highlight contacts
+ already known when creating the contact list.
+ * libempathy/empathy-tp-contact-list.c: Do not set alias if DBus
+ returns an error. Fixes bug #442639.
+ * libempathy/empathy-idle.c: Do not set status message to
+ "Extended autoaway", let user's message unchanged.
+
+2007-05-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.6
+
+2007-05-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-group-chat.c: Fix refcounting of
+ GossipGroupChat.
+ * libempathy/empathy-tp-contact-list.c: Add debug message when alias
+ request fails.
+ * data/22x22/empathy-group-message.png:
+ * data/22x22/Makefile.am: Add group message icon.
+2007-05-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-new-chatroom-dialog.c: Do not use the server
+ entry's value if it's hidden.
+ * libempathy-gtk/gossip-contact-list-view.c: Do not highlight groups
+ when adding them in the roster.
+ * libempathy/empathy-tp-contact-list.c: Do not create new GossipContact
+ object in presence/avatar/alias changed signal if we don't already know
+ that contact from a contact list channel. This should fix DBus max
+ pending calls limit reached in some cases.
+
+2007-05-25 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-new-chatroom-dialog.c: Preset the server only
+ for jabber protocol to conference.server. This fixes a warning.
+
+ * libempathy-gtk/gossip-group-chat.h:
+ * libempathy-gtk/gossip-group-chat.c: gossip_group_chat_set_topic() is
+ a public function.
+
+ * libempathy-gtk/empathy-images.h:
+ * libempathy-gtk/empathy-main-window.glade:
+ * libempathy-gtk/empathy-status-icon.glade: Make use of
+ empathy-new-message icon name.
+
+ * libempathy-gtk/gossip-contact-list-store.c: By default we sort by
+ contacts names.
+
+ * libempathy-gtk/gossip-chat.c: Do not display composing state if
+ it's our own contact that is composing.
+
+ * src/empathy-chat-main.c:
+ * libempathy/empathy-tp-chat.c:
+ * libempathy/empathy-tp-chat.h: Make possible to build the id based on
+ the account and the channel's name. For private chats that means the
+ contact's id.
+
+ * libempathy-gtk/gossip-chat-window.c: Un-comment the code related to
+ chatrooms that is now implemented. We can now Show/Hide contact list
+ for group chats, DnD contact on the window to begin a discussion, join
+ a new chatroom.
+
+ * libempathy-gtk/gossip-account-chooser.c: Add a FIXME message.
+
+ * data/22x22/empathy-new-message.png:
+ * data/22x22/empathy-proto-irc.png:
+ * data/22x22/Makefile.am:
+ * data/32x32/empathy-proto-irc.png:
+ * data/32x32/Makefile.am:
+ * data/gtalk.profile:
+ * data/16x16/empathy-new-message:
+ * data/16x16/empathy-message-new.png:
+ * data/16x16/empathy-proto-irc.png:
+ * data/16x16/Makefile.am:
+ * data/scalable/empathy-proto-irc.svg:
+ * data/scalable/Makefile.am:
+ * data/irc.profile: Adding icons for empathy-new-message and IRC
+ protocol. Make use of the irc icon in the irc profile.
+
+2007-05-24 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-new-chatroom-dialog.c:
+ * libempathy-gtk/empathy-main-window.c: White space fix.
+
+2007-05-24 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-account-chooser.c:
+ * libempathy-gtk/gossip-new-chatroom-dialog.c:
+ * libempathy-gtk/gossip-account-widget-jabber.c:
+ * libempathy-gtk/gossip-account-chooser.h:
+ * libempathy-gtk/gossip-new-chatroom-dialog.h:
+ * libempathy-gtk/gossip-group-chat.c:
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/gossip-new-chatroom-dialog.glade:
+ * libempathy-gtk/gossip-account-widget-jabber.glade:
+ * libempathy-gtk/Makefile.am:
+ * libempathy/empathy-tp-chatroom.c:
+ * data/gtalk.profile:
+ * data/jabber.profile:
+ * data/salut.profile:
+ * data/Makefile.am:
+ * data/empathy.desktop.in.in:
+ * data/msn.profile:
+ * data/irc.profile: New objects: GossipAccountChooser and
+ GossipNewChatroom, we can now join any chatroom. Adding IRC profile.
+
+2007-05-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-idle.c: If we are offline do not set away on idle.
+ If we are already away restore to available when we are no mode idle.
+ Do no modify status message.
+
+2007-05-21 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-group-chat.c:
+ * libempathy-gtk/gossip-group-chat.h:
+ * libempathy-gtk/gossip-private-chat.c:
+ * libempathy-gtk/gossip-private-chat.h:
+ * libempathy-gtk/gossip-group-chat.glade:
+ * libempathy-gtk/Makefile.am:
+ * src/empathy-chat-main.c:
+ * libempathy/empathy-tp-contact-list.c:
+ * libempathy/gossip-telepathy-group.c:
+ * libempathy/gossip-telepathy-group.h:
+ * libempathy/empathy-tp-chatroom.c:
+ * libempathy/empathy-tp-chatroom.h: Implementing basic chatroom support.
+ Actually it works only if we get invited in a chatroom.
+
+2007-05-20 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-chat-view.c: Correctly remember the contact
+ who sent last message.
+
+2007-05-20 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-chat-view.c: Correctly remember if last message
+ comes from the self contact or another.
+
+2007-05-20 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-contact-list-model.c:
+ * libempathy-gtk/gossip-contact-list-model.h: Removed.
+ * libempathy-gtk/gossip-contact-list-view.c:
+ * libempathy-gtk/gossip-contact-list-view.h: Added.
+
+2007-05-20 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-contact-list-store.c: Set COL_NAME earlier like
+ that it can directly be sorted.
+ * data/empathy.schemas.in: s/gossip/empathy/
+
+2007-05-20 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Bump version to 0.5
+
+2007-05-20 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-contact-list-store.c: Allow to set custom
+ function for getting groups of a contact. Make possible to have groups
+ for presence or role/affiliation in chatroom for example.
+ * libempathy-gtk/gossip-contact-list-store.h: Allow to set custom
+ function to handle DnD of contact. Useful when a custom function is set
+ for groups.
+ * src/empathy-chat-main.c: Minor fix.
+ * TODO:
+ * po/POTFILES.in: Updated.
+
+2007-05-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/Makefile.am:
+ * libempathy/empathy-tp-chat.c:
+ * libempathy/empathy-contact-manager.c:
+ * libempathy/empathy-contact-list.c: Fix indentation
+ * libempathy/empathy-tp-contact-list.c: Fix not returning the contact
+ in tp_contact_list_find()
+ * TODO: Updated.
+
+2007-05-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-contact-list-store.c:
+ * libempathy-gtk/gossip-preferences.c:
+ * libempathy-gtk/gossip-contact-list-store.h:
+ * libempathy-gtk/gossip-contact-list.c:
+ * libempathy-gtk/gossip-contact-list.h:
+ * libempathy-gtk/empathy-main-window.c:
+ * libempathy-gtk/gossip-contact-list-model.c:
+ * libempathy-gtk/gossip-contact-list-model.h:
+ * libempathy-gtk/Makefile.am:
+ * libempathy/empathy-marshal.list: Split GossipContactList into
+ two objects: GossipContactListStore inheriting from GtkTreeStore and
+ GossipContactListView inheriting from GtkTreeView. This makes
+ easier to build new UI widgets reusing the GtkTreeModel.
+
+2007-05-19 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-idle.c: Auto away when session id idle, instead of
+ when screensaver is active.
+
+2007-05-18 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-private-chat.h:
+ * libempathy-gtk/gossip-contact-list.c:
+ * libempathy-gtk/gossip-chat.c:
+ * libempathy-gtk/gossip-chat.h:
+ * libempathy-gtk/gossip-chat-window.c:
+ * libempathy-gtk/Makefile.am:
+ * libempathy-gtk/gossip-chat-view.c:
+ * libempathy-gtk/gossip-private-chat.c:
+ * src/empathy-chat-main.c:
+ * libempathy/gossip-utils.c:
+ * libempathy/gossip-contact.h:
+ * libempathy/empathy-tp-chat.c:
+ * libempathy/gossip-utils.h:
+ * libempathy/empathy-contact-manager.c:
+ * libempathy/empathy-contact-manager.h:
+ * libempathy/empathy-tp-contact-list.c:
+ * libempathy/empathy-tp-contact-list.h:
+ * libempathy/empathy-tp-chatroom.c:
+ * libempathy/empathy-tp-chatroom.h:
+ * libempathy/empathy-contact-list.c:
+ * libempathy/empathy-contact-list.h:
+ * libempathy/Makefile.am:
+ * libempathy/gossip-contact.c: EmpathyContactList is now an interface
+ implemented by EmpathyTpContactList, EmpathyContactManager and
+ EmpathyTpChatroom. GossipContactList use that interface to display a
+ treeview.
+
+2007-05-17 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-chat.c: Display ChatState.
+
+2007-05-16 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.c:
+ * libempathy/empathy-idle.c:
+ * libempathy/empathy-idle.h:
+ * libempathy/Makefile.am:
+ * po/POTFILES.in: New object EmpathyIdle to manage autoaway and
+ extended autoaway states.
+
+2007-05-15 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac:
+ * data/empathy.desktop.in:
+ * data/Makefile.am:
+ * data/empathy.desktop.in.in:
+ * po/POTFILES.in: Set bugzilla information in desktop file and add it
+ to POTFILES.in
+
+2007-05-15 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/empathy-status-icon.glade:
+ * libempathy-gtk/empathy-main-window.glade: Fix using of gossip icons
+ in menus.
+
+2007-05-14 Xavier Claessens <xclaesse@gmail.com>
+
+ * src/empathy-chat-main.c:
+ * src/empathy-main.c:
+ * configure.ac:
+ * data/22x22/Makefile.am:
+ * data/22x22/empathy.png:
+ * data/48x48:
+ * data/48x48/Makefile.am:
+ * data/48x48/empathy.png:
+ * data/32x32/Makefile.am:
+ * data/32x32/empathy.png:
+ * data/16x16/empathy.png:
+ * data/16x16/Makefile.am:
+ * data/scalable/empathy.svg:
+ * data/scalable/Makefile.am:
+ * data/Makefile.am: Add empathy icon stolen from cohoba.
+
+2007-05-14 Xavier Claessens <xclaesse@gmail.com>
+
+ * src/empathy-chat-main.c:
+ * src/Makefile.am:
+ * src/empathy-main.c:
+ * po/POTFILES.in
+ * po/LINGUAS:
+ * TODO: Setting up i18n support.
+
+ * po/Makefile.in.in: Removed, it's generated at build time.
+
+2007-05-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-account-widget-jabber.glade: Add an example
+ label for jid.
+
+2007-05-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy-gtk/gossip-chat-window.c:
+ * libempathy-gtk/gossip-chat-window.h:
+ * src/empathy-chat-main.c:
+ * libempathy/empathy-tp-chat.c:
+ * libempathy/empathy-tp-chat.h: When a new text channel arrives, check
+ if there is no existing GossipChat object for it.
+
+2007-05-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * src/Makefile.am:
+ * src/empathy-contact-list-main.c: Removing empathy-contact-list
+ program, it's useless.
+
+2007-05-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * configure.ac: Change version from 0.3darcs to 0.3svn
+
+2007-05-13 Xavier Claessens <xclaesse@gmail.com>
+
+ * autogen.sh: Set executable
+ * po/POTFILES.in: Update translatable files
+
+2007-03-16 Xavier Claessens <xclaesse@gmail.com>
+
+ * Initial version
+
+2007-09-28 Xavier Claessens <xclaesse@gmail.com>
+
+ * libempathy/empathy-tp-group.c: Look in the local_pendings list if a
+ contact is already local pending.
+ * tests/contact-manager.c: Fix white space typo.
+
diff --git a/trunk/MAINTAINERS b/trunk/MAINTAINERS
new file mode 100644
index 000000000..7c28af00a
--- /dev/null
+++ b/trunk/MAINTAINERS
@@ -0,0 +1,4 @@
+Xavier Claessens
+E-mail: xclaesse@gmail.com
+Userid: xclaesse
+
diff --git a/trunk/Makefile.am b/trunk/Makefile.am
new file mode 100644
index 000000000..4d552e25b
--- /dev/null
+++ b/trunk/Makefile.am
@@ -0,0 +1,56 @@
+SUBDIRS = tools extensions po data libempathy libempathy-gtk src docs help
+
+if HAVE_MEGAPHONE
+SUBDIRS += megaphone
+endif
+
+if HAVE_NOTHERE
+SUBDIRS += nothere
+endif
+
+if HAVE_PYTHON
+SUBDIRS += python
+endif
+
+if HAVE_TESTS
+SUBDIRS += tests
+endif
+
+ACLOCAL_AMFLAGS = -I m4
+
+DISTCHECK_CONFIGURE_FLAGS = \
+ --disable-scrollkeeper \
+ --disable-schemas-install \
+ --enable-gtk-doc
+
+INTLTOOL = \
+ intltool-extract.in \
+ intltool-merge.in \
+ intltool-update.in
+
+EXTRA_DIST = \
+ ChangeLog \
+ ChangeLog.old \
+ README \
+ CONTRIBUTORS \
+ autogen.sh \
+ $(INTLTOOL)
+
+DISTCLEANFILES = \
+ ChangeLog \
+ intltool-extract \
+ intltool-merge \
+ intltool-update
+
+# Workaround broken scrollkeeper that doesn't remove its files on
+# uninstall.
+distuninstallcheck_listfiles = find . -type f -print | grep -v '^\./var/scrollkeeper'
+
+ChangeLog: Makefile.am
+ git-log --pretty=short > ChangeLog
+
+
+dist: ChangeLog
+
+.PHONY: ChangeLog
+
diff --git a/trunk/NEWS b/trunk/NEWS
new file mode 100644
index 000000000..c8bce1956
--- /dev/null
+++ b/trunk/NEWS
@@ -0,0 +1,428 @@
+NEW in 0.23.2
+==============
+ - Keep a priv pointer in the object struct instead of using
+ G_TYPE_INSTANCE_GET_PRIVATE all the time. (Xavier Claessens).
+ - If self presence message is "" do like if it was NULL. (Xavier Claessens).
+ - Do not request video stream until the user click on the 'send video' box. (Xavier Claessens).
+ - Implement DTMF and add a keypad on call window. (Xavier Claessens).
+ - Make use of tp-glib debug system. (Xavier Claessens).
+ - Rework call window: Use GtkVolumeButton, only one button to hang up calls,
+ let s-e add black borders to keep good video ration and add a confirmation
+ dialog to accept/reject incoming calls. (Xavier Claessens).
+ - Remove conditional build of VOIP. (Xavier Claessens).
+ - Do not apply different theme to chat and chatrooms (Xavier Claessens).
+
+Bugs fixed:
+ - Fixed #460624, Use enchant instead of aspell (Frederic Peters)
+ - Fixed #523918, Empathy sometimes loose messages (Xavier Claessens)
+ - Fixed #526926, "This call will be ended. Continue?" dialog should be rephrased (Elliot Fairweather, Xavier Claessens)
+ - Fixed #529049, Empathy should know when an apt:// link appears (Gaëtan Podevijn)
+ - Fixed #529436, Lacking string hyphenation (Baptiste Mille-Mathias)
+ - Fixed #529437, Incorrect spacing in some strings (Baptiste Mille-Mathias)
+ - Fixed #529439, Incorrect capitalisation in some strings (Baptiste Mille-Mathias)
+ - Fixed #529552, Please incorporate the man pages written for Debian (Simon McVittie)
+ - Fixed #529651, 0.23.1: Compilation (Linking) Failure (Xavier Claessens)
+ - Fixed #530090, Stock ids marked for translation (Gabor Kelemen)
+
+Translations:
+ - Updated Galician Translation and POTFILES.in (icq).
+ - Updated cs translation (Lucas Lommer).
+ - Updated Norwegian bokmål translation. (kmaraas).
+ - updated he translation (yairhr).
+ - Updated Slovenian translation (mateju).
+ - Updated es translation (Jorge Gonzalez).
+ - Updated Slovenian translation (mateju).
+ - Updated hu translation (kelemeng).
+ - Updated sv translation (Daniel Nylander).
+ - Updated en_GB translation (Philip Withnall).
+
+NEW in 0.23.1
+==============
+ - Show contact list when a chat becomes a chatroom. (Xavier Claessens).
+ - Dispatch each Tube to the application handling its service. (Elliot Fairweather, Xavier Claessens).
+ - Added introduction and started the Getting Started section of help manual (Milo Casagrande).
+ - Add build system for help manual (Xavier Claessens).
+ - Some code cleanup (Xavier Claessens).
+ - Already open channels are considered OUTGOING. (Xavier Claessens).
+ - Drop Chandler and Filter, do not use MC for dispatching channels, do it ourself. Everything is now in the same process. (Xavier Claessens).
+ - Remove libtelepathy dep and use telepathy-glib instead. (Xavier Claessens).
+ - Remove Room menu, chatrooms will be handled in a dedicated program. (Xavier Claessens).
+ - Unify EmpathyPrivateChat and EmpathyGroupChat. (Xavier Claessens).
+ - Unify EmpathyTpChatroom and EmpathyTpChat. (Xavier Claessens).
+ - Do not autoconnect if networkmanager says we are not connected at startup. (Xavier Claessens).
+ - Move modules that make no sense to be used in other applicaton from libempathy-gtk/ to src/ (Xavier Claessens).
+ - Convert all files to glade3 (Laurent Bigonville).
+
+Bugs fixed:
+ - Fixed #526145, crash in Empathy Instant Messenger: Tryint to persuade Zdra,... (Xavier Claessens)
+ - Fixed #475789, Compact mode + avatars = bad padding (Marco Barisione)
+ - Fixed #479697, no sounds (Frederic Peters)
+ - Fixed #489978, Removing NotHere applet from panel (Frederic Peters)
+ - Fixed #496309, empathy translation issues (Andre Klapper)
+ - Fixed #513676, Need a widget to configure AIM accounts (Andreas Henriksson)
+ - Fixed #513679, Need a widget to configure SIP accounts (Baptiste Mille-Mathias)
+ - Fixed #514380, Drop gnome-vfs dependency (Cosimo Cecchi)
+ - Fixed #517776, Groupwise profile (Vincent Untz)
+ - Fixed #519946, Confirmation dialog on remove contact/group (Bruno Dusausoy)
+ - Fixed #521554, Diplay all the favourite rooms in the favourite room dialog (Marco Barisione)
+ - Fixed #521570, Set to unsensitive the 'show avatars' option when using compact mode (Marco Barisione)
+ - Fixed #522297, libempathy-gtk Python binding: cannot create a ContactListStore (Juan Pizarro)
+ - Fixed #522528, Missing files in POTFILES.in (nshmyrev)
+ - Fixed #522780, Couldn't build latest Empathy trunk (rev. 807) (Xavier Claessens)
+ - Fixed #522862, Need a GUI to configure groupwise account (Vincent Untz)
+ - Fixed #523703, Deprecated glib symbols used. (Frederic Peters)
+ - Fixed #525039, Should not be started automatically via /etc/xdg/autostart (Frederic Peters)
+ - Fixed #525084, Crash at GNOME startup (Xavier Claessens)
+ - Fixed #525562, Empathy should not require python-config (Frederic Peters)
+ - Fixed #526374, Crash in EmpathyContactListStore (Xavier Claessens)
+ - Fixed #526927, "This call will be ended. Continue?" has no purpose when call status is disconnected (Frederic Peters)
+ - Fixed #527452, Too difficult SIP configure UI (Frederic Peters)
+ - Fixed #527454, Better call dialog (Naba Kumar)
+ - Fixed #527713, crash when opening a chat with the keyboard (Frederic Peters)
+ - Fixed #527876, "registrar" misspelled (Frederic Peters)
+ - Fixed #527924, NotHere applet doesn't find icons (Frederic Peters)
+ - Fixed #528229, chat dialogs way too large (Xavier Claessens)
+ - Fixed #528287, Contact not shown in the contact list when he comes online (Xavier Claessens)
+ - Fixed #528529, escaping text in strings using Pango markup (Frederic Peters)
+ - Fixed #528542, Help is displayed on stderr, but stderr may go to log file (Frederic Peters)
+ - Fixed #528596, Missing l10n for strings in call window (Frederic Peters)
+
+Translations:
+ - Updated es translation (Jorge Gonzalez).
+ - Updated el translation (Giannis Katsampirhs).
+ - Updated ca translation (Gil Forcada).
+ - Updated Basque translation (Inaki Larranaga Murgoitio).
+
+NEW in 0.22.0
+==============
+ - Queue received messages until the sender got his alias. (Xavier Claessens).
+
+Bugs fixed:
+ - Fixed #466521, Add an advanced expander in the generic setting widget (Marco Barisione)
+ - Fixed #479534, remember conversation window sizes (Marco Barisione)
+ - Fixed #501805, empathy should prevent to run multiple instances (Marco Barisione)
+ - Fixed #505616, linkability of URL broken on _ (Marco Barisione)
+ - Fixed #520788, Wrong button order in the favourite rooms dialog (Marco Barisione)
+ - Fixed #521051, empathy_main_window_show() should use empathy_window_present() (Marco Barisione)
+
+Translations:
+ - Updated Finnish translation (ituohela).
+ - Updated en_GB translation (Philip Withnall).
+ - Updated sv translation (Daniel Nylander).
+ - Updated it translation (Milo Casagrande).
+ - Updated Spanish translation (Jorge Gonzalez).
+ - Updated fr translation (Robert-André Mauchin).
+
+NEW in 0.21.91
+==============
+ - Blink the status icon for new incoming calls. (Xavier Claessens).
+ - Close the media channel if stream engine crashes. (Xavier Claessens).
+ - Change status to closed if stream engine dies or if a call fails. (Xavier Claessens).
+ - Make use of generated code for using stream engine. (Xavier Claessens).
+ - Add a GUI to configure IRC accounts (Guillaume Desmottes).
+ - accounts-dialog: swap the create and previous button (Guillaume Desmottes).
+ - save when adding/removing networks (Guillaume Desmottes).
+ - check if network != NULL before trying to set its charset (Guillaume Desmottes).
+ - New call code, should be more usable (Elliot Fairweather).
+ - Try to create salut account if getting the gconf key fails. (Xavier Claessens).
+ - Add a generic UI to make easy building UI for protocol specific settings. (Xavier Claessens).
+ - Fix setting avatar on salut. (Sjoerd Simons).
+ - Use EMPATHY_SRCDIR environment variable to load uninstalled glade/xml/dtd files (Xavier Claessens).
+
+Bugs fixed:
+ - Fixed #505585, Improve .gitignore (Guillaume Desmottes)
+ - Fixed #505622, add "check" framework support (Guillaume Desmottes)
+ - Fixed #507515, "has come online" is printed even if peer has been online the whole time (Xavier Claessens)
+ - Fixed #507656, "make valgrind" broken (Guillaume Desmottes)
+ - Fixed #513673, Need a GUI to configure ICQ accounts (Andreas Henriksson)
+ - Fixed #513674, Need a GUI to configure Yahoo! accounts (Susana)
+ - Fixed #516198, Thinks contacts come online each time a chat dialog is opened (Xavier Claessens)
+ - Fixed #517098, Critical warnings viewing previous conversations (Xavier Claessens)
+
+Translations:
+ - Updated pt_BR translation (Og Maciel).
+ - Updated sv translation (Daniel Nylander).
+ - Updated Spanish translation (Jorge Gonzalez).
+ - Updated Arabic Translation (Abou Manal).
+ - Updated eu translation (Inaki Larranaga Murgoitio).
+ - Updated Occitan translation (ymarcheg).
+ - Updated Basque translation. (dooteo).
+ - Updated Finnish translation (ituohela).
+ - Updated ja translation (Takeshi AIHANA).
+ - Updated Nepali Translation (pachimho).
+ - Updated Finnish translation (ituohela).
+ - Updated Galician Translation. (icq).
+ - Added Hebrew translation (yairhr).
+
+NEW in 0.21.90
+==============
+ - Change "new message" dialog to "new conversation" and make possible to do voip call. (Xavier Claessens).
+ - Try to load dtd and glade files from the srcdir. (Xavier Claessens).
+ - Add a property to have or not groups on EmpathyContactListStore (Xavier Claessens).
+ - Add a features property on EmpathyContactListView to enable/disable each action. (Xavier Claessens).
+ - Add a program to show chat logs (Xavier Claessens).
+ - Add a cancel button on the custom message diaog (Xavier Claessens).
+ - Unset account parameter if user gives an empthy value. (Xavier Claessens).
+ - Show/Hide main window when changing corresponding gcong key. (Xavier Claessens).
+
+Bugs fixed:
+ - Fixed #501467, improve accounts dialog (Xavier Claessens)
+ - Fixed #507840, New UI for Jabber accounts (Xavier Claessens)
+ - Fixed #509906, empathy is showing off-line contacts before on-line ones (Xavier Claessens)
+ - Fixed #511048, Ellipsize error button (Xavier Claessens)
+ - Fixed #511841, account has to be selected to (un)check its checkbox (Carl-Anton Ingmarsson)
+ - Fixed #515008, Nickname should be in the main section of the preferences for salut accounts (Marco Barisione)
+ - Fixed #515010, Do not be automatically set published name for new salut accounts (Marco Barisione)
+ - Fixed #511679, Empathy HEAD doesn't build (Guillaume Desmottes)
+
+Translations:
+ - Updated eu translation (Inaki Larranaga Murgoitio).
+ - Updated Arabic Translation (Djihed Afifi).
+ - Updated Galician Translation. (icq).
+ - Updated Spanish translation (Jorge Gonzalez).
+
+NEW in 0.21.5.2
+==============
+ - Update API documentation generator. (Xavier Claessens).
+ - Update python binding for new API. (Xavier Claessens).
+ - Rename BlockType to EMPATHY_CHAT_VIEW_BLOCK to respect namespace (Xavier Claessens).
+ - Change EMPATHY_AVATAR_CHOOSER_TYPE to EMPATHY_TYPE_AVATAR_CHOOSER (Xavier Claessens).
+ - Ignore ssl errors for gtalk profile by default otherwise it won't connect. (Xavier Claessens).
+
+Bugs fixed:
+ - Fixed #509656, crash in Empathy Instant Messenger: Nothing. I was viewing s... (Xavier Claessens)
+
+Translations:
+ - Updated ja Translation (Takeshi AIHANA).
+ - Updated sv Translation (Daniel Nylander).
+
+NEW in 0.21.5.1
+==============
+ - Fix release.py script to give correct author of fixed bug.
+ - Fix NEWS file with correct authors
+ - BUMP ABI version, forgot that for release 0.21.5
+
+NEW in 0.21.5
+==============
+ - Adding a release.py script that uses git.
+ - Add SIP icon picked from pidgin.
+ - Cleanup icons: Regenerate icons from SVG at 16, 22, 24, 32 and 48 size.
+ Change xmpp-link-local icon from apple's to the avahi icon. Still missing SVG
+ for im-message, im-message-new and user-typing.
+ - Add avatar token in logs and load avatar from cache when getting logs messages.
+ - Reset status message when coming back from away and the status was manually
+ set to away.
+ - Update profiles based on N810's.
+ - Remove ChangeLog and po/ChangeLog, new release script uses git logs and
+ generates ChangeLog file from git.
+ - Add .gitignore files.
+ - Chandlers leaves when there is no more channels to handle.
+ - Set call window title to contact name
+ - Import Gossip's chat theme system and simplify it a bit.
+
+Bugs fixed:
+ - Fixed #466960, status icon tooltip doesn't change when status changes (Xavier Claessens)
+ - Fixed #508520, :0 smiley conversion shouldn't happen for times (Xavier Claessens)
+ - Fixed #499885, Automatically connect at session start (Carl-Anton Ingmarsson)
+ - Fixed #507656, "make valgrind" broken (Guillaume Desmottes)
+ - Fixed #459520, Can't remove a group (David Turner)
+ - Fixed #447851, Wider list of participants in group chat/IRC channel (Rohit Agrawal)
+ - Fixed #505622, add "check" framework support (Guillaume Desmottes)
+ - Fixed #490153, Join _New... icon (Michael Monreal)
+ - Fixed #502932, Text selection in Accounts window (Xavier Claessens)
+
+Translations:
+ - Updated Spanish Translation (jorgegonz).
+ - Updated Norwegian bokmål Translation (kmaraas).
+ - Updated Occitan Translation (ymarcheg).
+ - Updated French Translation (claudep).
+ - Updated Swedish Translation (dnylande).
+ - Updated Brazilian Portuguese Translation (leonardof).
+ - Updated Basque Translation (dooteo).
+ - Updated Arabic Translation (djihed).
+
+NEW in 0.21.4:
+=============
+ - Cache avatar pixbuf in EmpathyChatView to avoid having a new pixbuf in memory
+ for each message a contact sends
+ - Generate ChangeLog from svn commits. Copy generator from epiphany.
+ - Correctly store/restore presence when NM state changes.
+ - Split EmpathyContactFactory to have one EmpathyTpContactFactory per account.
+ - When NM is in sleeping (=disabled) state, do just like if it was connected.
+ Add a gconf key to disable NM support completely.
+
+NEW in 0.21.3:
+=============
+ - Request new Text Channel if the contact is online again and CM don't support
+ offline message or if account gets reconnected.
+ - Depend on telepathy-glib and make use of his new API. Don't use deprecated
+ functions of libtelepathy.
+ - Better gtkdoc generator.
+
+NEW in 0.21.2:
+=============
+ - Display error message when an account failed to connect.
+ - Move chats to its own process.
+ - Move chandlers in $libexecdir
+ - Don't use the same bus name for filter and chandler programs.
+
+NEW in 0.21.1:
+=============
+ - Cleanup licences and copyrights, Modules with 100% collabora code are now
+ relicenced to LGPL.
+ - Hide main window with ALT-F4.
+ - Set chat state to ACTIVE when receiving a message from a contact, avoid
+ staying in COMPOSING state forever for protocols like MSN that do not notify
+ when contact stoped writing.
+ - Don't use deprecated Gtk/GLib API. Mainly replace GtkTooltips by new
+ tooltip API from GTK 2.12.
+ - Use g_timeout_add_seconds when appropriated to avoid weaking the process too
+ much.
+ - Implement EmpathyAvatarChooser and EmpathyAvatarImage and make use of them in
+ contact information windows. That means we can now enlarge avatars when
+ clicking on it and we can set our own avatar if we edit our own contact.
+ - Implement edit personal information window, no vcard supported yet, but it's
+ not possible to set our own alias/avatar.
+ - Bump version to 0.21.1 for GNOME 2.21.1 release.
+
+NEW in 0.14:
+===========
+ - Megaphone applet now uses avatar cache.
+
+NEW in 0.13:
+===========
+ - Completely reworked ContactList API, new EmpathyContactFactory class.
+ - Update to new Telepathy avatar spec.
+ - Dynamic smiley managment and more efficient algorithm to detect smileys in
+ messages. New EmpathySmileyManager class.
+ - Adding capabilities contact property for Audio/Video.
+ - Adding UI to start a VoIP call. Atm it only shows a microphone icon for
+ contacts supporting voice or video but does not make the call. See
+ EMPATHY_VOIP branch for more complete support.
+ - "interactive" property on EmpathyContactListView to enable/disable context
+ menu and action when double-click on a contact.
+ - Add 2 properties to EmpathyIdle to activate auto-away and auto-disconnect,
+ default to off. Only empathy main client will turn them on, like that if
+ other processes are running with an EmpathyIdle instance they won't change
+ presence in the same time than Empathy client.
+ - Cache avatars in ~/.gnome2/Empathy/avatars.
+ - Adding a test program, useful to use with valgrind.
+ - Free return value for async DBus calls, they are not owned by dbus-glib.
+ This fix big leaks.
+
+NEW in 0.12:
+===========
+ - Only update the topic of it has really be changed, avoid diplaying many
+ times "Topic set to:" message.
+ - Some Jabber chatroom sends messages received before we joined the room, avoid
+ displaying those messages if we already logged them last time we joined that
+ room. Previous workaround prevented Empathy to log offline messages.
+
+NEW in 0.11:
+===========
+ - Change main window's title to "Contact list".
+ - Do not list profiles that don't have the corresponding CM installed when
+ creating a new account.
+
+NEW in 0.10:
+===========
+ - Align param names on the left in the generic account settings widget.
+ - Try to guess the server from the jid if we are using the jabber profile.
+
+NEW in 0.9:
+===========
+ - Initial room list support. It doesn't work yet but most of the code is ready.
+ - Tell the user when a message can't be sent.
+ - Set all contacts from salut protocol to the "Local Network" group.
+ - Fix NetworkManager support.
+ - Iconify main window to the status icon like in rhythmbox.
+ - Show avatars in chatrooms.
+ - Fix avatar not being requested when empathy starts.
+ - Remove unused nickname entry and use a GtkTable for room information.
+ - Set a window title and fix alignment of widgets for contact related dialogs
+ (add, edit/view info).
+ - Adding initial API documentation using gtk-doc.
+ - Auto-accept to publish presence to contacts that are in our subscribe list.
+ When accepting a pending contact add it to publish and subscribe list.
+ - Filter incoming text channels and make status icon flash when there we
+ receive a new message. Dispatch the channel only when we get a message and
+ the user click on the icon.
+ - Install libempathy and libempathy-gtk and make their API public. The API is
+ NOT STABLE AT ALL !!!
+
+NEW in 0.8:
+===========
+ - Fixed contact list handling.
+ - Make use of NetworkManager to set presence to OFFILE when we are disconnected
+ and restore presence once we are reconnected.
+ - UI for searching in conversation history and to view all conversations with
+ a given contact.
+ - Do not use 2 different processes (empathy and empathy-chat), merge them
+ into one client. This is easier for debugging and share data.
+ - Do not create log directory for a chat if there is no messages to put in.
+ - Do not set active contacts when creating the store, and when contact groups
+ changed.
+ - Fix warning when using command-line options.
+ - Ignore ssl errors by default. This is needed to connect jabber accounts
+ using ssl.
+ - Adding spellcheck support using aspell.
+ - Lots of bugs fixed.
+
+NEW in 0.7:
+===========
+ - Adding new contacts.
+ - Accept/Reject contacts who wants to get our presence.
+ - Edit/View contacts information.
+ - Get name and topic properties for chatrooms.
+ - Log chats and display 10 last messages when opening a new chat.
+ - Set presence to available for protocols that do not supports presence
+ (SIP, IRC).
+ - Lots of bugs fixed.
+
+NEW in 0.6:
+===========
+ - Join room when clicking on favorite rooms.
+ - Do not restore away presence message when coming back after the user set
+ manually to away.
+ - Set parent window when poping a new window/dialog.
+ - Implement favorite chatroom menu.
+ - Do not highlight contacts already known when creating the contact list.
+ - Do not set status message to "Extended autoaway", let user's message
+ unchanged.
+ - Many bugs and leaks fixed.
+
+NEW in 0.5:
+===========
+ - Do not highlight groups when adding them in the roster.
+ - Do not create new GossipContact object in presence/avatar/alias changed
+ signal if we don't already know that contact from a contact list channel.
+ This should fix DBus max pending calls limit reached in some cases.
+ - New icon for empathy-new-message, empathy-group-message and
+ empathy-proto-irc.
+ - Chatroom support. New objects: GossipNewChatroomDialog, GossipAccountChooser,
+ GossipGroupChat
+ - If we are offline do not set away on idle. If we are already away restore to
+ available when we are no mode idle. Do no modify status message.
+ - Fixed message displaying with fancy themes.
+ - Many bugs fixed.
+
+NEW in 0.4:
+===========
+ - contact list refactoring: EmpathyContactList is an iface implemented by
+ EmpathyTpContactList, EmpathyContactManager and EmpathyTpChatroom.
+ GossipContactList splitted into GossipContactListStore and
+ GossipContactListView, it can display any object implementing the
+ EmpathyContactList iface. Make possible to set custom functions to define
+ the groups of a contact, by default it gets the "group" property of the
+ GossipContact object. This make possible to reuse the contact list UI from
+ the main window for chatrooms where groups are the role/affiliation of the
+ contact on that room.
+ - Auto away when gnome-screensaver says the session is idle and extended away
+ 30min after that.
+ - Display ChatState when the contact is composing.
+ - Bugbuddy now reports crashes to GNOME Bugzilla.
+ - New program icon.
+ - Setting i18n support and importing po files from gossip.
+ - Add an example label for jid.
+ - Do not open chat window twice for the same conversation.
+
diff --git a/trunk/README b/trunk/README
new file mode 100644
index 000000000..7f38eabb2
--- /dev/null
+++ b/trunk/README
@@ -0,0 +1,12 @@
+How to use empathy ?
+
+1) Install
+$ ./autogen.sh
+$ make && make install
+
+2) Start empathy
+$ empathy
+This will start MC, connect all enabled accounts and add a GtkStatusIcon. If you
+start a private chat or someone is saying something to you, empathy-chat will be
+started automagicaly and display a chat UI for your conversation.
+
diff --git a/trunk/TODO b/trunk/TODO
new file mode 100644
index 000000000..a46c8cc18
--- /dev/null
+++ b/trunk/TODO
@@ -0,0 +1,27 @@
+Things you can do if you want to help:
+
+ - UI for inviting a contact in a chatroom.
+ - UI for accept/refuse invitation to join a chatroom and VoIP calls.
+ - GtkWidget-ify libempathy-gtk. Actually most window/dialog do not inherit from
+ GtkWindow/GtkDialog. Need to create a glade catalog, it seems to not be
+ that easy.
+ - Remove Quit option everywhere, empathy is a session service and shouldn't be
+ leaved.
+ - Add sound events
+ - Add register capability in EmpathyAccountsDialog if the profile says
+ it's supported.
+ - Write a manual based on gossip's.
+ - Reviewing File Transfer patch, see bug #462172.
+ - Drop libtelepathy and use telepathy-glib instead when it gets client-side
+ functions.
+ - Drop Nokia's MissionControl and use the standardized MC spec instead.
+ - Improve VoIP support once stream-engine gets cleaned and moved into tp-glib.
+ - Split MUC out of Empathy's main program and create a xchat-gnome-like
+ program for MUCs.
+ - See with Gnome Online Desktop project how to implement meta-contacts and
+ merge information from multiple contacts.
+ - Testing and Bugfixing.
+
+If you want to contribute you can ask for information at
+ - #telepathy on freenode
+ - Telepathy's mailing list: telepathy@lists.freedesktop.org
diff --git a/trunk/autogen.sh b/trunk/autogen.sh
new file mode 100755
index 000000000..b1a24fc3a
--- /dev/null
+++ b/trunk/autogen.sh
@@ -0,0 +1,23 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+PKG_NAME="Empathy"
+REQUIRED_AUTOMAKE_VERSION=1.9
+
+(test -f $srcdir/configure.ac) || {
+ echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
+ echo " top-level gnome directory"
+ exit 1
+}
+
+
+which gnome-autogen.sh || {
+ echo "You need to install gnome-common from the GNOME CVS"
+ exit 1
+}
+USE_GNOME2_MACROS=1 USE_COMMON_DOC_BUILD=yes . gnome-autogen.sh
+
+
diff --git a/trunk/configure.ac b/trunk/configure.ac
new file mode 100644
index 000000000..cbe107421
--- /dev/null
+++ b/trunk/configure.ac
@@ -0,0 +1,315 @@
+AC_INIT(Empathy, 0.23.2, http://bugzilla.gnome.org/browse.cgi?product=empathy)
+AC_PREREQ(2.59)
+AC_COPYRIGHT([
+ Copyright (C) 2003-2007 Imendio AB
+ Copyright (C) 2007 Collabora Ltd.
+])
+
+# LT Version numbers, remember to change them just *before* a release.
+# (Interfaces removed: CURRENT++, AGE=0, REVISION=0)
+# (Interfaces added: CURRENT++, AGE++, REVISION=0)
+# (No interfaces changed: REVISION++)
+LIBEMPATHY_CURRENT=13
+LIBEMPATHY_AGE=0
+LIBEMPATHY_REVISION=0
+
+LIBEMPATHY_GTK_CURRENT=13
+LIBEMPATHY_GTK_AGE=0
+LIBEMPATHY_GTK_REVISION=0
+
+AC_SUBST(LIBEMPATHY_CURRENT)
+AC_SUBST(LIBEMPATHY_AGE)
+AC_SUBST(LIBEMPATHY_REVISION)
+AC_SUBST(LIBEMPATHY_GTK_CURRENT)
+AC_SUBST(LIBEMPATHY_GTK_AGE)
+AC_SUBST(LIBEMPATHY_GTK_REVISION)
+
+# Minimal version required
+GLIB_REQUIRED=2.15.5
+GTK_REQUIRED=2.12.0
+GCONF_REQUIRED=1.2.0
+LIBGLADE_REQUIRED=2.0.0
+LIBPANELAPPLET_REQUIRED=2.10.0
+TELEPATHY_GLIB_REQUIRED=0.7.7
+MISSION_CONTROL_REQUIRED=4.61
+ENCHANT_REQUIRED=1.2.0
+ISO_CODES_REQUIRED=0.35
+
+# Uncomment that to build without deprecated symbols
+# AC_DEFINE(GTK_DISABLE_DEPRECATED, 1, [Disable deprecated GTK symbols])
+# AC_DEFINE(G_DISABLE_DEPRECATED, 1, [Disable deprecated GLib symbols])
+
+AC_CONFIG_MACRO_DIR([m4])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_SRCDIR([configure.ac])
+AC_CONFIG_AUX_DIR(.)
+
+GNOME_COMMON_INIT
+
+AM_INIT_AUTOMAKE(1.9 dist-bzip2 no-define -Wno-portability)
+AM_MAINTAINER_MODE
+AC_ISC_POSIX
+AC_PROG_CC
+AC_HEADER_STDC
+AM_PROG_LIBTOOL
+AM_PROG_MKDIR_P
+AM_PATH_GLIB_2_0
+AC_PATH_XTRA
+IT_PROG_INTLTOOL([0.35.0])
+GTK_DOC_CHECK([1.3])
+GNOME_DOC_INIT
+IDT_COMPILE_WARNINGS
+AC_PATH_PROG(DBUS_BINDING_TOOL, dbus-binding-tool)
+AC_PATH_PROG(GCONFTOOL, gconftool-2)
+AM_GCONF_SOURCE_2
+GLIB_GENMARSHAL=`$PKG_CONFIG glib-2.0 --variable=glib_genmarshal`
+AC_SUBST(GLIB_GENMARSHAL)
+
+AC_CHECK_PROGS([XSLTPROC], [xsltproc])
+if test -z "$XSLTPROC"; then
+ AC_MSG_ERROR([xsltproc (from libxslt) is required])
+fi
+AC_CHECK_PROGS([PYTHON], [python python2.3 python2.4 python2.5])
+if test -z "$PYTHON"; then
+ AC_MSG_ERROR([Python is required])
+fi
+
+EMPATHY_ARG_VALGRIND
+
+# -----------------------------------------------------------
+# Pkg-Config dependency checks
+# -----------------------------------------------------------
+
+PKG_CHECK_MODULES(LIBEMPATHY,
+[
+ glib-2.0 >= $GLIB_REQUIRED
+ gobject-2.0
+ libxml-2.0
+ telepathy-glib >= $TELEPATHY_GLIB_REQUIRED
+ libmissioncontrol >= $MISSION_CONTROL_REQUIRED
+])
+
+PKG_CHECK_MODULES(EMPATHY,
+[
+ glib-2.0 >= $GLIB_REQUIRED
+ gobject-2.0
+ gio-2.0 >= $GLIB_REQUIRED
+ gconf-2.0 >= $GCONF_REQUIRED
+ telepathy-glib >= $TELEPATHY_GLIB_REQUIRED
+ libmissioncontrol >= $MISSION_CONTROL_REQUIRED
+ gtk+-2.0 >= $GTK_REQUIRED
+ x11
+ libglade-2.0 >= $LIBGLADE_REQUIRED
+ libebook-1.2
+])
+
+# -----------------------------------------------------------
+# Enable debug
+# -----------------------------------------------------------
+
+AC_ARG_ENABLE(debug,
+ AC_HELP_STRING([--disable-debug],[compile without debug code]),
+ enable_debug=$enableval, enable_debug=yes )
+
+if test x$enable_debug = xyes; then
+ AC_DEFINE(ENABLE_DEBUG, [], [Enable debug code])
+fi
+
+# -----------------------------------------------------------
+# Language Support
+# -----------------------------------------------------------
+
+GETTEXT_PACKAGE=empathy
+AC_SUBST(GETTEXT_PACKAGE)
+AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Gettext package name])
+
+AM_GLIB_GNU_GETTEXT
+
+# -----------------------------------------------------------
+# spellchecking checks: enchant and iso-codes
+# -----------------------------------------------------------
+AC_ARG_ENABLE(spell,
+ AS_HELP_STRING([--enable-spell=@<:@no/yes/auto@:>@],
+ [Enable spell checking]), ,
+ enable_spell=auto)
+
+if test "x$enable_spell" != "xno"; then
+ PKG_CHECK_MODULES(ENCHANT,
+ [
+ enchant >= $ENCHANT_REQUIRED,
+ iso-codes >= $ISO_CODES_REQUIRED
+ ], have_enchant="yes", have_enchant="no")
+
+ if test "x$have_enchant" = "xyes"; then
+ AC_MSG_CHECKING([whether iso-codes has iso-639 and iso-3166 domains])
+ if $PKG_CONFIG --variable=domains iso-codes | grep 639 > /dev/null && \
+ $PKG_CONFIG --variable=domains iso-codes | grep 3166 > /dev/null ; then
+ AC_DEFINE_UNQUOTED(ISO_CODES_PREFIX, ["`$PKG_CONFIG --variable=prefix iso-codes`"], [ISO codes prefix])
+ AC_DEFINE(HAVE_ENCHANT, 1, [Define if you have libenchant])
+ result=yes
+ else
+ result=no
+ have_enchant="no"
+ fi
+ AC_MSG_RESULT([$result])
+ fi
+else
+ have_enchant=no
+fi
+
+if test "x$enable_spell" = "xyes" -a "x$have_enchant" != "xyes"; then
+ AC_MSG_ERROR([Couldn't find spell dependencies.])
+fi
+
+AM_CONDITIONAL(HAVE_ENCHANT, test "x$have_enchant" = "xyes")
+
+# -----------------------------------------------------------
+# Megaphone
+# -----------------------------------------------------------
+AC_ARG_ENABLE(megaphone,
+ AS_HELP_STRING([--enable-megaphone=@<:@no/yes/auto@:>@],
+ [build megaphone applet]), ,
+ enable_megaphone=auto)
+
+if test "x$enable_megaphone" != "xno"; then
+ PKG_CHECK_MODULES(MEGAPHONE,
+ [
+ libpanelapplet-2.0 >= $LIBPANELAPPLET_REQUIRED
+ glib-2.0 >= $GLIB_REQUIRED
+ gtk+-2.0 >= $GTK_REQUIRED
+ gconf-2.0 >= $GCONF_REQUIRED
+ libglade-2.0 >= $LIBGLADE_REQUIRED
+ libmissioncontrol >= $MISSION_CONTROL_REQUIRED
+ ], have_megaphone="yes", have_megaphone="no")
+else
+ have_megaphone=no
+fi
+
+if test "x$enable_megaphone" = "xyes" -a "x$have_megaphone" != "xyes"; then
+ AC_MSG_ERROR([Couldn't find megaphone dependencies.])
+fi
+
+AM_CONDITIONAL(HAVE_MEGAPHONE, test "x$have_megaphone" = "xyes")
+
+# -----------------------------------------------------------
+# Nothere
+# -----------------------------------------------------------
+AC_ARG_ENABLE(nothere,
+ AS_HELP_STRING([--enable-nothere=@<:@no/yes/auto@:>@],
+ [build nothere applet]), ,
+ enable_nothere=auto)
+
+if test "x$enable_nothere" != "xno"; then
+ PKG_CHECK_MODULES(NOTHERE,
+ [
+ libpanelapplet-2.0 >= $LIBPANELAPPLET_REQUIRED
+ glib-2.0 >= $GLIB_REQUIRED
+ gtk+-2.0 >= $GTK_REQUIRED
+ gconf-2.0 >= $GCONF_REQUIRED
+ libglade-2.0 >= $LIBGLADE_REQUIRED
+ libmissioncontrol >= $MISSION_CONTROL_REQUIRED
+ ], have_nothere="yes", have_nothere="no")
+else
+ have_nothere=no
+fi
+
+if test "x$enable_nothere" = "xyes" -a "x$have_nothere" != "xyes"; then
+ AC_MSG_ERROR([Couldn't find nothere dependencies.])
+fi
+
+AM_CONDITIONAL(HAVE_NOTHERE, test "x$have_nothere" = "xyes")
+
+# -----------------------------------------------------------
+# Tests
+# -----------------------------------------------------------
+AC_ARG_ENABLE(tests,
+ AS_HELP_STRING([--enable-tests=@<:@no/yes/auto@:>@],
+ [build tests]), ,
+ enable_tests=auto)
+
+if test "x$enable_tests" != "xno"; then
+ PKG_CHECK_MODULES(CHECK,
+ [
+ check >= 0.9.4
+ ], have_check="yes", have_check="no")
+else
+ have_check=no
+fi
+
+if test "x$enable_tests" = "xyes" -a "x$have_check" != "xyes"; then
+ AC_MSG_ERROR([Couldn't find check dependencies.])
+fi
+
+AM_CONDITIONAL(HAVE_TESTS, test "x$have_check" = "xyes")
+
+# -----------------------------------------------------------
+# Python Bindings
+# -----------------------------------------------------------
+AC_ARG_ENABLE(python,
+ AS_HELP_STRING([--enable-python=@<:@no/yes/auto@:>@],
+ [build python bindings to libempathy and libempathy-gtk]), ,
+ enable_python=auto)
+
+if test "x$enable_python" != "xno"; then
+ AM_PATH_PYTHON
+ if test -z "$PYTHON" ; then
+ have_python="no"
+ else
+ PKG_CHECK_MODULES(PYTHON_BINDING,
+ [
+ pygtk-2.0,
+ glib-2.0 >= $GLIB_REQUIRED
+ gobject-2.0
+ gconf-2.0 >= $GCONF_REQUIRED
+ libxml-2.0
+ libmissioncontrol >= $MISSION_CONTROL_REQUIRED
+ gtk+-2.0 >= $GTK_REQUIRED
+ libglade-2.0 >= $LIBGLADE_REQUIRED
+ ], have_python="yes", have_python="no")
+ if test "x$have_python" = "xyes" ; then
+ AM_CHECK_PYTHON_HEADERS(,have_python="no")
+ fi
+ fi
+else
+ have_python=no
+fi
+
+if test "x$enable_python" = "xyes" -a "x$have_python" != "xyes"; then
+ AC_MSG_ERROR([Couldn't find python.])
+fi
+
+AM_CONDITIONAL(HAVE_PYTHON, test "x$have_python" = "xyes")
+
+# -----------------------------------------------------------
+
+AC_OUTPUT([
+ Makefile
+ data/Makefile
+ data/empathy.desktop.in
+ data/icons/Makefile
+ extensions/Makefile
+ po/Makefile.in
+ libempathy/Makefile
+ libempathy/libempathy.pc
+ libempathy-gtk/Makefile
+ libempathy-gtk/libempathy-gtk.pc
+ src/Makefile
+ megaphone/Makefile
+ megaphone/src/Makefile
+ megaphone/data/Makefile
+ nothere/Makefile
+ nothere/src/Makefile
+ nothere/data/Makefile
+ docs/Makefile
+ docs/libempathy/Makefile
+ docs/libempathy/version.xml
+ docs/libempathy-gtk/Makefile
+ docs/libempathy-gtk/version.xml
+ help/Makefile
+ python/Makefile
+ python/pyempathy/Makefile
+ python/pyempathygtk/Makefile
+ tests/Makefile
+ tests/xml/Makefile
+ tools/Makefile
+])
diff --git a/trunk/data/.gitignore b/trunk/data/.gitignore
new file mode 100644
index 000000000..fd8659a18
--- /dev/null
+++ b/trunk/data/.gitignore
@@ -0,0 +1,3 @@
+empathy.desktop
+empathy.desktop.in
+empathy.schemas
diff --git a/trunk/data/Makefile.am b/trunk/data/Makefile.am
new file mode 100644
index 000000000..bc225fc34
--- /dev/null
+++ b/trunk/data/Makefile.am
@@ -0,0 +1,51 @@
+SUBDIRS = icons
+
+profiledir = $(datadir)/mission-control/profiles
+profile_DATA = \
+ aim.profile \
+ icq.profile \
+ jabber.profile \
+ salut.profile \
+ yahoo.profile \
+ gtalk.profile \
+ irc.profile \
+ msn.profile \
+ msn-haze.profile \
+ sofiasip.profile \
+ ekiga.profile \
+ fwd.profile \
+ sipphone.profile \
+ groupwise.profile
+
+desktopdir = $(datadir)/applications
+desktop_in_files = empathy.desktop.in
+desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
+@INTLTOOL_DESKTOP_RULE@
+
+schemasdir = $(GCONF_SCHEMA_FILE_DIR)
+schemas_in_files = empathy.schemas.in
+schemas_DATA = $(schemas_in_files:.schemas.in=.schemas)
+@INTLTOOL_SCHEMAS_RULE@
+
+if GCONF_SCHEMAS_INSTALL
+install-data-local:
+ if test -z "$(DESTDIR)" ; then \
+ for p in $(schemas_DATA) ; do \
+ GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(srcdir)/$$p ; \
+ done \
+ fi
+else
+install-data-local:
+endif
+
+EXTRA_DIST = \
+ $(profile_DATA) \
+ $(desktop_in_files) \
+ $(desktop_DATA) \
+ $(schemas_in_files) \
+ $(schemas_DATA)
+
+DISTCLEANFILES = \
+ $(desktop_DATA) \
+ $(schemas_DATA)
+
diff --git a/trunk/data/aim.profile b/trunk/data/aim.profile
new file mode 100644
index 000000000..ae7dbaecc
--- /dev/null
+++ b/trunk/data/aim.profile
@@ -0,0 +1,10 @@
+[Profile]
+Manager=haze
+Protocol=aim
+IconName = im-aim
+DisplayName=AIM
+ConfigurationUI = aim
+Capabilities = chat-p2p, supports-alias, supports-avatars, supports-roster
+VCardDefault = 1
+VCardField = X-AIM
+SupportedPresences = away,hidden,do-not-disturb
diff --git a/trunk/data/ekiga.profile b/trunk/data/ekiga.profile
new file mode 100644
index 000000000..1acc71044
--- /dev/null
+++ b/trunk/data/ekiga.profile
@@ -0,0 +1,14 @@
+[Profile]
+Manager = sofiasip
+Protocol = sip
+DisplayName = Ekiga.net (SIP)
+IconName = im-ekiga
+ConfigurationUI = sofiasip
+VCardDefault = 1
+VCardField = X-SIP
+Capabilities = chat-p2p, voice-p2p, split-account, video-p2p
+DefaultAccountDomain = ekiga.net
+Default-priority = 1
+Default-stun-server = stun.ekiga.net
+Default-discover-stun = false
+
diff --git a/trunk/data/empathy.desktop.in.in b/trunk/data/empathy.desktop.in.in
new file mode 100644
index 000000000..d7feab251
--- /dev/null
+++ b/trunk/data/empathy.desktop.in.in
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Version=1.0
+_Name=Empathy Instant Messenger
+_Comment=Send and receive instant messages
+Exec=empathy
+Icon=empathy
+StartupNotify=false
+Terminal=false
+Type=Application
+Categories=GNOME;GTK;Network;InstantMessaging;
+X-GNOME-Bugzilla-Bugzilla=GNOME
+X-GNOME-Bugzilla-Product=empathy
+X-GNOME-Bugzilla-Component=General
+X-GNOME-Bugzilla-Version=@VERSION@
diff --git a/trunk/data/empathy.schemas.in b/trunk/data/empathy.schemas.in
new file mode 100644
index 000000000..b0246ef16
--- /dev/null
+++ b/trunk/data/empathy.schemas.in
@@ -0,0 +1,309 @@
+<gconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/apps/empathy/ui/show_offline</key>
+ <applyto>/apps/empathy/ui/show_offline</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Show offline contacts</short>
+ <long>
+ Whether or not to show contacts that are offline in the contact list.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/contacts/sort_criterium</key>
+ <applyto>/apps/empathy/contacts/sort_criterium</applyto>
+ <owner>empathy</owner>
+ <type>string</type>
+ <default>name</default>
+ <locale name="C">
+ <short>Contact list sort criterium</short>
+ <long>
+ Which criterium to use when sorting the contact list.
+ Default is to use sort by the contact's name with the value
+ "name". A value of "state" will sort the contact list by state.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/ui/show_avatars</key>
+ <applyto>/apps/empathy/ui/show_avatars</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show avatars</short>
+ <long>
+ Whether or not to show avatars for contacts in the contact
+ list and chat windows.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/ui/compact_contact_list</key>
+ <applyto>/apps/empathy/ui/compact_contact_list</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Compact contact list</short>
+ <long>
+ Whether to show the contact list in compact mode or not.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/ui/main_window_hidden</key>
+ <applyto>/apps/empathy/ui/main_window_hidden</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Hide main window</short>
+ <long>
+ Hide the main window.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/ui/avatar_directory</key>
+ <applyto>/apps/empathy/ui/avatar_directory</applyto>
+ <owner>empathy</owner>
+ <type>string</type>
+ <default></default>
+ <locale name="C">
+ <short>Default directory to select an avatar image from</short>
+ <long>
+ The last directory that an avatar image was chosen from.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/notifications/play_sounds</key>
+ <applyto>/apps/empathy/notifications/play_sounds</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Use notification sounds</short>
+ <long>
+ Whether or not to play a sound when messages arrive.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/notifications/sound_when_away</key>
+ <applyto>/apps/empathy/notifications/sound_when_away</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Enable sound when away</short>
+ <long>
+ Whether or not to play sounds when away.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/notifications/sound_when_busy</key>
+ <applyto>/apps/empathy/notifications/sound_when_busy</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Enable sound when busy</short>
+ <long>
+ Whether or not to play sounds when busy.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/notifications/popup_when_contact_available</key>
+ <applyto>/apps/empathy/notifications/popup_when_contact_available</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Enable popup when contact is available</short>
+ <long>
+ Whether or not to show a popup when a contact becomes available.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/ui/separate_chat_windows</key>
+ <applyto>/apps/empathy/ui/separate_chat_windows</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Open new chats in separate windows</short>
+ <long>
+ Always open a separate chat window for new chats.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/conversation/graphical_smileys</key>
+ <applyto>/apps/empathy/conversation/graphical_smileys</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Use graphical smileys</short>
+ <long>
+ Whether or not to convert smileys into graphical images in
+ conversations.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/conversation/theme</key>
+ <applyto>/apps/empathy/conversation/theme</applyto>
+ <owner>empathy</owner>
+ <type>string</type>
+ <default>classic</default>
+ <locale name="C">
+ <short>Chat window theme</short>
+ <long>
+ The theme that is used to display the conversation in chat windows.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/conversation/theme_chat_room</key>
+ <applyto>/apps/empathy/conversation/theme_chat_room</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Use theme for chat rooms</short>
+ <long>
+ Whether to use the theme for chat rooms or not.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/conversation/spell_checker_languages</key>
+ <applyto>/apps/empathy/conversation/spell_checker_languages</applyto>
+ <owner>empathy</owner>
+ <type>string</type>
+ <default>en</default>
+ <locale name="C">
+ <short>Spell checking languages</short>
+ <long>
+ Comma separated list of spell checker languages to use (e.g. en, fr, nl).
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/conversation/spell_checker_enabled</key>
+ <applyto>/apps/empathy/conversation/spell_checker_enabled</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Enable spell checker</short>
+ <long>
+ Whether or not to check words typed against the languages you
+ want to check with.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/conversation/nick_completion_char</key>
+ <applyto>/apps/empathy/conversation/nick_completion_char</applyto>
+ <owner>empathy</owner>
+ <type>string</type>
+ <default>:</default>
+ <locale name="C">
+ <short>Nick completed character</short>
+ <long>
+ Character to add after nickname when using nick completion (tab)
+ in group chat.
+ </long>
+
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/hints/close_main_window</key>
+ <applyto>/apps/empathy/hints/close_main_window</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Show hint about closing the main window</short>
+ <long>
+ Whether or not to show the message dialog about closing the
+ main window with the 'x' button in the title bar.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/accounts/salut_created</key>
+ <applyto>/apps/empathy/accounts/salut_created</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>false</default>
+ <locale name="C">
+ <short>Checks if Salut account is created</short>
+ <long>
+ Whether or not the Salut account has been created on the first
+ Empathy run.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/use_nm</key>
+ <applyto>/apps/empathy/use_nm</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Checks if NetworkManager should be used</short>
+ <long>
+ Whether or not the network manager should be used to automatically
+ disconnect/reconnect.
+ </long>
+ </locale>
+ </schema>
+
+ <schema>
+ <key>/schemas/apps/empathy/autoconnect</key>
+ <applyto>/apps/empathy/autoconnect</applyto>
+ <owner>empathy</owner>
+ <type>bool</type>
+ <default>true</default>
+ <locale name="C">
+ <short>Checks if Empathy should auto-connect on startup</short>
+ <long>
+ Whether or not Empathy should automatically log in to your accounts on startup.
+ </long>
+ </locale>
+ </schema>
+
+ </schemalist>
+</gconfschemafile>
diff --git a/trunk/data/fwd.profile b/trunk/data/fwd.profile
new file mode 100644
index 000000000..af05b2cc3
--- /dev/null
+++ b/trunk/data/fwd.profile
@@ -0,0 +1,15 @@
+[Profile]
+Manager = sofiasip
+Protocol = sip
+DisplayName = FreeWorldDialup (SIP)
+IconName = im-sip
+ConfigurationUI = sofiasip
+VCardDefault = 1
+VCardField = X-SIP
+Capabilities = chav-p2p, voice-p2p, split-account, video-p2p
+DefaultAccountDomain = fwd.pulver.com
+Default-priority = 1
+Default-proxy-address = fwd.pulver.com
+Default-stun-server = stun.fwdnet.net
+Default-discover-stun = false
+
diff --git a/trunk/data/groupwise.profile b/trunk/data/groupwise.profile
new file mode 100644
index 000000000..3e47ec2fb
--- /dev/null
+++ b/trunk/data/groupwise.profile
@@ -0,0 +1,11 @@
+[Profile]
+Manager=haze
+Protocol=groupwise
+IconName = im-nov
+DisplayName=GroupWise
+ConfigurationUI = groupwise
+Capabilities = chat-p2p, supports-alias, supports-roster
+VCardDefault = 1
+VCardField = X-Groupwise
+SupportedPresences = away,hidden,do-not-disturb
+
diff --git a/trunk/data/gtalk.profile b/trunk/data/gtalk.profile
new file mode 100644
index 000000000..8a91d0fdc
--- /dev/null
+++ b/trunk/data/gtalk.profile
@@ -0,0 +1,16 @@
+[Profile]
+Manager = gabble
+Protocol = jabber
+DisplayName = Google Talk
+IconName = im-google-talk
+ConfigurationUI = jabber
+VCardDefault = 0
+VCardField = X-JABBER
+Capabilities = chat-p2p, voice-p2p, split-account, chat-room, chat-room-list, registration-ui, supports-avatars, supports-alias, supports-roster
+DefaultAccountDomain = gmail.com, googlemail.com
+Default-server = talk.google.com
+Default-port = 5223
+Default-old-ssl = 1
+Default-ignore-ssl-errors = 1
+Default-fallback-conference-server = conference.jabber.org
+SupportedPresences = away,extended-away,do-not-disturb
diff --git a/trunk/data/icons/Makefile.am b/trunk/data/icons/Makefile.am
new file mode 100644
index 000000000..66cef9290
--- /dev/null
+++ b/trunk/data/icons/Makefile.am
@@ -0,0 +1,166 @@
+NULL =
+
+public_icons_themes = \
+ hicolor \
+ $(NULL)
+
+public_icons = \
+ hicolor_apps_16x16_empathy.png \
+ hicolor_apps_22x22_empathy.png \
+ hicolor_apps_24x24_empathy.png \
+ hicolor_apps_32x32_empathy.png \
+ hicolor_apps_48x48_empathy.png \
+ hicolor_apps_scalable_empathy.svg \
+ $(NULL)
+
+private_icons = \
+ hicolor_actions_16x16_im-message-new.png \
+ hicolor_actions_22x22_im-message-new.png \
+ hicolor_actions_24x24_im-message-new.png \
+ hicolor_status_16x16_im-message.png \
+ hicolor_status_16x16_user-typing.png \
+ hicolor_apps_16x16_im-ekiga.png \
+ hicolor_apps_16x16_im-gizmo.png \
+ hicolor_apps_16x16_im-google-talk.png \
+ hicolor_apps_16x16_im-irc.png \
+ hicolor_apps_16x16_im-xmpp.png \
+ hicolor_apps_16x16_im-msn.png \
+ hicolor_apps_16x16_im-sip.png \
+ hicolor_apps_16x16_im-local-xmpp.png \
+ hicolor_apps_22x22_im-ekiga.png \
+ hicolor_apps_22x22_im-gizmo.png \
+ hicolor_apps_22x22_im-google-talk.png \
+ hicolor_apps_22x22_im-irc.png \
+ hicolor_apps_22x22_im-xmpp.png \
+ hicolor_apps_22x22_im-msn.png \
+ hicolor_apps_22x22_im-sip.png \
+ hicolor_apps_22x22_im-local-xmpp.png \
+ hicolor_apps_24x24_im-ekiga.png \
+ hicolor_apps_24x24_im-gizmo.png \
+ hicolor_apps_24x24_im-google-talk.png \
+ hicolor_apps_24x24_im-irc.png \
+ hicolor_apps_24x24_im-xmpp.png \
+ hicolor_apps_24x24_im-msn.png \
+ hicolor_apps_24x24_im-sip.png \
+ hicolor_apps_24x24_im-local-xmpp.png \
+ hicolor_apps_32x32_im-ekiga.png \
+ hicolor_apps_32x32_im-gizmo.png \
+ hicolor_apps_32x32_im-google-talk.png \
+ hicolor_apps_32x32_im-irc.png \
+ hicolor_apps_32x32_im-xmpp.png \
+ hicolor_apps_32x32_im-msn.png \
+ hicolor_apps_32x32_im-sip.png \
+ hicolor_apps_32x32_im-local-xmpp.png \
+ hicolor_apps_48x48_im-ekiga.png \
+ hicolor_apps_48x48_im-gizmo.png \
+ hicolor_apps_48x48_im-google-talk.png \
+ hicolor_apps_48x48_im-irc.png \
+ hicolor_apps_48x48_im-xmpp.png \
+ hicolor_apps_48x48_im-msn.png \
+ hicolor_apps_48x48_im-sip.png \
+ hicolor_apps_48x48_im-local-xmpp.png \
+ hicolor_apps_scalable_im-ekiga.svg \
+ hicolor_apps_scalable_im-gizmo.svg \
+ hicolor_apps_scalable_im-google-talk.svg \
+ hicolor_apps_scalable_im-irc.svg \
+ hicolor_apps_scalable_im-xmpp.svg \
+ hicolor_apps_scalable_im-msn.svg \
+ hicolor_apps_scalable_im-sip.svg \
+ hicolor_apps_scalable_im-local-xmpp.svg \
+ hicolor_status_16x16_empathy-available.png \
+ hicolor_status_16x16_empathy-away.png \
+ hicolor_status_16x16_empathy-busy.png \
+ hicolor_status_16x16_empathy-extended-away.png \
+ hicolor_status_16x16_empathy-offline.png \
+ hicolor_status_16x16_empathy-pending.png \
+ hicolor_status_22x22_empathy-available.png \
+ hicolor_status_22x22_empathy-away.png \
+ hicolor_status_22x22_empathy-busy.png \
+ hicolor_status_22x22_empathy-extended-away.png \
+ hicolor_status_22x22_empathy-offline.png \
+ hicolor_status_22x22_empathy-pending.png \
+ hicolor_status_24x24_empathy-available.png \
+ hicolor_status_24x24_empathy-away.png \
+ hicolor_status_24x24_empathy-busy.png \
+ hicolor_status_24x24_empathy-extended-away.png \
+ hicolor_status_24x24_empathy-offline.png \
+ hicolor_status_24x24_empathy-pending.png \
+ hicolor_status_32x32_empathy-available.png \
+ hicolor_status_32x32_empathy-away.png \
+ hicolor_status_32x32_empathy-busy.png \
+ hicolor_status_32x32_empathy-extended-away.png \
+ hicolor_status_32x32_empathy-offline.png \
+ hicolor_status_32x32_empathy-pending.png \
+ hicolor_status_48x48_empathy-available.png \
+ hicolor_status_48x48_empathy-away.png \
+ hicolor_status_48x48_empathy-busy.png \
+ hicolor_status_48x48_empathy-extended-away.png \
+ hicolor_status_48x48_empathy-offline.png \
+ hicolor_status_48x48_empathy-pending.png \
+ hicolor_status_scalable_empathy-available.svg \
+ hicolor_status_scalable_empathy-away.svg \
+ hicolor_status_scalable_empathy-busy.svg \
+ hicolor_status_scalable_empathy-extended-away.svg \
+ hicolor_status_scalable_empathy-offline.svg \
+ hicolor_status_scalable_empathy-pending.svg \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(public_icons) \
+ $(private_icons) \
+ $(NULL)
+
+###############################################################################
+
+gtk_update_icon_cache = gtk-update-icon-cache -f -t
+
+update-icon-cache:
+ @-if test -z "$(DESTDIR)"; then \
+ echo "Updating Gtk icon cache."; \
+ for theme in $(public_icons_themes); do \
+ $(gtk_update_icon_cache) $(datadir)/icons/$$theme; \
+ done; \
+ else \
+ echo "*** Icon cache not updated. After (un)install, run this:"; \
+ for theme in $(public_icons_themes); do \
+ echo "*** $(gtk_update_icon_cache) $(datadir)/icons/$$theme"; \
+ done; \
+ fi
+
+install-icons:
+ for icon in $(public_icons); do \
+ THEME=`echo $$icon | cut -d_ -f1`; \
+ CONTEXT=`echo $$icon | cut -d_ -f2`; \
+ SIZE=`echo $$icon | cut -d_ -f3`; \
+ ICONFILE=`echo $$icon | cut -d_ -f4`; \
+ mkdir -p $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \
+ $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \
+ done; \
+ for icon in $(private_icons); do \
+ THEME=`echo $$icon | cut -d_ -f1`; \
+ CONTEXT=`echo $$icon | cut -d_ -f2`; \
+ SIZE=`echo $$icon | cut -d_ -f3`; \
+ ICONFILE=`echo $$icon | cut -d_ -f4`; \
+ mkdir -p $(DESTDIR)$(pkgdatadir)/icons/$$THEME/$$SIZE/$$CONTEXT; \
+ $(INSTALL_DATA) $(srcdir)/$$icon $(DESTDIR)$(pkgdatadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \
+ done
+
+uninstall-icons:
+ -for icon in $(public_icons); do \
+ THEME=`echo $$icon | cut -d_ -f1`; \
+ CONTEXT=`echo $$icon | cut -d_ -f2`; \
+ SIZE=`echo $$icon | cut -d_ -f3`; \
+ ICONFILE=`echo $$icon | cut -d_ -f4`; \
+ rm -f $(DESTDIR)$(datadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \
+ done; \
+ for icon in $(private_icons); do \
+ THEME=`echo $$icon | cut -d_ -f1`; \
+ CONTEXT=`echo $$icon | cut -d_ -f2`; \
+ SIZE=`echo $$icon | cut -d_ -f3`; \
+ ICONFILE=`echo $$icon | cut -d_ -f4`; \
+ rm -f $(DESTDIR)$(pkgdatadir)/icons/$$THEME/$$SIZE/$$CONTEXT/$$ICONFILE; \
+ done
+
+install-data-local: install-icons update-icon-cache
+
+uninstall-local: uninstall-icons update-icon-cache
diff --git a/trunk/data/icons/generate-png.sh b/trunk/data/icons/generate-png.sh
new file mode 100755
index 000000000..ce6d585c5
--- /dev/null
+++ b/trunk/data/icons/generate-png.sh
@@ -0,0 +1,15 @@
+#! /bin/sh
+
+for F in *.svg
+do
+ for S in "16" "22" "24" "32" "48"
+ do
+ SIZE="$S"x"$S"
+ D=$(echo $F | sed -e "s/scalable/$SIZE/g" | sed -e "s/.svg/.png/")
+ if [ ! -e $D ]
+ then
+ inkscape --export-png=$D -w $S -h $S $F
+ fi
+ done
+
+done
diff --git a/trunk/data/icons/hicolor_actions_16x16_im-message-new.png b/trunk/data/icons/hicolor_actions_16x16_im-message-new.png
new file mode 100644
index 000000000..da01aff75
--- /dev/null
+++ b/trunk/data/icons/hicolor_actions_16x16_im-message-new.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_actions_22x22_im-message-new.png b/trunk/data/icons/hicolor_actions_22x22_im-message-new.png
new file mode 100644
index 000000000..f75737ff2
--- /dev/null
+++ b/trunk/data/icons/hicolor_actions_22x22_im-message-new.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_actions_24x24_im-message-new.png b/trunk/data/icons/hicolor_actions_24x24_im-message-new.png
new file mode 100644
index 000000000..70f7a6622
--- /dev/null
+++ b/trunk/data/icons/hicolor_actions_24x24_im-message-new.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_16x16_empathy.png b/trunk/data/icons/hicolor_apps_16x16_empathy.png
new file mode 100644
index 000000000..2d91a6f4e
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_16x16_empathy.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_16x16_im-ekiga.png b/trunk/data/icons/hicolor_apps_16x16_im-ekiga.png
new file mode 100644
index 000000000..1bce97d3c
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_16x16_im-ekiga.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_16x16_im-gizmo.png b/trunk/data/icons/hicolor_apps_16x16_im-gizmo.png
new file mode 100644
index 000000000..a465cf9cf
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_16x16_im-gizmo.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_16x16_im-google-talk.png b/trunk/data/icons/hicolor_apps_16x16_im-google-talk.png
new file mode 100644
index 000000000..822eb3d8f
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_16x16_im-google-talk.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_16x16_im-irc.png b/trunk/data/icons/hicolor_apps_16x16_im-irc.png
new file mode 100644
index 000000000..622b74d28
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_16x16_im-irc.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_16x16_im-local-xmpp.png b/trunk/data/icons/hicolor_apps_16x16_im-local-xmpp.png
new file mode 100644
index 000000000..956e090c7
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_16x16_im-local-xmpp.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_16x16_im-msn.png b/trunk/data/icons/hicolor_apps_16x16_im-msn.png
new file mode 100644
index 000000000..ebd6e2cd2
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_16x16_im-msn.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_16x16_im-sip.png b/trunk/data/icons/hicolor_apps_16x16_im-sip.png
new file mode 100644
index 000000000..38339af36
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_16x16_im-sip.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_16x16_im-xmpp.png b/trunk/data/icons/hicolor_apps_16x16_im-xmpp.png
new file mode 100644
index 000000000..334d172ca
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_16x16_im-xmpp.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_22x22_empathy.png b/trunk/data/icons/hicolor_apps_22x22_empathy.png
new file mode 100644
index 000000000..f3961ceac
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_22x22_empathy.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_22x22_im-ekiga.png b/trunk/data/icons/hicolor_apps_22x22_im-ekiga.png
new file mode 100644
index 000000000..140fdabd6
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_22x22_im-ekiga.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_22x22_im-gizmo.png b/trunk/data/icons/hicolor_apps_22x22_im-gizmo.png
new file mode 100644
index 000000000..5141337f4
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_22x22_im-gizmo.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_22x22_im-google-talk.png b/trunk/data/icons/hicolor_apps_22x22_im-google-talk.png
new file mode 100644
index 000000000..9246ed343
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_22x22_im-google-talk.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_22x22_im-irc.png b/trunk/data/icons/hicolor_apps_22x22_im-irc.png
new file mode 100644
index 000000000..8da583227
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_22x22_im-irc.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_22x22_im-local-xmpp.png b/trunk/data/icons/hicolor_apps_22x22_im-local-xmpp.png
new file mode 100644
index 000000000..4f363c744
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_22x22_im-local-xmpp.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_22x22_im-msn.png b/trunk/data/icons/hicolor_apps_22x22_im-msn.png
new file mode 100644
index 000000000..c1baa2160
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_22x22_im-msn.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_22x22_im-sip.png b/trunk/data/icons/hicolor_apps_22x22_im-sip.png
new file mode 100644
index 000000000..2aebd81ff
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_22x22_im-sip.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_22x22_im-xmpp.png b/trunk/data/icons/hicolor_apps_22x22_im-xmpp.png
new file mode 100644
index 000000000..b76e85b55
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_22x22_im-xmpp.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_24x24_empathy.png b/trunk/data/icons/hicolor_apps_24x24_empathy.png
new file mode 100644
index 000000000..939716a26
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_24x24_empathy.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_24x24_im-ekiga.png b/trunk/data/icons/hicolor_apps_24x24_im-ekiga.png
new file mode 100644
index 000000000..c20bf5215
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_24x24_im-ekiga.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_24x24_im-gizmo.png b/trunk/data/icons/hicolor_apps_24x24_im-gizmo.png
new file mode 100644
index 000000000..0127ce796
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_24x24_im-gizmo.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_24x24_im-google-talk.png b/trunk/data/icons/hicolor_apps_24x24_im-google-talk.png
new file mode 100644
index 000000000..04d0539e7
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_24x24_im-google-talk.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_24x24_im-irc.png b/trunk/data/icons/hicolor_apps_24x24_im-irc.png
new file mode 100644
index 000000000..88efe0277
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_24x24_im-irc.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_24x24_im-local-xmpp.png b/trunk/data/icons/hicolor_apps_24x24_im-local-xmpp.png
new file mode 100644
index 000000000..6117bd95f
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_24x24_im-local-xmpp.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_24x24_im-msn.png b/trunk/data/icons/hicolor_apps_24x24_im-msn.png
new file mode 100644
index 000000000..11bb9d4cc
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_24x24_im-msn.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_24x24_im-sip.png b/trunk/data/icons/hicolor_apps_24x24_im-sip.png
new file mode 100644
index 000000000..9eee01036
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_24x24_im-sip.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_24x24_im-xmpp.png b/trunk/data/icons/hicolor_apps_24x24_im-xmpp.png
new file mode 100644
index 000000000..94f34d33c
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_24x24_im-xmpp.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_32x32_empathy.png b/trunk/data/icons/hicolor_apps_32x32_empathy.png
new file mode 100644
index 000000000..cd58a7134
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_32x32_empathy.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_32x32_im-ekiga.png b/trunk/data/icons/hicolor_apps_32x32_im-ekiga.png
new file mode 100644
index 000000000..02c2b7268
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_32x32_im-ekiga.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_32x32_im-gizmo.png b/trunk/data/icons/hicolor_apps_32x32_im-gizmo.png
new file mode 100644
index 000000000..b9811b641
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_32x32_im-gizmo.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_32x32_im-google-talk.png b/trunk/data/icons/hicolor_apps_32x32_im-google-talk.png
new file mode 100644
index 000000000..4d08551d9
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_32x32_im-google-talk.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_32x32_im-irc.png b/trunk/data/icons/hicolor_apps_32x32_im-irc.png
new file mode 100644
index 000000000..a0d9e04e7
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_32x32_im-irc.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_32x32_im-local-xmpp.png b/trunk/data/icons/hicolor_apps_32x32_im-local-xmpp.png
new file mode 100644
index 000000000..dcc4d2373
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_32x32_im-local-xmpp.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_32x32_im-msn.png b/trunk/data/icons/hicolor_apps_32x32_im-msn.png
new file mode 100644
index 000000000..09613e8d5
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_32x32_im-msn.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_32x32_im-sip.png b/trunk/data/icons/hicolor_apps_32x32_im-sip.png
new file mode 100644
index 000000000..6f3a06036
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_32x32_im-sip.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_32x32_im-xmpp.png b/trunk/data/icons/hicolor_apps_32x32_im-xmpp.png
new file mode 100644
index 000000000..18e54bf12
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_32x32_im-xmpp.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_48x48_empathy.png b/trunk/data/icons/hicolor_apps_48x48_empathy.png
new file mode 100644
index 000000000..393015ba3
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_48x48_empathy.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_48x48_im-ekiga.png b/trunk/data/icons/hicolor_apps_48x48_im-ekiga.png
new file mode 100644
index 000000000..d301aad5e
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_48x48_im-ekiga.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_48x48_im-gizmo.png b/trunk/data/icons/hicolor_apps_48x48_im-gizmo.png
new file mode 100644
index 000000000..212907c58
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_48x48_im-gizmo.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_48x48_im-google-talk.png b/trunk/data/icons/hicolor_apps_48x48_im-google-talk.png
new file mode 100644
index 000000000..de3cc4bce
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_48x48_im-google-talk.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_48x48_im-irc.png b/trunk/data/icons/hicolor_apps_48x48_im-irc.png
new file mode 100644
index 000000000..a27149115
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_48x48_im-irc.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_48x48_im-local-xmpp.png b/trunk/data/icons/hicolor_apps_48x48_im-local-xmpp.png
new file mode 100644
index 000000000..9e8141abe
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_48x48_im-local-xmpp.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_48x48_im-msn.png b/trunk/data/icons/hicolor_apps_48x48_im-msn.png
new file mode 100644
index 000000000..124b27b98
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_48x48_im-msn.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_48x48_im-sip.png b/trunk/data/icons/hicolor_apps_48x48_im-sip.png
new file mode 100644
index 000000000..84d2609c1
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_48x48_im-sip.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_48x48_im-xmpp.png b/trunk/data/icons/hicolor_apps_48x48_im-xmpp.png
new file mode 100644
index 000000000..d0a69c00a
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_48x48_im-xmpp.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_apps_scalable_empathy.svg b/trunk/data/icons/hicolor_apps_scalable_empathy.svg
new file mode 100644
index 000000000..875c0ef0a
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_scalable_empathy.svg
@@ -0,0 +1,261 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="120"
+ height="120"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.43"
+ sodipodi:docbase="/home/kikidonk"
+ sodipodi:docname="telepathy.svg"
+ version="1.0">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2299">
+ <stop
+ style="stop-color:#729fcf"
+ offset="0"
+ id="stop2301" />
+ <stop
+ style="stop-color:#204a87"
+ offset="1"
+ id="stop2303" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2277">
+ <stop
+ style="stop-color:#729fcf"
+ offset="0"
+ id="stop2279" />
+ <stop
+ style="stop-color:#204a87"
+ offset="1"
+ id="stop2281" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2248">
+ <stop
+ style="stop-color:#729fcf"
+ offset="0"
+ id="stop2250" />
+ <stop
+ style="stop-color:#204a87"
+ offset="1"
+ id="stop2252" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2316">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop2318" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop2320" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2316"
+ id="radialGradient1455"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.446154,-9.531266e-14,218.1391)"
+ cx="37.5"
+ cy="393.86218"
+ fx="37.5"
+ fy="393.86218"
+ r="32.5" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2316"
+ id="radialGradient1457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.446154,3.441346e-14,218.1391)"
+ cx="37.5"
+ cy="393.86218"
+ fx="37.5"
+ fy="393.86218"
+ r="32.5" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2248"
+ id="radialGradient1459"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.868658,-0.148746,0.168018,2.110777,-257.031,-963.2931)"
+ cx="152.6485"
+ cy="532.39001"
+ fx="152.6485"
+ fy="532.39001"
+ r="29.863501" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2248"
+ id="radialGradient1461"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.550415,-4.746643e-6,6.036308e-6,1.971663,-152.6655,-900.8159)"
+ cx="209.66589"
+ cy="518.98993"
+ fx="209.66589"
+ fy="518.98993"
+ r="21.839567" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2277"
+ id="linearGradient1463"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-35,-392)"
+ x1="156.27637"
+ y1="519.47235"
+ x2="168.11945"
+ y2="588.41528" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2299"
+ id="linearGradient1465"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-35,-392)"
+ x1="210.31523"
+ y1="513.20483"
+ x2="218.00374"
+ y2="561.11133" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1"
+ inkscape:cx="391.86649"
+ inkscape:cy="58.28661"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ fill="#edd400"
+ stroke="#edd400"
+ inkscape:window-width="1014"
+ inkscape:window-height="693"
+ inkscape:window-x="0"
+ inkscape:window-y="25" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g1350"
+ transform="translate(-86.71068,-84.05382)">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.34302326;fill:url(#radialGradient1455);fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path2324"
+ sodipodi:cx="37.5"
+ sodipodi:cy="393.86218"
+ sodipodi:rx="32.5"
+ sodipodi:ry="14.5"
+ d="M 70 393.86218 A 32.5 14.5 0 1 1 5,393.86218 A 32.5 14.5 0 1 1 70 393.86218 z"
+ transform="matrix(0.553846,0,0,0.769231,155.2308,-139.4549)" />
+ <path
+ transform="matrix(0.753846,0,0,1,103.2308,-206)"
+ d="M 70 393.86218 A 32.5 14.5 0 1 1 5,393.86218 A 32.5 14.5 0 1 1 70 393.86218 z"
+ sodipodi:ry="14.5"
+ sodipodi:rx="32.5"
+ sodipodi:cy="393.86218"
+ sodipodi:cx="37.5"
+ id="path2314"
+ style="opacity:0.34883722;fill:url(#radialGradient1457);fill-opacity:1;stroke:none;stroke-width:5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#babdb6;stroke:none;stroke-width:3.83500004;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path2284"
+ sodipodi:cx="466.5"
+ sodipodi:cy="225.86218"
+ sodipodi:rx="13.5"
+ sodipodi:ry="13.5"
+ d="M 480 225.86218 A 13.5 13.5 0 1 1 453,225.86218 A 13.5 13.5 0 1 1 480 225.86218 z"
+ transform="matrix(0.239488,0,0,0.239488,6.4093,56.699)" />
+ <path
+ style="fill:url(#radialGradient1459);fill-opacity:1;stroke:#204a87;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 150.2161,142.69583 C 144.93306,149.11959 157.74053,160.99323 155.32886,164.76875 C 151.71258,170.43013 145.72673,166.37911 146.5107,170.91369 C 147.10639,174.35931 146.90129,177.59442 143.94504,179.55357 C 146.05169,185.93861 138.60199,192.13547 135.06149,192.88614 C 120.89943,195.8888 101.90698,167.7371 98.90432,153.57504 C 95.90165,139.41298 104.95855,125.4822 119.1206,122.47955 C 133.28265,119.47688 147.21343,128.53378 150.2161,142.69583 z "
+ id="path2286"
+ sodipodi:nodetypes="csscsssc" />
+ <path
+ sodipodi:nodetypes="csscsssc"
+ id="path2288"
+ d="M 161.93542,131.68159 C 165.74994,136.31974 156.62403,144.65072 158.36534,147.37677 C 160.97641,151.46447 165.17688,148.78167 164.61083,152.05578 C 164.18072,154.54363 164.32882,156.87948 166.46332,158.29405 C 164.94226,162.90425 170.26698,167.13724 172.82334,167.67925 C 183.04881,169.84727 196.81615,149.76218 198.98416,139.53672 C 201.15218,129.31126 194.61282,119.25279 184.38736,117.08478 C 174.16191,114.91676 164.10344,121.45613 161.93542,131.68159 z "
+ style="fill:url(#radialGradient1461);fill-opacity:1;stroke:#204a87;stroke-width:3;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ transform="matrix(0.448469,0,0,0.448469,-80.909,-3.4852)"
+ d="M 480 225.86218 A 13.5 13.5 0 1 1 453,225.86218 A 13.5 13.5 0 1 1 480 225.86218 z"
+ sodipodi:ry="13.5"
+ sodipodi:rx="13.5"
+ sodipodi:cy="225.86218"
+ sodipodi:cx="466.5"
+ id="path2290"
+ style="fill:#babdb6;stroke:none;stroke-width:3.83500004;stroke-miterlimit:4;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#babdb6;stroke:none;stroke-width:3.83500004;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path2292"
+ sodipodi:cx="466.5"
+ sodipodi:cy="225.86218"
+ sodipodi:rx="13.5"
+ sodipodi:ry="13.5"
+ d="M 480 225.86218 A 13.5 13.5 0 1 1 453,225.86218 A 13.5 13.5 0 1 1 480 225.86218 z"
+ transform="matrix(0.376714,0,0,0.376714,-29.9988,8.3624)" />
+ <path
+ transform="matrix(0.269082,0,0,0.269082,35.2264,38.422)"
+ d="M 480 225.86218 A 13.5 13.5 0 1 1 453,225.86218 A 13.5 13.5 0 1 1 480 225.86218 z"
+ sodipodi:ry="13.5"
+ sodipodi:rx="13.5"
+ sodipodi:cy="225.86218"
+ sodipodi:cx="466.5"
+ id="path2294"
+ style="fill:#babdb6;stroke:none;stroke-width:3.83500004;stroke-miterlimit:4;stroke-dasharray:none"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#babdb6;stroke:none;stroke-width:3.83500004;stroke-miterlimit:4;stroke-dasharray:none"
+ id="path2296"
+ sodipodi:cx="466.5"
+ sodipodi:cy="225.86218"
+ sodipodi:rx="13.5"
+ sodipodi:ry="13.5"
+ d="M 480 225.86218 A 13.5 13.5 0 1 1 453,225.86218 A 13.5 13.5 0 1 1 480 225.86218 z"
+ transform="matrix(0.197327,0,0,0.197327,75.481,66.2218)" />
+ <path
+ id="path2268"
+ d="M 123.28125,123.9375 C 108.01533,124.16246 96.09738,141.26171 101.5625,155.78125 C 106.70498,169.34648 115.09976,183.17694 128.25,190.0625 C 135.00162,194.17566 144.81961,185.96654 141.5625,178.71875 C 146.27103,177.08945 143.82074,171.72239 144.9375,168.21875 C 146.8342,165.06946 153.71771,167.38783 153.46875,162.65625 C 150.74411,156.2047 144.57132,149.09618 147.96875,141.84375 C 145.2653,131.11182 134.46054,123.15696 123.28125,123.9375 z "
+ style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient1463);stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path2291"
+ d="M 179.75,118.6875 C 172.45096,118.90303 164.83544,124.65883 164.375,131.90625 C 166.6736,137.32257 160.94739,141.95547 160.375,146.71875 C 162.45612,148.7109 167.71064,148.079 166.59375,152.46875 C 165.32221,155.0163 168.12471,156.86409 168.52359,158.40373 C 166.89871,163.94225 174.72741,168.088 178.96875,164.46875 C 188.37541,158.20668 195.59314,147.55282 197.375,136.46875 C 198.06704,126.67227 189.35755,118.04285 179.75,118.6875 z "
+ style="fill:none;fill-opacity:1;stroke:url(#linearGradient1465);stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/trunk/data/icons/hicolor_apps_scalable_im-ekiga.svg b/trunk/data/icons/hicolor_apps_scalable_im-ekiga.svg
new file mode 100644
index 000000000..78a9e7344
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_scalable_im-ekiga.svg
@@ -0,0 +1,441 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.43"
+ width="48"
+ height="48"
+ version="1.0"
+ sodipodi:docbase="/home/vinicius/tango-icon-theme-code/protocols/scalable"
+ sodipodi:docname="ekiga.svg"
+ inkscape:export-filename="/home/vinicius/tango-icon-theme-code/protocols/48x48/ekiga.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Ekiga Icon</dc:title>
+ <dc:date>2006-12-05</dc:date>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Vinicius Scopel Depizzol</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Ekiga</rdf:li>
+ <rdf:li>VOIP</rdf:li>
+ <rdf:li>protocol</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <dc:source>vdepizzol@gmail.com</dc:source>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Original Artwork by Jakub Steiner &lt;jimmac_at_ximian.com&gt; and Andreas Kwiatkowski &lt;post_at_kwiat.org&gt;</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs5">
+ <linearGradient
+ id="linearGradient4182">
+ <stop
+ style="stop-color:#c03b00;stop-opacity:1;"
+ offset="0"
+ id="stop4184" />
+ <stop
+ style="stop-color:#e74700;stop-opacity:1;"
+ offset="1"
+ id="stop4186" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient9234">
+ <stop
+ style="stop-color:#f57900;stop-opacity:1;"
+ offset="0"
+ id="stop9236" />
+ <stop
+ style="stop-color:#f57900;stop-opacity:0;"
+ offset="1"
+ id="stop9238" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient9208">
+ <stop
+ style="stop-color:#ffe000;stop-opacity:1;"
+ offset="0"
+ id="stop9210" />
+ <stop
+ style="stop-color:#ffe000;stop-opacity:0;"
+ offset="1"
+ id="stop9212" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient9200">
+ <stop
+ style="stop-color:#ffe84a;stop-opacity:1;"
+ offset="0"
+ id="stop9202" />
+ <stop
+ style="stop-color:#ffe84a;stop-opacity:0;"
+ offset="1"
+ id="stop9204" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6839">
+ <stop
+ style="stop-color:#000000;stop-opacity:0.40170941;"
+ offset="0"
+ id="stop6841" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop6843" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6839"
+ id="radialGradient6845"
+ cx="14.980188"
+ cy="24.437885"
+ fx="14.980188"
+ fy="24.437885"
+ r="10.15484"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient4175">
+ <stop
+ style="stop-color:#fff6b8;stop-opacity:1;"
+ offset="0"
+ id="stop4177" />
+ <stop
+ style="stop-color:#ffef81;stop-opacity:1;"
+ offset="1"
+ id="stop4179" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4201">
+ <stop
+ style="stop-color:#fcaf3e;stop-opacity:1;"
+ offset="0"
+ id="stop4203" />
+ <stop
+ style="stop-color:#fce94f;stop-opacity:1;"
+ offset="1"
+ id="stop4205" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4189">
+ <stop
+ style="stop-color:#e26f00;stop-opacity:1;"
+ offset="0"
+ id="stop4191" />
+ <stop
+ style="stop-color:#ffae19;stop-opacity:1;"
+ offset="1"
+ id="stop4193" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4189"
+ id="linearGradient4195"
+ x1="1.9788086"
+ y1="7.5118856"
+ x2="14.918759"
+ y2="7.5118856"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4201"
+ id="linearGradient4207"
+ x1="7.2169476"
+ y1="13.272759"
+ x2="7.2169476"
+ y2="4.5926571"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4175"
+ id="linearGradient4181"
+ x1="3.0193484"
+ y1="10.118958"
+ x2="18.965513"
+ y2="10.118958"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.386673,0,0,1.476386,40.03261,-0.243111)" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="9.3426504"
+ x2="7.2169476"
+ y1="15.416203"
+ x1="7.2169476"
+ id="linearGradient6051"
+ xlink:href="#linearGradient4201"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientUnits="userSpaceOnUse"
+ y2="7.5118856"
+ x2="14.918759"
+ y1="7.5118856"
+ x1="-0.48486361"
+ id="linearGradient6049"
+ xlink:href="#linearGradient4189"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient6043">
+ <stop
+ id="stop6045"
+ offset="0"
+ style="stop-color:#f57900;stop-opacity:1;" />
+ <stop
+ id="stop6047"
+ offset="1"
+ style="stop-color:#edd400;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6037">
+ <stop
+ id="stop6039"
+ offset="0"
+ style="stop-color:#fcaf3e;stop-opacity:1;" />
+ <stop
+ id="stop6041"
+ offset="1"
+ style="stop-color:#fce94f;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4189"
+ id="linearGradient7026"
+ gradientUnits="userSpaceOnUse"
+ x1="1.9788086"
+ y1="7.5118856"
+ x2="14.918759"
+ y2="7.5118856" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4201"
+ id="linearGradient7028"
+ gradientUnits="userSpaceOnUse"
+ x1="7.2169476"
+ y1="13.272759"
+ x2="7.2169476"
+ y2="4.5926571" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4175"
+ id="linearGradient7030"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.834083,0,0,1.952742,2.880761,0.516054)"
+ x1="3.0193484"
+ y1="10.118958"
+ x2="18.965513"
+ y2="10.118958" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9200"
+ id="radialGradient9206"
+ cx="18.627844"
+ cy="11.901631"
+ fx="18.627844"
+ fy="11.901631"
+ r="0.75130093"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9208"
+ id="linearGradient9214"
+ x1="22"
+ y1="4.8000002"
+ x2="22"
+ y2="14.141901"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9234"
+ id="linearGradient9240"
+ x1="20.4"
+ y1="38.666668"
+ x2="20.4"
+ y2="27.292307"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6839"
+ id="radialGradient10116"
+ gradientUnits="userSpaceOnUse"
+ cx="14.980188"
+ cy="24.437885"
+ fx="14.980188"
+ fy="24.437885"
+ r="10.15484" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4182"
+ id="linearGradient4188"
+ x1="6.4635968"
+ y1="13.196473"
+ x2="6.4635968"
+ y2="2.4294622"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-height="714"
+ inkscape:window-width="1014"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ fill="#fce94f"
+ showborder="false"
+ inkscape:zoom="8.6290323"
+ inkscape:cx="23.5"
+ inkscape:cy="25"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#radialGradient10116);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5964"
+ sodipodi:cx="14.980188"
+ sodipodi:cy="24.437885"
+ sodipodi:rx="10.15484"
+ sodipodi:ry="10.15484"
+ d="M 25.135029,24.437885 A 10.15484,10.15484 0 1 1 25.134977,24.405482"
+ sodipodi:start="0"
+ sodipodi:end="6.2799944"
+ sodipodi:open="true"
+ transform="matrix(2.067979,0,0,0.608807,-6.97872,24.95253)" />
+ <path
+ transform="matrix(2.840536,0,0,2.792929,3.5,1.019835)"
+ sodipodi:open="true"
+ sodipodi:end="6.2799944"
+ sodipodi:start="0"
+ d="M 14.433895,7.5118856 A 7.2169476,7.3399639 0 1 1 14.433858,7.4884645"
+ sodipodi:ry="7.3399639"
+ sodipodi:rx="7.2169476"
+ sodipodi:cy="7.5118856"
+ sodipodi:cx="7.2169476"
+ id="path7012"
+ style="opacity:1;fill:url(#linearGradient7026);fill-opacity:1;fill-rule:nonzero;stroke:#ce5c00;stroke-width:0.35503393;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient7028);stroke-width:0.37376186;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path7014"
+ sodipodi:cx="7.2169476"
+ sodipodi:cy="7.5118856"
+ sodipodi:rx="7.2169476"
+ sodipodi:ry="7.3399639"
+ d="M 14.433895,7.5118856 A 7.2169476,7.3399639 0 1 1 14.433858,7.4884645"
+ sodipodi:start="0"
+ sodipodi:end="6.2799944"
+ sodipodi:open="true"
+ transform="matrix(2.697833,0,0,2.653355,4.547512,2.079533)" />
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path7016"
+ d="M 8.190342,20.708311 C 8.1703537,6.3038993 26.116033,6.5569734 32.543918,12.445493 C 34.538426,14.694763 39.001539,13.044543 36.468666,10.166093 C 26.135035,-1.3618941 6.8962804,7.319666 8.190342,20.708311 z "
+ style="fill:url(#linearGradient9214);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient9240);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 39.50447,27.299343 C 34.800073,42.327963 18.308682,36.589906 13.714704,29.331934 C 12.405002,26.672122 7.6414067,27.175936 9.2985796,30.574998 C 16.11864,44.234304 37.082702,40.547881 39.50447,27.299343 z "
+ id="path7018"
+ sodipodi:nodetypes="cccc" />
+ <g
+ id="g9460"
+ transform="matrix(2.817613,0,0,2.817614,5.536697,-0.485289)"
+ style="fill:url(#linearGradient4188);fill-opacity:1.0">
+ <path
+ sodipodi:nodetypes="ccczccz"
+ id="path7707"
+ d="M 9.4516821,8.5573773 C 8.0906341,14.152458 5.7954321,13.026127 5.7954321,13.026127 C 5.4199681,12.717591 5.5573131,10.821517 5.9204321,10.338627 C 6.4032901,10.359871 6.8077121,10.615882 7.5766821,8.2448773 C 8.3364881,5.9021301 7.7927181,5.5778374 7.2641821,5.3073773 C 7.2333031,4.3181647 7.9730301,3.1933083 8.5141821,2.9323773 C 8.5141821,2.9323773 10.805552,2.9918052 9.4516821,8.5573773 z "
+ style="fill:url(#linearGradient4188);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cczc"
+ id="path8582"
+ d="M 7.6134826,2.5599675 C 7.0256447,3.2228687 6.6494921,4.0864896 6.3947326,4.9974675 C 6.3947326,4.9974675 5.3695628,4.2706896 5.9122078,3.1548276 C 6.4668958,2.0142026 7.6134826,2.5599675 7.6134826,2.5599675 z "
+ style="fill:url(#linearGradient4188);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient4188);fill-opacity:1.0;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 5.1155026,10.157887 C 4.6936596,10.9488 4.6380996,11.855502 4.9488216,12.877993 C 4.9488216,12.877993 3.8683676,12.975254 3.8070878,11.427205 C 3.7458441,9.8800695 5.1155026,10.157887 5.1155026,10.157887 z "
+ id="path9458"
+ sodipodi:nodetypes="cczc" />
+ </g>
+ <path
+ sodipodi:nodetypes="czzzzzzzzzzzzz"
+ id="path7020"
+ d="M 9.0604191,23.857192 C 9.4543105,22.162722 9.4344575,16.50586 10.635981,17.079314 C 11.837503,17.652767 12.731187,25.407262 13.866507,26.151005 C 15.001827,26.894747 14.438966,21.832866 15.177262,20.054285 C 15.915553,18.275704 15.88434,20.392276 16.819675,19.036687 C 17.755007,17.681096 17.884277,12.955766 18.918593,14.631925 C 19.952902,16.308085 19.832506,23.646286 20.956926,25.741328 C 22.081347,27.836373 22.25529,23.090771 23.416275,23.012099 C 24.577258,22.933426 24.929877,26.000093 25.600857,25.426642 C 26.271839,24.853188 25.668633,23.149805 26.100195,20.718288 C 26.531758,18.286769 26.152362,14.544639 27.327114,15.700572 C 28.501863,16.856505 29.420674,23.876311 30.799196,25.342011 C 32.177721,26.807713 31.28522,21.96476 32.841205,21.563372 C 34.397188,21.161984 35.977646,23.193191 37.02313,23.736462"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient7030);stroke-width:1.00000072;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
+ id="path7022"
+ d="M 37.354566,22.429081 L 35.878767,15.933146 L 36.999491,22.549082 L 35.244302,17.836985 L 36.640127,22.723508 L 31.971965,19.448256 L 36.21416,23.113311 L 29.851342,23.675425 L 35.99771,23.515425 L 32.274504,24.939635 L 36.094205,23.981004 L 32.162301,26.240773 L 36.265875,24.585235 L 36.83261,24.952157 L 35.63968,29.523554 L 37.467078,24.881774 L 38.860759,29.323486 L 38.035952,24.944655 L 40.463772,27.383077 L 38.487522,24.373507 L 42.36968,25.221191 L 38.647464,23.785811 L 41.969642,21.32736 L 38.607989,23.439655 L 42.891947,17.680662 L 38.365424,22.939468 L 40.066242,19.55044 L 37.893045,22.553891 L 38.035952,19.486981 L 37.354566,22.429081 z "
+ style="fill:#ffea53;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#radialGradient9206);fill-opacity:1.0;fill-rule:nonzero;stroke:none;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path8325"
+ sodipodi:cx="18.627844"
+ sodipodi:cy="11.901631"
+ sodipodi:rx="0.75130093"
+ sodipodi:ry="0.75130093"
+ d="M 19.379145,11.901631 A 0.75130093,0.75130093 0 1 1 19.379141,11.899234"
+ sodipodi:start="0"
+ sodipodi:end="6.2799944"
+ sodipodi:open="true"
+ transform="matrix(4.922224,0,0,4.923363,-54.3699,-34.85069)" />
+ <path
+ transform="matrix(1.952289,0,0,1.952741,0.95358,0.504567)"
+ sodipodi:open="true"
+ sodipodi:end="6.2799944"
+ sodipodi:start="0"
+ d="M 19.379145,11.901631 A 0.75130093,0.75130093 0 1 1 19.379141,11.899234"
+ sodipodi:ry="0.75130093"
+ sodipodi:rx="0.75130093"
+ sodipodi:cy="11.901631"
+ sodipodi:cx="18.627844"
+ id="path7024"
+ style="opacity:1;fill:#fcf5c7;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+</svg>
diff --git a/trunk/data/icons/hicolor_apps_scalable_im-gizmo.svg b/trunk/data/icons/hicolor_apps_scalable_im-gizmo.svg
new file mode 100644
index 000000000..0c6aa4a56
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_scalable_im-gizmo.svg
@@ -0,0 +1,269 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.43"
+ width="48"
+ height="48"
+ version="1.0"
+ sodipodi:docbase="/home/vinicius/tango-icon-theme-code/protocols/scalable"
+ sodipodi:docname="gizmo.svg"
+ inkscape:export-filename="/home/vinicius/tango-icon-theme-code/protocols/48x48/gizmo.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Gizmo Icon</dc:title>
+ <dc:date>2006-12-03</dc:date>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Vinicius Scopel Depizzol</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source>vdepizzol@gmail.com</dc:source>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Gizmo</rdf:li>
+ <rdf:li>VOIP</rdf:li>
+ <rdf:li>Protocol</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs5">
+ <linearGradient
+ id="linearGradient3297">
+ <stop
+ style="stop-color:#77d916;stop-opacity:1;"
+ offset="0"
+ id="stop3299" />
+ <stop
+ style="stop-color:#5eae12;stop-opacity:1;"
+ offset="1"
+ id="stop3301" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3289">
+ <stop
+ style="stop-color:#a9ea6a;stop-opacity:1;"
+ offset="0"
+ id="stop3291" />
+ <stop
+ style="stop-color:#a9ea6a;stop-opacity:0;"
+ offset="1"
+ id="stop3293" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3281">
+ <stop
+ style="stop-color:#4e9a06;stop-opacity:1;"
+ offset="0"
+ id="stop3283" />
+ <stop
+ style="stop-color:#3f7e04;stop-opacity:1;"
+ offset="1"
+ id="stop3285" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6839">
+ <stop
+ style="stop-color:#000000;stop-opacity:0.44444445;"
+ offset="0"
+ id="stop6841" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop6843" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5083">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.12820514;"
+ offset="0"
+ id="stop5085" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop5087" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3306">
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1;"
+ offset="0"
+ id="stop3308" />
+ <stop
+ style="stop-color:#6a6c67;stop-opacity:1;"
+ offset="1"
+ id="stop3310" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3298">
+ <stop
+ style="stop-color:#8c9d24;stop-opacity:1;"
+ offset="0"
+ id="stop3300" />
+ <stop
+ style="stop-color:#bed341;stop-opacity:1;"
+ offset="1"
+ id="stop3302" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6839"
+ id="radialGradient6845"
+ cx="14.980188"
+ cy="24.437885"
+ fx="14.980188"
+ fy="24.437885"
+ r="10.15484"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3306"
+ id="linearGradient7738"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.990582,0,0,1.956825,2.169514,0.111554)"
+ x1="12.148149"
+ y1="18.03125"
+ x2="9.9537039"
+ y2="4.03125" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5083"
+ id="linearGradient7742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.999449,0,0,1.932483,2.134045,0.270066)"
+ x1="6.7731481"
+ y1="11.25"
+ x2="6.7407408"
+ y2="5.0682869" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3281"
+ id="linearGradient3287"
+ x1="2.7307715"
+ y1="1.6338818"
+ x2="13.049995"
+ y2="14.486959"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3289"
+ id="linearGradient3295"
+ x1="3.371383"
+ y1="1.314895"
+ x2="12.589786"
+ y2="14.155007"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3297"
+ id="linearGradient3303"
+ x1="2.2912731"
+ y1="2.4371991"
+ x2="12.330816"
+ y2="14.125467"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-height="714"
+ inkscape:window-width="1014"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ fill="#3465a4"
+ showborder="false"
+ inkscape:zoom="1"
+ inkscape:cx="36.161682"
+ inkscape:cy="23.420561"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#radialGradient6845);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5964"
+ sodipodi:cx="14.980188"
+ sodipodi:cy="24.437885"
+ sodipodi:rx="10.15484"
+ sodipodi:ry="10.15484"
+ d="M 25.135029,24.437885 A 10.15484,10.15484 0 1 1 25.134977,24.405482"
+ sodipodi:start="0"
+ sodipodi:end="6.2799944"
+ sodipodi:open="true"
+ transform="matrix(2.051199,0,0,0.608807,-6.897747,25.47255)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#linearGradient3303);fill-opacity:1.0;fill-rule:nonzero;stroke:url(#linearGradient3287);stroke-width:0.37600183;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2396"
+ sodipodi:cx="7.7705202"
+ sodipodi:cy="7.8194256"
+ sodipodi:rx="7.6885095"
+ sodipodi:ry="7.7295151"
+ d="M 15.45903,7.8194256 A 7.6885095,7.7295151 0 1 1 15.458991,7.7947615"
+ sodipodi:start="0"
+ sodipodi:end="6.2799944"
+ sodipodi:open="true"
+ transform="matrix(2.666592,0,0,2.652552,3.27862,1.260023)" />
+ <path
+ transform="matrix(2.535942,0,0,2.522469,4.288207,2.275743)"
+ sodipodi:open="true"
+ sodipodi:end="6.2799944"
+ sodipodi:start="0"
+ d="M 15.45903,7.8194256 A 7.6885095,7.7295151 0 1 1 15.458991,7.7947615"
+ sodipodi:ry="7.7295151"
+ sodipodi:rx="7.6885095"
+ sodipodi:cy="7.8194256"
+ sodipodi:cx="7.7705202"
+ id="path3283"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3295);stroke-width:0.39538249;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ id="path7736"
+ d="M 21.080049,8 L 21.080049,14.543129 L 16.29021,9.8956732 L 12.06022,14.053922 L 16.787857,18.701379 L 10.131844,18.701379 L 10.131844,24.571849 L 16.850061,24.571849 L 12.06022,29.280455 L 16.29021,33.438705 L 21.080049,28.7301 L 21.080049,35.39553 L 27.051797,35.39553 L 27.051797,28.7301 L 31.77943,33.438705 L 36.009418,29.280455 L 31.219579,24.571849 L 38,24.571849 L 38,18.701379 L 31.281785,18.701379 L 36.009418,14.053922 L 31.77943,9.8956732 L 27.051797,14.543129 L 27.051797,8 L 21.080049,8 z M 23.257248,15.827294 C 23.505421,15.796251 23.809218,15.827294 24.065922,15.827294 C 27.345091,15.827294 29.964999,18.413075 29.975465,21.636614 C 29.975465,24.866732 27.351765,27.507084 24.065922,27.507084 C 20.780079,27.507084 18.094175,24.866732 18.094175,21.636614 C 18.094174,18.658849 20.328807,16.193583 23.257248,15.827294 z "
+ style="opacity:1;fill:url(#linearGradient7738);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path7740"
+ d="M 21.128819,8.06039 L 21.128819,14.522131 L 16.317642,9.9324832 L 12.068812,14.03901 L 16.817504,18.628659 L 10.131844,18.628659 L 10.131844,22.010504 C 12.983457,21.92907 15.635553,21.59813 18.129644,21.044263 C 18.357342,18.321118 20.535092,16.132273 23.315717,15.790324 C 23.346875,15.786492 23.407977,15.792419 23.440683,15.790324 C 23.657296,15.781469 23.91849,15.790324 24.127992,15.790324 C 25.70283,15.790324 27.131406,16.403207 28.189376,17.360466 C 28.203204,17.372979 28.238154,17.347826 28.251859,17.360466 C 30.661586,16.090491 32.883787,14.549219 35,12.951988 L 31.87586,9.9324832 L 27.127167,14.522131 L 27.127167,8.06039 L 21.128819,8.06039 z "
+ style="fill:url(#linearGradient7742);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+</svg>
diff --git a/trunk/data/icons/hicolor_apps_scalable_im-google-talk.svg b/trunk/data/icons/hicolor_apps_scalable_im-google-talk.svg
new file mode 100644
index 000000000..53d543309
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_scalable_im-google-talk.svg
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg2417"
+ sodipodi:version="0.32"
+ inkscape:version="0.43"
+ width="48"
+ height="48"
+ version="1.0"
+ sodipodi:docbase="/home/vinicius/tango-icon-theme-code/protocols/scalable"
+ sodipodi:docname="google-talk.svg"
+ inkscape:export-filename="/home/vinicius/tango-icon-theme-code/protocols/48x48/google-talk.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <metadata
+ id="metadata2422">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>Google Talk Icon</dc:title>
+ <dc:date>2006-12-03</dc:date>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Vinicius Scopel Depizzol</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source>vdepizzol@gmail.com</dc:source>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>Google Talk</rdf:li>
+ <rdf:li>GTalk</rdf:li>
+ <rdf:li>VOIP</rdf:li>
+ <rdf:li>Protocol</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs2420">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient6020">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop6022" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop6024" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3299">
+ <stop
+ style="stop-color:#000000;stop-opacity:0.11764706;"
+ offset="0"
+ id="stop3301" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3303" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3299"
+ id="radialGradient3305"
+ cx="15.993708"
+ cy="26.722889"
+ fx="15.993708"
+ fy="26.722889"
+ r="15.912521"
+ gradientTransform="matrix(1,0,0,0.295918,-3.769888e-16,18.8151)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient3527">
+ <stop
+ style="stop-color:#90ba1f;stop-opacity:1;"
+ offset="0"
+ id="stop3529" />
+ <stop
+ style="stop-color:#638205;stop-opacity:1;"
+ offset="1"
+ id="stop3531" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3518">
+ <stop
+ style="stop-color:#e7d000;stop-opacity:1;"
+ offset="0"
+ id="stop3520" />
+ <stop
+ style="stop-color:#c4a000;stop-opacity:1;"
+ offset="1"
+ id="stop3522" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3486">
+ <stop
+ style="stop-color:#ef2929;stop-opacity:1;"
+ offset="0"
+ id="stop3488" />
+ <stop
+ style="stop-color:#cc0000;stop-opacity:1;"
+ offset="1"
+ id="stop3490" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3510">
+ <stop
+ style="stop-color:#3465a4;stop-opacity:1;"
+ offset="0"
+ id="stop3512" />
+ <stop
+ style="stop-color:#204a87;stop-opacity:1;"
+ offset="1"
+ id="stop3514" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3286">
+ <stop
+ style="stop-color:#d1d1d1;stop-opacity:1;"
+ offset="0"
+ id="stop3288" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop3290" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3527"
+ id="linearGradient4249"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.465389,0,0,2.513895,-105.5963,47.11115)"
+ x1="55.483334"
+ y1="-14.40625"
+ x2="55.483334"
+ y2="-7.9999866" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3518"
+ id="linearGradient4252"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.901968,0,0,2.518653,-127.7063,47.25387)"
+ x1="53.162479"
+ y1="-14.322747"
+ x2="53.162479"
+ y2="-9.9868765" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3486"
+ id="linearGradient4255"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.48585,0,0,2.48585,-103.0483,47.16833)"
+ x1="49.45462"
+ y1="-12.934268"
+ x2="49.45462"
+ y2="-8.0529032" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3510"
+ id="linearGradient4258"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.48585,0,0,2.48585,-100.3774,47.19573)"
+ x1="45.5"
+ y1="-14"
+ x2="45.5"
+ y2="-8.1156492" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3286"
+ id="linearGradient4262"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.99378,0,0,2.99378,9.552849e-2,-0.965622)"
+ x1="8"
+ y1="15"
+ x2="8"
+ y2="0.9916327" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6020"
+ id="linearGradient6026"
+ x1="11.466431"
+ y1="11.008693"
+ x2="11.466431"
+ y2="15.000141"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6020"
+ id="linearGradient6030"
+ gradientUnits="userSpaceOnUse"
+ x1="11.466431"
+ y1="11.008693"
+ x2="11.466431"
+ y2="15.000141"
+ gradientTransform="matrix(1,0,0,1.75,0,-1.25)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3286"
+ id="linearGradient6052"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.99378,0,0,2.99378,-59.90447,-0.965622)"
+ x1="8"
+ y1="15"
+ x2="8"
+ y2="0.9916327" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-height="714"
+ inkscape:window-width="1014"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0"
+ borderopacity="1"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:zoom="1"
+ inkscape:cx="27.558407"
+ inkscape:cy="20.353863"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2417"
+ showborder="false"
+ inkscape:showpageshadow="false" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#radialGradient3305);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2424"
+ sodipodi:cx="15.993708"
+ sodipodi:cy="26.722889"
+ sodipodi:rx="15.912521"
+ sodipodi:ry="4.7088075"
+ d="M 31.906229,26.722889 A 15.912521,4.7088075 0 1 1 31.906148,26.707864"
+ sodipodi:start="0"
+ sodipodi:end="6.2799944"
+ sodipodi:open="true"
+ transform="matrix(1.45896,0,0,1.538545,0.742037,-1.869655)" />
+ <path
+ id="path3264"
+ d="M 21.80045,3.5250496 C 10.471905,4.3704822 1.592428,11.452408 1.592428,19.990844 C 1.592428,26.29506 6.3896918,31.807945 13.473996,34.585527 C 13.301077,37.113716 12.611393,40.274075 10.57377,42.444203 C 16.402876,42.263357 20.689781,39.28536 23.484452,36.456639 C 23.677129,36.460226 23.851935,36.456639 24.045787,36.456639 C 36.451938,36.456639 46.499142,29.098509 46.499142,19.990844 L 46.499142,19.897289 C 46.459634,10.808172 36.426737,3.5250496 24.045787,3.5250496 C 23.270404,3.5250496 22.555687,3.4686875 21.80045,3.5250496 z "
+ style="fill:url(#linearGradient4262);fill-opacity:1;fill-rule:nonzero;stroke:#797979;stroke-width:0.99999946;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ <path
+ sodipodi:nodetypes="ccccccccccccccccc"
+ id="path3552"
+ d="M 14.063569,10.992619 L 10.975162,10.992619 L 10.975162,15.008301 L 9,15.008301 L 9,18.010155 L 10.975162,18.010155 L 10.975162,24.823081 C 10.975162,28.316382 16.413217,26.749332 16.906897,25.946127 L 16.765885,23.742745 C 16.14428,24.364355 14.063569,24.882059 14.063569,24.09267 L 14.063569,18.010155 L 16.089796,18.010155 L 16.089796,15.008301 L 14.063569,15.008301 L 14.063569,11.090553 L 14.063569,11.090553 L 14.063569,10.992619 z "
+ style="fill:url(#linearGradient4258);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient4255);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 20.513467,15.031036 C 20.138171,15.089956 19.656414,15.165467 19.228078,15.318859 C 17.702481,15.865192 16.671718,16.778263 16.671718,16.778263 L 17.928902,19.157272 C 19.392632,18.022338 22.111019,16.595753 21.828421,20.24551 C 16.134551,19.714196 14.746648,23.348506 16.160515,25.369297 C 17.612211,27.444158 20.173876,27.641863 21.329645,26.185476 C 21.514145,25.952987 21.740964,25.678231 21.873764,25.369297 C 22.016347,25.75349 22.226874,26.072865 22.417883,26.321505 C 22.574471,26.517581 23.312178,27.152657 24.004897,27.137684 C 24.806193,27.120365 25.583813,26.58185 26,25.958759 C 25.645136,26.22137 24.252362,25.650216 24.231613,24.779835 L 24.231613,18.29575 C 24.142462,16.667478 22.425687,14.730825 20.513467,15.031036 z M 21.193616,23.328851 C 21.034551,24.122851 19.396586,24.681233 18.790423,24.326402 C 17.894487,23.801947 19.229645,22.393776 20.377437,22.376643 C 21.417389,22.361119 21.33274,22.634384 21.193616,23.328851 z "
+ id="path3554"
+ sodipodi:nodetypes="cscccsscsscccccsss" />
+ <path
+ id="path3558"
+ d="M 29,11 L 26.098032,11 L 26.098032,27.104637 L 29,27.104637 L 29,11 z "
+ style="fill:url(#linearGradient4252);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccccccccc"
+ id="path3560"
+ d="M 30,10.895363 L 30,19.851112 L 30,27 L 32.963722,27 L 32.963722,22.924045 L 36.561805,27.064163 L 38.705904,25.193137 L 34.676855,20.715264 L 38.705904,16.23739 L 36.754295,14.238037 L 32.968278,18.187047 C 32.968278,18.187047 32.963722,10.895363 32.963722,10.895363 L 30,10.895363 z "
+ style="fill:url(#linearGradient4249);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 21.84375,4.03125 C 16.273135,4.4469767 11.295199,6.3799921 7.75,9.25 C 4.204801,12.120008 2.09375,15.904106 2.09375,20 C 2.093752,26.050562 6.709849,31.401486 13.65625,34.125 C 13.889662,34.247612 13.966606,34.430582 13.96875,34.625 C 13.8154,36.867085 13.233839,39.586592 11.6875,41.78125 C 16.756159,41.27394 20.580438,38.669315 23.125,36.09375 C 23.324492,35.928053 23.831229,35.96875 24.03125,35.96875 C 30.135475,35.96875 35.660367,34.1562 39.625,31.25 C 43.589633,28.3438 46,24.369973 46,20 L 46,19.90625 C 45.981043,15.545078 43.55655,11.604324 39.59375,8.71875 C 35.63095,5.8331761 30.123683,4.03125 24.03125,4.03125 C 23.381564,4.0312499 22.681539,3.982177 21.84375,4.03125 z M 24.03125,5.03125 C 29.927599,5.03125 35.264412,6.757119 39.03125,9.5 C 42.798088,12.242881 44.982638,15.911852 45,19.90625 L 45,20 C 45,24.002253 42.800008,27.674883 39.03125,30.4375 C 35.262492,33.200117 29.937773,34.96875 24.03125,34.96875 C 23.079654,34.946683 22.695929,35.117383 22.40625,35.40625 C 20.316957,37.520999 17.387178,39.593629 13.59375,40.46875 C 14.470139,38.520138 14.848653,36.443413 14.96875,34.6875 C 15.010593,33.903846 14.715478,33.607465 14.03125,33.1875 C 7.360656,30.572123 3.093751,25.543254 3.09375,20 C 3.09375,16.250753 5.042528,12.754344 8.40625,10.03125 C 11.769972,7.3081563 16.52295,5.4329977 21.90625,5.03125 C 22.667268,4.9737265 23.342191,5.0312499 24.03125,5.03125 z "
+ id="path6054"
+ sodipodi:nodetypes="csscccccsccssccsccscscccsscs" />
+</svg>
diff --git a/trunk/data/icons/hicolor_apps_scalable_im-irc.svg b/trunk/data/icons/hicolor_apps_scalable_im-irc.svg
new file mode 100644
index 000000000..a4ee660e3
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_scalable_im-irc.svg
@@ -0,0 +1,785 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2"
+ inkscape:label="Pozadí"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docname="online.svg"
+ sodipodi:docbase="/home/cornelius/GFX/ikony/gajim/sources/iconsets/transports/irc/48x48"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ sodipodi:modified="true">
+ <defs
+ id="defs3">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5702">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop5704" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop5706" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4726">
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop4728" />
+ <stop
+ style="stop-color:#3465a4;stop-opacity:1"
+ offset="1"
+ id="stop4730" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4726"
+ id="linearGradient4732"
+ x1="3.7946429"
+ y1="7.0267859"
+ x2="13.392858"
+ y2="20.10984"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.8668106,0,0,2.8602375,1.0644378,6.9881155e-2)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5702"
+ id="radialGradient5708"
+ cx="15.625"
+ cy="29.767857"
+ fx="15.625"
+ fy="29.767857"
+ r="13.839286"
+ gradientTransform="matrix(1,0,0,7.0967742e-2,0,27.655299)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ r="21.035482"
+ fy="14.618562"
+ fx="24.687721"
+ cy="14.618562"
+ cx="24.687721"
+ gradientTransform="matrix(1.0297263,0,0,1.1788768,1.0605466,-1.8584828)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4947"
+ xlink:href="#linearGradient5816"
+ inkscape:collect="always" />
+ <radialGradient
+ r="19"
+ fy="23.537582"
+ fx="16.488304"
+ cy="23.537582"
+ cx="16.488304"
+ gradientTransform="matrix(1.451479,0,0,1.326922,19.216439,-40.879303)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4944"
+ xlink:href="#linearGradient3103"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="42.285942"
+ x2="15.571428"
+ y1="29.99917"
+ x1="15.571428"
+ gradientTransform="matrix(0.721659,0,0,0.722208,31.336441,-26.878246)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4941"
+ xlink:href="#linearGradient3106"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="42.285942"
+ x2="15.571428"
+ y1="29.99917"
+ x1="15.571428"
+ gradientTransform="matrix(0.721659,0,0,0.722208,32.779758,-26.878246)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4938"
+ xlink:href="#linearGradient3106"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="42.405006"
+ x2="38.465416"
+ y1="2"
+ x1="16"
+ gradientTransform="matrix(0.909689,0,0,0.916448,27.52517,-27.353841)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4935"
+ xlink:href="#linearGradient3951"
+ inkscape:collect="always" />
+ <radialGradient
+ r="9"
+ fy="22.17857"
+ fx="21.142859"
+ cy="22.17857"
+ cx="21.142859"
+ gradientTransform="matrix(0.764705,0,0,0.71453,30.987315,-32.88594)"
+ gradientUnits="userSpaceOnUse"
+ id="radialGradient4931"
+ xlink:href="#linearGradient3128"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="31.587952"
+ x2="32.927006"
+ y1="2"
+ x1="16"
+ gradientTransform="matrix(0.725295,0,0,0.682879,31.90823,-22.96952)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4927"
+ xlink:href="#linearGradient3951"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="38.499996"
+ x2="30.00001"
+ y1="31.785711"
+ x1="24.000008"
+ gradientTransform="matrix(0.514307,0,0,0.531053,37.022732,-26.679004)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4924"
+ xlink:href="#linearGradient3223"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="24.431168"
+ x2="27.055439"
+ y1="3.860764"
+ x1="17.725422"
+ gradientTransform="matrix(0.587733,0,0,0.453793,35.234662,-18.026032)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4921"
+ xlink:href="#linearGradient3951"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3106">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3108" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3110" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3121">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3123" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3125" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3103">
+ <stop
+ style="stop-color:#73d216;stop-opacity:1"
+ offset="0"
+ id="stop3105" />
+ <stop
+ style="stop-color:#4e9a06;stop-opacity:1"
+ offset="1"
+ id="stop3107" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3223">
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="0"
+ id="stop3225" />
+ <stop
+ style="stop-color:#396ea7;stop-opacity:1"
+ offset="1"
+ id="stop3227" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3128"
+ inkscape:collect="always">
+ <stop
+ id="stop3130"
+ offset="0"
+ style="stop-color:#fef291;stop-opacity:1" />
+ <stop
+ id="stop3132"
+ offset="1"
+ style="stop-color:#edd400;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3112">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3114" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3116" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3096">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3098" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3100" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3080">
+ <stop
+ style="stop-color:#ad7fa8;stop-opacity:1"
+ offset="0"
+ id="stop3082" />
+ <stop
+ style="stop-color:#75507b;stop-opacity:1"
+ offset="1"
+ id="stop3084" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3951"
+ id="linearGradient3957"
+ x1="16"
+ y1="2"
+ x2="32.927006"
+ y2="31.587952"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.725295,0,0,0.682879,-1.432029,1.826073)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3951">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3953" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3955" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3951"
+ id="linearGradient3092"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-1,3)"
+ x1="18.107143"
+ y1="53.76825"
+ x2="8.4828358"
+ y2="3.3976703" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3096"
+ id="radialGradient3102"
+ cx="23.081985"
+ cy="42.747208"
+ fx="23.081985"
+ fy="42.747208"
+ r="16.010918"
+ gradientTransform="matrix(1,0,0,0.119874,0,37.62294)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3080"
+ id="radialGradient3104"
+ cx="17.309582"
+ cy="24.508204"
+ fx="17.309582"
+ fy="24.508204"
+ r="17.031612"
+ gradientTransform="matrix(2.13216,1.122823e-2,-1.1822e-2,2.244913,-18.75993,-30.16344)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3112"
+ id="linearGradient3118"
+ x1="24.260687"
+ y1="2.5335035"
+ x2="24.832115"
+ y2="22.012075"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3128"
+ id="radialGradient3120"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.705883,0,0,1.667238,-17.94118,-19.21085)"
+ cx="21.142859"
+ cy="22.17857"
+ fx="21.142859"
+ fy="22.17857"
+ r="9" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3128"
+ id="radialGradient3221"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.764705,0,0,0.71453,-2.352944,-8.090347)"
+ cx="21.142859"
+ cy="22.17857"
+ fx="21.142859"
+ fy="22.17857"
+ r="9" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3223"
+ id="linearGradient3229"
+ x1="24.000008"
+ y1="31.785711"
+ x2="30.00001"
+ y2="38.499996"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.514307,0,0,0.531053,3.682473,-1.883411)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3103"
+ id="radialGradient3109"
+ cx="15.269456"
+ cy="24.907877"
+ fx="15.269456"
+ fy="24.907877"
+ r="19"
+ gradientTransform="matrix(1.989063,0,0,1.427178,-17.28077,-7.054682)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3951"
+ id="linearGradient3111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.258493,0,0,1.2607,-6.203794,1.409664)"
+ x1="16"
+ y1="2"
+ x2="38.465416"
+ y2="42.405006" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3951"
+ id="linearGradient3115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.909689,0,0,0.916448,-5.815089,-2.558248)"
+ x1="16"
+ y1="2"
+ x2="38.465416"
+ y2="42.405006" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3103"
+ id="radialGradient3117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.451479,0,0,1.326922,-14.12382,-16.08371)"
+ cx="16.488304"
+ cy="23.537582"
+ fx="16.488304"
+ fy="23.537582"
+ r="19" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3121"
+ id="radialGradient3127"
+ cx="23.991123"
+ cy="44.514973"
+ fx="23.991123"
+ fy="44.514973"
+ r="20.85965"
+ gradientTransform="matrix(1,0,0,0.16707,0,37.07785)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3106"
+ id="linearGradient3113"
+ x1="15.571428"
+ y1="29.99917"
+ x2="15.571428"
+ y2="42.285942"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.721659,0,0,0.722208,-0.560501,-2.082653)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3106"
+ id="linearGradient3116"
+ x1="15.571428"
+ y1="29.99917"
+ x2="15.571428"
+ y2="42.285942"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.721659,0,0,0.722208,-2.003818,-2.082653)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3951"
+ id="linearGradient3122"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.587733,0,0,0.453793,1.894403,6.769561)"
+ x1="17.725422"
+ y1="3.860764"
+ x2="27.055439"
+ y2="24.431168" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0297263,0,0,1.1788768,1.0605466,-1.8584828)"
+ r="21.035482"
+ fy="14.618562"
+ fx="24.687721"
+ cy="14.618562"
+ cx="24.687721"
+ id="radialGradient5822"
+ xlink:href="#linearGradient5816"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3951"
+ id="linearGradient7539"
+ x1="16"
+ y1="2"
+ x2="32.927006"
+ y2="31.587952"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.993546,0,0,0.998054,0.154891,5.053486)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3951"
+ id="linearGradient7531"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-1,3)"
+ x1="18.107143"
+ y1="53.76825"
+ x2="8.4828358"
+ y2="3.3976703" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3096"
+ id="radialGradient7529"
+ cx="23.081985"
+ cy="42.747208"
+ fx="23.081985"
+ fy="42.747208"
+ r="16.010918"
+ gradientTransform="matrix(1,0,0,0.119874,0,37.62294)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3080"
+ id="radialGradient7527"
+ cx="17.309582"
+ cy="24.508204"
+ fx="17.309582"
+ fy="24.508204"
+ r="17.031612"
+ gradientTransform="matrix(2.13216,1.122823e-2,-1.1822e-2,2.244913,-18.75993,-30.16344)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3112"
+ id="linearGradient7525"
+ x1="24.260687"
+ y1="2.5335035"
+ x2="24.832115"
+ y2="22.012075"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3128"
+ id="radialGradient7523"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.705883,0,0,1.667238,-17.94118,-19.21085)"
+ cx="21.142859"
+ cy="22.17857"
+ fx="21.142859"
+ fy="22.17857"
+ r="9" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3128"
+ id="radialGradient7521"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.999999,0,0,1.000342,1.223408e-6,-8.326495)"
+ cx="21.142859"
+ cy="22.17857"
+ fx="21.142859"
+ fy="22.17857"
+ r="9" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3223"
+ id="linearGradient7519"
+ x1="24.000008"
+ y1="31.785711"
+ x2="30.00001"
+ y2="38.499996"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.679906,0,0,0.709362,7.683475,1.608315)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3103"
+ id="radialGradient7517"
+ cx="15.269456"
+ cy="24.907877"
+ fx="15.269456"
+ fy="24.907877"
+ r="19"
+ gradientTransform="matrix(1.989063,0,0,1.427178,-17.28077,-7.054682)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3951"
+ id="linearGradient7515"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.258493,0,0,1.2607,-6.203794,1.409664)"
+ x1="16"
+ y1="2"
+ x2="38.465416"
+ y2="42.405006" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3951"
+ id="linearGradient7513"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.258493,0,0,1.260118,-6.203794,-0.58013)"
+ x1="16"
+ y1="2"
+ x2="38.465416"
+ y2="42.405006" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3103"
+ id="radialGradient7511"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.989063,0,0,1.76923,-17.28077,-17.61162)"
+ cx="16.488304"
+ cy="23.537582"
+ fx="16.488304"
+ fy="23.537582"
+ r="19" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3121"
+ id="radialGradient7509"
+ cx="23.991123"
+ cy="44.514973"
+ fx="23.991123"
+ fy="44.514973"
+ r="20.85965"
+ gradientTransform="matrix(1,0,0,0.16707,0,37.07785)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3106"
+ id="linearGradient7507"
+ x1="15.571428"
+ y1="29.99917"
+ x2="15.571428"
+ y2="42.285942"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(1,0)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3106"
+ id="linearGradient7505"
+ x1="15.571428"
+ y1="29.99917"
+ x2="15.571428"
+ y2="42.285942"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-1,0)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3951"
+ id="linearGradient7503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.993546,0,0,0.998054,0.154891,5.053486)"
+ x1="17.725422"
+ y1="3.860764"
+ x2="27.055439"
+ y2="24.431168" />
+ <linearGradient
+ id="linearGradient5816">
+ <stop
+ id="stop5818"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0.39655173"
+ id="stop5856" />
+ <stop
+ id="stop5820"
+ offset="1"
+ style="stop-color:#eeeeec;stop-opacity:1" />
+ </linearGradient>
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.309375,0,18.245309)"
+ r="14.288518"
+ fy="26.418547"
+ fx="15.538764"
+ cy="26.418547"
+ cx="15.538764"
+ id="radialGradient6773"
+ xlink:href="#linearGradient6767"
+ inkscape:collect="always" />
+ <radialGradient
+ gradientUnits="userSpaceOnUse"
+ r="6.1172719"
+ fy="6.093667"
+ fx="13.980121"
+ cy="6.093667"
+ cx="13.980121"
+ id="radialGradient6743"
+ xlink:href="#linearGradient6737"
+ inkscape:collect="always" />
+ <linearGradient
+ gradientTransform="translate(0,-1)"
+ gradientUnits="userSpaceOnUse"
+ y2="32.797932"
+ x2="21.490084"
+ y1="14.441401"
+ x1="13.751941"
+ id="linearGradient6733"
+ xlink:href="#linearGradient6725"
+ inkscape:collect="always" />
+ <linearGradient
+ id="linearGradient6725"
+ inkscape:collect="always">
+ <stop
+ id="stop6727"
+ offset="0"
+ style="stop-color:#89afd7;stop-opacity:1" />
+ <stop
+ id="stop6729"
+ offset="1"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6737"
+ inkscape:collect="always">
+ <stop
+ id="stop6739"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop6741"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6767"
+ inkscape:collect="always">
+ <stop
+ id="stop6769"
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1;" />
+ <stop
+ id="stop6771"
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0;" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5816"
+ id="radialGradient4949"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0297263,0,0,1.1788768,1.0605466,-1.8584828)"
+ cx="24.687721"
+ cy="14.618562"
+ fx="24.687721"
+ fy="14.618562"
+ r="21.035482" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5816"
+ id="radialGradient4957"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0297263,0,0,1.1788768,1.0605466,-1.8584828)"
+ cx="24.687721"
+ cy="14.618562"
+ fx="24.687721"
+ fy="14.618562"
+ r="21.035482" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5816"
+ id="radialGradient4965"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0297263,0,0,1.1788768,1.0605466,-1.8584828)"
+ cx="24.687721"
+ cy="14.618562"
+ fx="24.687721"
+ fy="14.618562"
+ r="21.035482" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="7.5424727"
+ inkscape:cx="8.4772054"
+ inkscape:cy="23.21386"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ width="48px"
+ height="48px"
+ showgrid="true"
+ inkscape:window-width="872"
+ inkscape:window-height="832"
+ inkscape:window-x="0"
+ inkscape:window-y="26" />
+ <metadata
+ id="metadata6">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Vrstva 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.15283843;color:#000000;fill:url(#radialGradient5708);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000083;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ id="path4731"
+ sodipodi:cx="15.625"
+ sodipodi:cy="29.767857"
+ sodipodi:rx="13.839286"
+ sodipodi:ry="0.98214287"
+ d="M 29.464286 29.767857 A 13.839286 0.98214287 0 1 1 1.7857141,29.767857 A 13.839286 0.98214287 0 1 1 29.464286 29.767857 z"
+ transform="matrix(1.5927335,0,0,2.1126475,-0.928756,-17.814065)" />
+ <path
+ style="color:#000000;fill:url(#linearGradient4732);fill-opacity:1;fill-rule:nonzero;stroke:#204a87;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 11.710498,1.5000001 L 11.335402,7.5101883 L 4.5662103,7.5101883 L 3.5695431,16.50653 L 10.772758,16.50653 L 9.6988854,30.506095 L 3.4468149,30.506095 L 2.5909602,38.50606 L 9.1779384,38.50606 L 8.7097247,44.489767 L 17.934439,44.489767 L 18.402655,38.50606 L 26.102306,38.50606 L 25.634091,44.499999 L 36.497679,44.499999 L 36.965895,38.50606 L 42.592344,38.50606 L 43.496352,30.506095 L 37.48684,30.506095 L 38.560714,16.50653 L 44.535561,16.50653 L 45.500001,7.5101883 L 39.123357,7.5101883 L 39.498452,1.5000001 L 28.634867,1.5000001 L 28.25977,7.5101883 L 20.560118,7.5101883 L 20.935214,1.5000001 L 11.710498,1.5000001 z M 19.997472,16.50653 L 27.697124,16.50653 L 26.623253,30.506095 L 18.923602,30.506095 L 19.997472,16.50653 z "
+ id="rect4737"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccccc" />
+ <path
+ style="opacity:0.26200873;color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 12.662293,2.5180902 L 12.290327,8.5240213 L 5.4649928,8.5155529 L 4.6994408,15.495028 L 11.859082,15.495028 L 10.637401,31.50383 L 4.3121668,31.50383 L 3.7128969,37.498846 L 10.249669,37.498846 L 9.8112881,43.482303 L 17.022528,43.482303 L 17.491948,37.497074 L 27.200365,37.497074 L 26.738481,43.505582 L 35.56437,43.505582 L 36.026255,37.503304 L 41.699959,37.503304 L 42.364358,31.518008 L 36.406999,31.518008 L 37.604901,15.487939 L 43.665365,15.487939 L 44.377785,8.5141728 L 38.03532,8.5141728 L 38.44715,2.501924 L 29.615827,2.5368429 L 29.186539,8.4967134 L 19.465706,8.5141728 L 19.831433,2.5077438 L 12.662293,2.5180902 z M 19.077577,15.487939 L 28.791039,15.487939 L 27.56016,31.518008 L 17.840881,31.518008 L 19.077577,15.487939 z "
+ id="rect5703"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccccc" />
+ </g>
+</svg>
diff --git a/trunk/data/icons/hicolor_apps_scalable_im-local-xmpp.svg b/trunk/data/icons/hicolor_apps_scalable_im-local-xmpp.svg
new file mode 100644
index 000000000..eb63de9c5
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_scalable_im-local-xmpp.svg
@@ -0,0 +1,1723 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 12.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
+<svg:svg
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.0"
+ id="Calque_1"
+ width="48"
+ height="48"
+ viewBox="0 0 37.982 43.529"
+ overflow="visible"
+ enable-background="new 0 0 37.982 43.529"
+ xml:space="preserve"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ sodipodi:docname="hicolor_apps_scalable_im-local-xmpp.svg"
+ sodipodi:docbase="/home/zdra/programmation/empathy/data/icons"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/zdra/utilities-avahi1.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs266" /><sodipodi:namedview
+ inkscape:window-height="725"
+ inkscape:window-width="1280"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ inkscape:zoom="5.6568542"
+ inkscape:cx="23.353073"
+ inkscape:cy="29.563951"
+ inkscape:window-x="0"
+ inkscape:window-y="25"
+ inkscape:current-layer="g34"
+ width="48px"
+ height="48px" />
+<svg:metadata
+ id="metadata3"><xpacket />
+<x:xmpmeta
+ x:xmptk="3.1.1-111">
+
+<svg:metadata
+ id="metadata268"><rdf:RDF>
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ <rdf:Description
+ rdf:about="">
+ <xap:CreatorTool>Adobe Illustrator CS2</xap:CreatorTool>
+ <xap:CreateDate>2005-11-18T17:59:54+01:00</xap:CreateDate>
+ <xap:ModifyDate>2005-11-18T17:59:54+01:00</xap:ModifyDate>
+ <xap:MetadataDate>2005-11-18T17:59:54+01:00</xap:MetadataDate>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:width>224</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADgAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FVK7u7Wztp
+Lq7mS3toVLzTysERFHUszUAGAkDcpAt4d56/5ybsrSSSy8o2q3si1U6lchlhr/xXEOLv82K/IjNf
+m14G0XMx6QneTx7W/wA2fzF1mRmvNeukRj/c2zm2jp2HGHgD9NcwJ6nJLmXKjhgOiQDX9dEnqDUr
+oSUpz9aStBvSvLK+OXe2cI7mT+Xfzm/MfQpVaDWJryFftW18TcxkDt+8JdR/qMMuhqskerVLBCXR
+6Nc/85WXx0+NbXy/Euo8f30ss7NCGHdY1VWofd9vfMo9omthu0DRi+bDdW/5yG/M+/ZvSv4dPjbr
+HaQRgD5NKJXH/BZRLW5D1ptjpYBi99+Ynny+JN15h1Bwf2Bcyqnf9hWC9/DKTnmeZLaMUR0CTz6p
+qc9fXu5peQ4tzkdqjwNTlZkSyoIXAlUiuJ4STDI8ZbrwYrX7sQVpMrTzZ5qsyDaazfW5FADFczJ0
+2H2WGTGSQ5EsTCJ6Mh0386vzQ0+no6/PKo6rciO4r9Myu345bHVZB1azp4HozTRP+cpPNVuyrrGl
+2l/EOrwl7aT7/wB6n/CjL4doSHMW1S0cehZNrP8AzlNoo0cPo2lTvq77GK74rBGf5i0bFpB7fD9G
+XS7QFbDdrjoze52eP+YPzd/MTXZGN3rdxDCx2trRvq0QH8tIuJYf6xOYM9TklzLlRwQj0Y6Nf10S
+eoNRuhIRQuJpK0HavLKuOXe2cI7mR6F+cH5kaLIrW2uXM8Y6wXjfWkI8KTcyo/1SMthqckerXLBA
+9HtHkP8A5yV0bU5I7HzTAulXb0UX0RLWjE/zBqvF9JYeJGZ+HXg7S2cTJpCN47vaYpYpYklidZIp
+FDRyKQysrCoII2IIzYOGuxV2KuxV2KuxV2KuxVD6lqNlpthcahfTLb2dqjSzzOaKqKKk4JSAFlIB
+JoPkX81/zd1XztftbW7PaeXYW/0ayrQyFTtLPTqx7L0X51J0mp1JyH+i7TDgEB5sKsNJuLv4x8EP
++/D3+Q75rsucQ97m48Jl7kyfT9Nsouco5U7vuSfYdMxhlnM0G844QG6U3V6stViiWOP2A5H6cy4Y
+65m3HnkvkFK3tri4f04I2kfwUVycpiIslrAtO7PybqEoBndYAe322/Db8cxJ62I5C2wYim9v5L01
+KGVpJT3qeI/Df8cx5ayZ5bMxjCPi8t6RGNrVD/rfF+uuUnPM9Sy4AiBpNgv2beMfJRkDOR6lNONh
+bf76T/gRgs96VCTTrU9YUP8AsRg45DqikJLo+nt1to/+BA/Vk46iY6lHCEDP5d01h8KFD4qx/jXL
+46uYYmAS6fyz19Gbf+Vx/Ef0zIjrO8MDjS260y9tqmSM8B+2u4/DMmGaMuRYGJCGRuLBqA07EVGW
+EWgGk4sbiyuKRvGiSdlIFD8sxMsJR3vZyscoy2pEy6LZyjZfTbxX+mVR1Eh5szgiUnvtMubQ1cco
+z0kHT6fDMvHmE/e42TEYvR/ye/ObUPKV5DpOrStceWZWoytVntSx/vIup4V3ZPpG/XZabVGBo/S4
+OfAJbjm+r7e4gubeO4t5FmgmUSRSoQysjCqspHUEZuQbdYQqYVdirsVdirsVdir5x/5yX/MCS4v4
+/JthKRbWoWfVSp+3MwDRRH2RaMfcjuuarX5rPAPi7DSYtuIvG9F0o3sxeQf6PGfi/wAo/wAv9c0u
+pz8Aoc3Z4MXEd+TIb24gsrb1GFFX4UQbVPYDNfjgZmnNnIRDEru7mupjJIf9VR0A8Bm2x4xEUHXT
+mZGynGk+WTKgub8+lABy9OtCR4sT9kZiZtXvww3KYw6lWufOeg6Yv1fT4frBX/fdEjr/AK5BJ+dM
+ycHYubL6sh4ftLj5NfCO0d0ub8ytS5fBaQBewPMn7wRmwHYGLrKX2ON/KU+4Iuy/M8g0vbEFe7wv
+Qj/Yt/zVlOXsDb0S+f6/2M4dp/zh8mV6Z5i0/VIy9k6uR9uM1Dr812zQarTZcBqYr7vm7PDlhkHp
+KMM8vgB9GYnG38Cm003t92HiXhUXnm9vuyQKOFQe5k7qPxyXCCiku1DW7GxTldNwr9lRux+S5laf
+R5MpqAtozZY4xcixu789AsRa2vw9nlbf/gV/rm8w9g7euXy/H6HWz7S/mhDL53vq/FbxFe4HIfxO
+XHsLH0lL7Gsdoz7gu/S2jX5pIhsLg9H+1ET70pT7spn2dmxfSeMfIt8NbCXP0lTmglgcK/fdWU1B
+HYqR1GY4kC5Kd6NqnqkW85/e/sOf2vY++YOowVuOTmYct7FOmhSVDHIoZGFGU98wxIg2HKMQRuxT
+V9MaxuKCphfeNj+IPyza4M3GPN12bFwHye+f84z/AJgS3EM/k7UJSz26m40lmNT6df3sP+xJ5L7c
+uwzd6DNfoPwdVq8X8Qe9ZsnCdirsVdirsVUL68hsrG4vZzSC2ieaU+CRqWb8BgJoWkCy+DdY1S71
+fVrzU7o8rq+mknl7/FIxYgewrQZzc5WSS7qMaFBl9hZraWUcPQqtXPix3Y5ocuTjkS7jHDhjTE9Y
+1A3l2Sp/cx/DEPbufpzbafFwR83XZsnFLyTXy3oy0F9cgU6wq3QAftn+GYur1B+iP48lhHqUq1PU
+dU8z6vHo2kKzxSPwijXb1COrueyild+2+b7Q6LHpMfiZPq6+XkHVajPLNLgjy+96/wCR/wAiNDs4
+Y59aUajemhZWr6KnwVP2vm33DNTqu2smQ1A8Eft+fT4ORj0kID1eqX2PTrXydodvEI4bCCNB0VY1
+A+6ma05SdySfi2eJXJKPMH5V+TtXhdbvS4RI1f38SiOUHx5pQ5kYdblxn0yP6PkxkIT5gPBPzA/L
+DWvI9yuraZO8+lhwFuRtLCWNAsoGxB6cuh6EePRaTXY9VE48gF93Q+5wsmGWI8cDsnHlXXYtb0/1
+CAl3DRbmMdKnow9mzlu09AdNkrnA8j+j4O70epGWN/xDmmzxZrhJyqQ8kWWAopIvMmrxaTZ+oQGn
+kJWCM9z3J9hmz7O0Z1E6/hHMuJq9QMUb69EB5B/LXWfO922o30zwaWHpJc0q8pB3SEHYAdK9B750
+uq1uPSR8OA9Xd3e902LDLMeKR2e/eXfyq8naPEi2umRNKtK3EyiWUnx5vUj6M5zNrsuT6pH7h8g5
+sYwhyATu48n6JPEY5bCB0PVWjUg/RTMbxSNwT82XiPNvO/5DaBfQST6Mg02+FSoSvosfBo+gH+rT
+6c2Ol7Zy4j6jxx+35/rap6aGTl6T9jwuWLUNE1CXRdZjaIRtRlO5jJ6SIe6n26jN9mxQ1EPFxfV9
+/kfxs4uLLLFLhlyVJEkgmKk0dDUMPvBBzUg2HZsv0e9F7aK5/vU+GUe47/Tmo1GPglXR2eGfFG1+
+sWQutPlSlXQc4/mu/wCPTBp8nDMJzQ4olI/JevyeXvNmlayjFRZXMcktO8RPGVf9lGWGb7FPhkC6
+jJHiiQ+6wQQCDUHcEZ0TpXYq7FXYq7FWM/mdI8f5d+ZGQ0b9HXK19miZT+BynUf3cvc2YfrHvfFG
+nqGv7ZW6NKgPyLDObymoH3F3eMeoe9lnmK6+raa4U0eY+mvyP2vwzVaSHFP3Ox1M+GPvYtplmby9
+jg/YJq5/yRuc2mbJwRJdbEWWQeb702OgtHF8LXBEC07KQS3/AAoplHY2DxM9n+Hf49GGuycOOh12
+Zn+QnlSKDSn12ZAbm+YxwMRusMbUNP8AWcb/ACGT9odYTMYxyj9/9jToMXDDi6n7mY/mL5+u9BMO
+i6JxGrzxiae5ZQ4toSSqkKQVaRyp4g7ACpHTMfsnQjKDkyfQPtLXqMpuhzePaw2p3PO6vr+6uZ6b
+yzTSO3yFTsPYbZujq4Y/TGIA9zCOlMuav5L/ADa82eVr6Nb65m1XRCQs9ncOZHROnKB3JZSo/Zrx
+P4inJhxagVQjPoR+lZQlj8w+h9Rh0vXNEDgLdabqMAZaj4ZIZlqDvvupzm/Elin3SiftDl4yJDyL
+5c0+1n8p/mJLpEjExesbUk7co5aGFj96nOs7QiNVouMcwOL4jn+kOHpScOfh86+fJ6XJFnCCT0lI
+WWPLIliXnF/azeZvPkGkRsQhmW1DDfiqmsr09viP0Z3PZ0Rp9JxnmRxfq/Q87qicufh+H631Fo1p
+pWiaKKBbTTdPgLMf2Y4olqzH5AVOclLLLLPvlI/aXPyVEUOQeAedvzf80+aNQli0q5m0nQlJW3t4
+HMcsi9Oc8iGpLfyA8R036npcelxaaPqAnk+z4OvAlkPcEHobanBwubS/ura4AoJoZ5Ef3FQ248Qd
+sl+dhP0yiD8GZ0pHJ7L+XH5gXuszSaFrzK+qRxmWzvFAT6zGtA4ZAAokSoPw7Eb0FDmo7U0UccfE
+x/R1Hd+xlhyEGixb8/fKUN1oo1yFKXensokYdWgdqEH/AFWIb23yXs9rTHL4Z+mf3tmtx8WPi6x+
+549aE3WipMd5bRvRc9yh3Q/RWmbTWw8PPXSYv49f1o0k+LH7kx8tXZh1ARE/BOOJ/wBYbr/TNdrI
+XC+52OmnUq72Yhc1DsnnUoCyOB0BIH350I5OlPN94+WZZZvLekyygiWSzt2kDGpDNEpNSffOkx/S
+Pc6SfMplk2LsVdirsVS/zFpY1fy/qelGgF/az21T29aNkr/w2RnHiiR3somiC+D3Se0umSRTHcW7
+lXRhQq6GhBHsRnNSj0LuweoTbzLfpdfVDGaoY/Up4FjSh+XHMPR4jHivvcnU5OKqRHlK3HKecjfZ
+FP4n+GV6+XINeIKH5iBvqtj/AC83r86CmbH2d+qfw/S4PafKL3P8qvRHkjRjF9n6utf9avxdf8qu
+c726SM8/e5OD+6j7mBecubfmDrpmpz9S340r/d/VIeHX6a+9c6Hs6V6GBHn/ALouBX702kWtj/Rh
+TpyHL5b5r7PG7TEAxa/CemczMJNteoAp9F/lO8v/ACq7RBNXnwmC8uvD6xJw69uFKe2aLtnJ/hUg
+PL/chx9KPS8U/NoL/wArST0f70/VOVOvPan4Uzreyf8AEd+VScXU/wB/t5PQpkABJ2A755+Hpix3
+y7qp1bSEvGpzZ5FIGwornj/wtM2vaOlGnzGA5UPu/W4ulzeJDi97GvywC/8AK1x6n2xJeca9eXF6
+/hXOs13+ICv5sf0Okwf4wffL9L278z2uv+VZa6tpy9X0F5cK19L1U9Xp29PlX2zkux5j83AS7/0G
+vtcvWA8BfOGmBOAzodUTxFOlAplmhj9y1enLb7hmsmfWHLnTJPKJZfPmgGP+8+sS9OvD6rLz/wCF
+zN1cq0eS+4feHWTH7wU9D/M8wt5L1wy/Z+pzU/1uB4f8NTOc7FkTqIEfzh97mZf7uXuL5x8nwmaz
+1GI/ZcIF/wBajf2Z2PbcqljPv/Q4fZw2l8P0oeGVoZklX7UbBh8wa5iyjYpzImjbPNQvY7Wwkua/
+s/u/dj9nNHixmUxF2+TIIxthmj6Xc6tq9nplsK3F9PHbxd/ilYKCfvzfxjZADppSoW+9bW3jtraK
+2iFIoUWNAf5UFB+AzpAKdISqYVdirsVdirsVfMX/ADkP+Wdxpesy+bNNhLaVqL8tQCAn0blju7U6
+LKd6/wA1fEZqNbgo8Q5F2Oly2OE83i+YDlsu8qoBp1f5pGP6h/DNTrT6/g34+S3zvZNdaNVBV7dv
+Wp34gUb8DXMnsXOMeajylt+po12Lix7dN2X/AJEebEm0aTQpHAubBmkgU9Whkapp/quTX5jIe1Gj
+kJeJHlL7/wCxq7PyCUeE8x9zJvPvk671mWLWdJCtqkMfoz2zEILiIEsoDEhVdCx4k7GtCemaDsPt
+waYnFmvwpHn/ADT+o/2MtTpyTxR5vLtWa8hDW15aXFtNTeKaJ0b5io3+Y2zrRixZfVjnGQ8iGmOo
+MdiKb8q/lp5l8yXkbXdvLpukAhprudTG7p4Qo4BYt/NTiPwOv1va2DSRNEZMvSIN7/0iOVd3P72X
+ry7cg94ubyw0XSAoZbbTdOgCrX7McUS0A8dlGcdozm1Gb+dKR+0ucIRhHuAfOmiy3PnD8ypNWkU+
+isxu2r+xFCQIUP3Kuena+Q0mi4OtcPxPP9JdVpYnNqOLpd/Lk9I8y3ItdFv560McEhXt8XEhfxzi
+tDj49RCPfIO/1M+HHI+TCfyznrpN3bHrFMH+iRQP+NDm/wDaXHWWMu+NfI/tdb2TL0EdxSTVbi48
+r+fYdXhUlPWW6AH7SsaSpX3+IfTm37NkNTo+A8wOH9X6HC1cTiz8Xx/W+j7HULDWtIBBW507UISr
+D9mSKVaMp+YNDnm3aAzYMtj0yiftDtjGM43zBeF+a/yw8x+XL6R9Pt5dS0ZiWguIVMkiL14zIgqC
+v8wHE+3Qddo+2cGsiOKUcebqDsD5xJ7+7n97ruGeI98VPRXvJeNvbWlxcT02hihkdvpCg069TmXL
+Bjx+vJOMR3kgJOpMtgHqvkHybe6VcPreshU1F0MVpaAh/QjahcswqpkelPh2A2qanOT7c7bjnAw4
+P7scz/OP6h58z02bcGA3xS5pD+evm1LXQBokbj63qRBdB1WCNuRY/wCsyhR475ufZTRznPxZfTD7
+/wAfoY6/IIw4RzLzvyjZtb6UJHFHuGMn+x6L+qubHtjOJ5qHKO3x6p0OPhx33pLcrxuZV/ldh9xy
+yBsBtKte6lc3ixJIaRwqFRB02FKn3OQx4YwsjqznlMqvo9x/5xx/LK5a7XzpqsJS3jVl0aJxu7sC
+rT0/lUVVPE79hm30On34z8HXarN/CH0Tm0cB2KuxV2KuxV2KqV1a213bS2t1Ek9tMpSaGRQ6OrCh
+VlNQQcBF7FINPjX85PLGl+WvP+oaZpUTQWAWKaCJiWC+rGGYKW34hq0zRarGITIHJ22CZlGyoeWG
+H6NUeDsM0Gt+tzcfJNrkA8K7gggg5iwbQwe/sNU8s6tHrOkO0ccb84pF39MnYo47qa036jbOt0Ws
+x6vH4WX6vv8AMebpNTp5YZ8cOX3PWPJ3506DqMMcGruumX4oGLk+g58Vc/Z+Tfec5ftT2WmCZY/V
+H7f2/BzMOvhMVL0n7HoNv5i02aMSQ3kEkbdHSRGB+kHOVydkZomjE/IuWDE9Uq1z8wvK2kxM17qc
+Kuv+6I2EkpPhwTk2Zuj9ntRlO0TXyHzLXPPjhzLxTzr+Yes+drtNH0i3kj053HC3G8sxG4aUjYKv
+WnQdSfDv+zOyMOgh4kyOIdeg9zq8+plnPBAbM18meWIPLmlGIkSX1xR7uYdKjoi/5K1zmu1u0jqc
+ljaA5D9Pxd1otKMMa/iPNLvzIvxFoDW4Px3cixgd+Knmx/4UD6cyPZ3Bx6ni6QF/PZp7UycOKv5z
+Efy/uxb6rLbsaLcx/D7unxD/AIXlm+9osHFhEv5p+w/tp13ZeSshHeGSeadDi1ix9IkJcREtbyHs
+e4Ps2c92Zrjpsl84nmPx3O11emGWNdeiQeSfzC1fyXdNpmowvNpvOr29fjiJO7xE7EHrTofbOj7R
+7Lw6+HHAji7+/wB7psGpngPDIbfjk9t0H8xPK2rRI1nqUPNqfuJWEUoJ7cHofuzgNb7O58R+k18w
+7WGfHPkU5m8w6dFGZJbyGONd2dpFAHzJOa6PZOYmhE/IthMR1YF5u/Ory9psLxaXINUv9wgjJ9BT
+4tJ0Yf6lfozpuzPZTLIiWX0R+35frcTNroQHp9ReMoNU8zaw+p6rI0vquDLIdgabBEA6AdNs7HUZ
+8ekxeHj5jl5eZcHBhlmlxS5M1VQqhVFFAoAOwGcoTe5dyAwy8Nbuc+Mjf8SObjH9I9zjnm+hPyr/
+AOcetHksNO8xeZJ/r/1uGK7t9LQFYVWVBIonJ+JyA26igr/MM2+n0QoSlu6/NqjZAe9IiRoqIoRE
+AVVUUAA2AAGbJwm8VdirsVdirsVdirsVfLX/ADk/p5g8/Wl2B8F5p8ZLeLxySIR/wPHNPr41O/J2
+WkPp+LBvKktbWWPuj8voYD+mc9ro+oF2GMp7PvGp8D+vMGPNvDk4spVgGUihB3BBxNg2GdWkmoeQ
+tKu2Mlq7Wch6hRzj/wCBJFPoObbT9vZcYqY4x8j83X5ezYS3j6UrP5ZamWPC7gK9i3MH7gDmxHtJ
+i6xl9n63F/kmfeEdYflWSwa+vwF7pAu5H+u3T/gcxs/tOK/dw+f6h+tsx9kfzpfJnOiaJpGjQmOw
+gEbMKSSn4pG/1mO/0dM5rWa7NqDcz8OjtcGnhiFRCYTXcccbSSMEjQFnY7AAbknMSGMyIA3JbpSA
+Fl5R5l1t9Z1EyiotoqpbIf5e7H3bPRuy9ANNi4f4jvL8eTy+s1JyzvoOSWwtLbzJPCxSWMhkYdiM
+z8kBOJjLcFxoyMTY5h6BpurRajZrOu0g2lj/AJW7/R4ZwWs0UtPkMTy6HvD02n1Ayxsc+qE1bTLD
+UI+F1EHI+y42Zfkwyel1WTCbga+5c2CGQVIMUu/JQViba5+Hssg3/wCCH9M3+Ht3+fH5fj9LrJ9m
+fzT80EfKV4D8U0dPbkf4Zkfy1DpEtf8AJs+8I208s2cRDTMZ2HY/Cv3D+uYeftbJLaPp+9ycXZ8I
+7y3Tu1jUSIqgBV6AbAAZqckjRJc6qCYswVSx6AVP0ZjAIYQeUkhoKs52A3JJObsBxn3vo1j9Q0ex
+sf8Alkt4oP8AkWgXxPhnSxFAB0kjZtGZJDsVdirsVdirsVdirsVeG/8AOVGhtNoeja0i1+pTyW0x
+H8twoZSfYNDT6c13aENgXM0ctyHgnlm49O9aI9JV2+a7/qrnPayFxvudpjO7LPtxle5G2arkXIBU
+YnycgzCMikykhkio5cqITaISbIGLJUE2Q4Vtg/nXzL68h0u1f90h/wBKcftMP2Pkvf3zr+wezOAe
+NMbn6fd3/H7ve6PtHV2fDjy6sZiIzpXUqkhWm2KV+marJp12JV3ib4Zk8V/qO2YWu0Yz46/iHIt+
+m1BxSvp1Zj9YjmjWWNgyOKqw7g5xksZiTE7EPRxkJCxyQ0r5OIUoVzU5aELcKEVZJuz+GwyrIeiC
+t1ef0dPlNd3HBfm236sOnjcwwmdlH8sdDOuef9C07jyje7SWdf8AiqD97J/wiHN5p4cUwHEzSqJL
+7ezoHTuxV2KuxV2KuxV2KuxV2Ksc/MTywPM/kvVdGABnuIS1rXtPERJFv2q6gH2yrPj44ENmKfDI
+F8RxvLa3KsVKSwv8SMKEFTuCDnOTjYILuQWcW1wksSSoaq4BH05o5xo0XJBWyjhJUfZbcYY7hmCq
+RyZEhkiElysxZK6zZAxW0n81eYDpun8YmpdXFUhP8o/af6M2fZOg8fL6vojuf1OHrtT4cNvqLz2N
+ZWQyUJXuxzuaebVklpilcZdsVU+LyV4CtO2Kpn5c1YxS/UZT8DkmKvZu4+nNJ2vouIeLHmObsuz9
+RR4DyPJP5HznwHcKOTQ4AkgDqemKplFGI4wv3/PMaRssUh8x3fOZLZTtH8T/AOsen3DM/SQocTVk
+L2D/AJxb8rNLqGqeZ5k/dWyfUbMkbGSSjykHxVAo/wBlm97Px7mTrtZPYRfRmbVwHYq7FXYq7FXY
+q7FXYq7FXYq+Tf8AnIPyMfL3nFtUtY+Ol62WuEIHwpcV/fp9JPMfP2zS63Dwzsci7PTZOKNdQwry
+5qFK2jnxaL+I/jmk1eL+IOdjl0ZCwEicT9B98wOTcChgzKxVtiMsq2YKskuQMU2qrNkDFNsA85Xb
+y67IjH4YERFHzUOf+JZ2XYuIR04P84k/o/Q892jMnKR3I6azUWqxpsvAAH6OubVwUhYvGxVxRh1G
+KteocVTXTLduNWG7GtPbFUu1Y/V9TcxGjIVcU7NQH9eCURIEHkUgkGwy9JPURX6cgDT5jOIIo09R
+E2LbwJRdpB/uxh/qj+OVZJdEFfe3aWtu0z9tlXxY9BkccDI0xJpitrbXup6jFa28bT3t5KscMa7s
+8kjUVR8yc3MIcgHHJ6l9ueQvKdv5T8p6focJDvbR1uZgKepO55SP8uR29qZ0OHHwRAdNknxStkGW
+sHYq7FXYq7FXYq7FXYq7FXYqxz8wfJVj5x8sXWjXVEkcepZ3B/3VcIDwf5b0b2JyrNiE40WzFkMJ
+W+K9V0vU9D1e406/ia21CykMcsZ6qy9we4PUHuN85+cKJiXbxkCLDINK1JbuGvSZP7xf4j2zUZ8P
+AfJyIytGSIJB1o46HKQabAUNzZG4tscsq2VrxNg4VtjfmrRpbiT69bLzcKBNGOpA6MPHN72TrowH
+hz2HQur1+lMjxx+KXWGuoluttdqf3Y4pINzQdmHtnSOnUL+/s5ARGC57EilPvxVC2t1FG9XWo8R1
+xVM/09bQxn0UZ5KbctlHz74qhdP0661K6M0tfSLcpZDtX2XMDW62OKND63K02lOQ/wBFlwAAoOmc
+o9Aibe1Jo7ig7L45XOfcglFO6IhdyFVRUk9ABlQFoYrquoteT/DtCm0a/wATm0wYeAebRKVvdP8A
+nG/8s3Df411WKgo0ejRONzX4XuKH6VT6T4ZutDg/jPwdfqsv8IfQebNwXYq7FXYq7FXYq7FXYq7F
+XYq7FUNqWp6fpdjNf6jcR2llbrzmuJWCoo9yclGJkaHNBNPkX87PzG8t+cvMMNxo1iY0tEML6m9V
+kuVr8NY6fCq78eXxb9umW6vsOU8fEP7wdP0e9On14jKj9LAbe4lglWWJuLL0PjnI5Md3GQd5GXUM
+o07VYbxKfYnH2o/4jNXmwGHub4ytGOiuKMK+B75SDTNDSQSruvxD8csEgU2gdRnljtXKEq4oK9xv
+l+KIMt2MzskE5juVIuI1d+0oFHH0jr9ObLFknj+k15dGiAxmV5IiY+X2hB/o62puzg+OzD8BmYO0
+MncHb4uyeys24nPGe4kfq/S4abag7u7bbACn4kYf5RydwZz7C7LgLOaR9xH6IlXt7a0gBIjEkh6N
+J8QA9l6ffmPk1WWfWh5Oo1GLTCX7qGw6yNk/oTnR2uZ5nSvJQtd9gN81uoAiLTjKexWqJu3xN+GY
+Mpktlqks0UMZklYIi9ScjGJJoIJYzqmrPdt6cdUtwdh3b3ObPBgENzzaZStLTMI2U0DEEHiehp45
+0PZPZR1EuKW2Mfb5D9LrdbrBjFD6vufWH5R/nh5e80W9tot7HFo+uRosUNovwW0wUUUW1fsmg/uz
+v4Vzd6nQHFvHeP3Osx5xLnzerZgtzsVdirsVdirsVdirsVdirsVY/wCd/PXl/wAm6O2p6zNxU1W2
+tkoZp3A+xGpIr7noO+XYcEskqiwnMRFl8h/mP+anmTz1f871zbaXExNnpcbH0ox0DOdvUen7RHyA
+GdDp9LHENufe4OTIZJJoflm91Rw1DFbd5D3+WZJ2aDJld95GtGslWyPp3MY2Zvsv7Hw+eaHtTsmO
+o9cPTk+/3/rc7Ra+WLaW8fuYbcW13ZXJinRoZ4zWh2I8CD/HOKzYZQkYzFF6PHkjMXE2E0sfMLKA
+l2OQ7Sr1+kZr8uk6xbxPvTqC5gnTnC4dfbt8xmFKBjzbAbdcW8U8TRyCoYUr3HyxhMxNhJDEryzm
+tJjHKP8AVbsw8Rm2x5BMWHHIpD5Yh2KrkRnYKoLMdgBuScBNJZRpFh9TtiZNpZN5PYDoPozV58vG
+duTdGNLb3XbSAFYj60ngv2R8z/TJY9NKXPYIMwx+8vrm7flM1QPsoNlHyGZ+PFGA2aibTnQvKs92
+VuLxTFa9VQ7O4/gPfOh7N7GllqeT0w+0/s8/k6rWdoiHphvL7ky1vyha3Kc7NRDOo2UfZNM7XHGM
+IiIFAPPGZJs7sIuLa6srj05VaKZDUHoajoQcspmDb6B/Jz/nIQloPL3nOetaR2etyH6FS6J/5Of8
+F/Nmn1nZ/wDFD5fqcvFn6F9EKysoZSCpFQRuCDmnct2KuxV2KuxV2KuxV2KsX/MP8w9D8j6G2o6i
+3qXElVsbFSBJPIB0Hgo/abt86A36fTyyyoMJzERZfGnnHzlrvm/W5dW1iYyTSGkMK1EUMdfhjiXs
+o+89TvnSYcMccai6+czI2Uw8s+T3uON3fqVh6pEep+eWE00mXczyKKKGIKoCRoPkAMr5sUFdamTV
+LfYd5P6ZZGHewMkqvLOG+j4XIMlPssT8S/I5Rq9Di1EamPj1Dbg1M8RuJY7feWLyGr237+PwGzj6
+O/0ZyGt9n82PfH64/b8uvw+Tv9N2tCe0/SfsSn9/bykfFFKuxG6sD+vNBOFbSDtYyBFhGwa9qEez
+MJR/ljf7xTMeWlgfJsEyiW8wQzR+nc2odT1+Kv6xlQ0pBuJTxoKVtIY1RJo/8kFWH475eBkHOix2
+Uq2APSVx4VVf4NkvX5LsrxaoLcH6rbpET1dqu/3nISwcX1G08VckPcX13cf30rMP5eg+4bZOGOMe
+QYkkorTdA1TUCDBCREf93P8ACn3nr9GbLSdm5s/0R27zsPx7nEz63Fi+o793VmWjeULCxKzT/wCk
+3I3BYfAp/wAlf4nOs0HYWLD6p+uf2D4fr+x0Gq7Unk2j6Y/asvLudL6Vo3ICsQBXbbbpm/oOtBRt
+pfxXA4n4Jf5ex+WVSjTMFD6xotpqUBSVaSD7Eg6g4g0kPPNT0u6064MM67fsP2YZJsBt7H+SH56T
+6NLbeWPM03PRmIisb9z8VqSaKkjHrD7/ALH+r01et0PF6o/V97lYc1bHk+oFZWUMpBUioI3BBzRu
+a7FXYq7FXYq7FUj85+cNH8o+X7jWtVekMI4xQr9uaUj4IkH8zfh1O2W4cMskuEMZzERZfFXnXznr
+XnDX59Z1WSssnwwQKT6cMQ+zHGD0A/E7nfOmw4Y448IddOZkbKaeU/KlSl9fLt1iiP6zlhNNEpWz
+Vnihj5MQqL/nQZCrQlN1eyXBoPhiHRfH3OWxjTWSpKuSQqquKqqpgVFzWFjfQqLqBJtqVYAkfI9R
+mNn0mLKKnESbcWeeP6SQk115F0mUkwPJbnsAeaj6G3/HNNm9nMEvpMo/aP1/a7HH2xlH1ASS6X8v
+7kf3N4j/AOuhX9RbNfP2ZmPpmD7xX63Lj23HrE/NCS+R9VQ09aA/7J6/8Qyr/Q1qP50Pmf8AiWz+
+WcXdL7P1tL5Mvv254l8ePI/rAyUfZnN1lH7f1BjLtrH0iUdY+SbRn43N05PYIoX8TyzMx+zER9cy
+fcK/W48+2pfwxA9/4Cf2XlrRbMho7ZXcftyfGf8Ahth9GbXT9kafFyjZ7zv+xwMuvzT5y28tk0zZ
+OG07BEZz0UEn6MKsVkJZix6k1P05NKkag1GxHQ4VTOx1LmRFOaP0V/H2PvlUodzIFfqem21/btDO
+ta/Zbup8RkAaZPOdV0u4065MMoqOqP2YZNsBt7n/AM4+/nK1vLb+TfMM1beQiPRr2Q7ox2W3difs
+npH4H4elKanX6O/XH4/rczBl6F9IZpXLdirsVdiqyeeGCGSed1ihiUvLI5CqqqKszE7AAYQLV8Zf
+nJ+Ztx538yM0DsuhWBaLTIDUchWjTsD+1JT6FoPHOk0emGKP9I83X5cnEfJJ/KHl363KL25X9wh/
+dqf2iO+ZZNONI9Ges8cMRZqKij/OmV82KT3N3JcyVOyD7K+GXRjTAlaowsVVRiqsoxVVUYFRlsfh
+K+HTAVVsVaJoMVQ7rU1PXFVJlwqpEUO2Ko22m9RN/tr1/rgVWxVB6pLwtio+1JsPl3whUiYZJKi2
+KqTYVTLT9R50gmPx9Ec9/Y5VOPVmCu1fS4NRtWhkFGG8b9wciCyec3lpPZ3LwSjjIh/zIyTYDb6v
+/IL81T5r0c6Jq03LzBpkY/eOatc24+ES+JdNlfx2Pc05/X6Xw5cQ+k/Y5+DJxCjzetZr292KuxV4
+X/zk1+YjafpcXk/T5eN3qKiXU2U7pbV+GOo7ysN/8keDZtezdPZ4z05ONqMlCnznomlyalfJCB+7
+G8reAzduDI09QtoYreBIowFjjFB26ZWTbWlV9em4k4qf3S/ZHifHLoxpgSpLkkKy4EKqYqrLgVVT
+FVeJuJrgVFYqtZh0xVSY4qothVSbFWoJfTmU9jsfkcVTPAqSahcetMaH4F2X+uSCoFsKVJsVUWwq
+pN1xSnGnX/rp6ch/ep3/AJh45VKNMgUu8z6OL22M8S/6RCKj/KXuMESyBpjHlnzFqflvXrPWtNf0
+7yykDqD9lh0ZHH8rrVTkcuMTiYnq3RlRsPuXyl5n07zP5dstc09q215Hy4E1aNxs8be6MCDnLZcR
+hIxPR2UZcQtN8rZIXVtUs9K0u71O9f07Syhe4nfqQkalmoO5oNslCJkQBzKCaFvg/wA1+Yr3zJ5j
+1DXL01uL6ZpOPUIvRIx7IgCj5Z1WLGIRER0dZKVm2X+U9LFlp6yOKTzfE3iB2GTkejSTZRuq3nBB
+Ah+J93Pt4fThhHqwJSxTljFVU4qrKcUKqnAqsrYqqq2BVRXxVEQzD7J+g4FWGTc4qtZ8KqbNiqkz
+YqpM2FUVe3tIhEh+JgOZ8PbAAqVOcklSY4qpMcVUmOFVFsUrEleKRZENGU1GJFqyCC4SeBZV6N1H
+ge4ygiizYV5o0wWl560YpDPU7dA3cZJnEvWP+cYfPj2GuT+UryT/AEPVKzWHI7JcxrVlFf8AfqL9
+6jxzV9p4LjxjmHM086NPp3NG5jxr/nJ/zW2meTLfQ4H43GtzUlod/q9vR3+9yg+Vc2XZmLinxfzX
+H1EqFd75m0Cx+uapDGR8Cnm/yGb9wJHZ6SXSKMsdkQV+gZW1sfkmaaVpG6sa/wBBl4FMFynChVU4
+FVVbFVVWwIVFbFVRXxVUD4FXB8VdzxVoviq0viqmz4VU2bFVJmwqpM2KVJjiqkxwqh7ib0l5kVUH
+4vYHvkZGkgWsLAioNQehyQVTY4VRek3fpz+ix+CXp7N2+/ITDIIvWbFb2wkip8YHKM/5QysFkGD6
+ff3mmajb39o5iu7OVJoHHVZI2DKfoIxlEEEFtB6vvHyp5gtfMXlvTtbtqCK/gSbiDXgxFHSvijgq
+flnKZcZhIxPR2cZWLfLn/OS+unUfzJksVasWkW0NsF7c5B67n5/vQD8s3vZsKxX3uHqJXJi3ke1p
+HPckbsQin2GZ0uTiS5p5rE/C3WMHeQ7/ACG+GA3YFKFbLWKqrYoXtKsaF3NFHU4CaSAutZmkjEjC
+nI1UeA7ZGJsWpCIV8khUD4oXh8Crw+Kt+pirfqYq0ZMVWl8VWl8VU2fCqmzYpU2bFVJmwqps2KqE
+oDqynoRQ/TgIsJCV21yYZDDIfhrQHwOUY58Jotso3ujGOZLUplypBBoRuDilklvOJ4ElH7Q3+ff8
+coIosmFeYrP6tqclBRJfjX6ev44WyL6N/wCcV/MrXnlbUdAlasmlTiaAH/fN1U8R8pEcn/WzR9qY
+6mJd7naaW1Pn78wdROpeevMF6TVZtQuTGT/IJWCDfwUDNvp48OOI8nFmbkWQeWYvS0iDxern6csk
+0Hmp6zLyugnZFH3nfLMY2YFBq2TQqq2BUvurk3Eywxn4K0HufHMacuI0G2IoWm8ZCqFHQCg+jMim
+lUD4qvD4qvD4quEmKt+pihvnirXqYq0XxSsL4qsL4qsZ8VWM2FVNmxVSZsUqbNhVKNSTjPyHRxX6
+RtmLmjRboHZfZ3XNfTY/Ev2T4jLMU72YzirMcuYJxoU1YZIj+waj5H/ayvIGQQHnG3BhguAN1JQn
+2O4yIZR5su/5xn1k2P5lx2Rakeq2s9vx7cowJ1P3QkfTmB2lC8V9xcvTmpPK7iZp55Jm2aVmdgPF
+jXM8Cmh6FpI46dbr4IMEubSlWoyVvpT7gfcAMtjyYlRVskhQvrrgnpqfifr7DKcs6FM4RtS0xeU/
+Lsgr9J2yrCLLKZ2ThXzKaV4fFV4fFVwfArYfFW+eKu54q7nirRfFVpfFVpfCqwviqxnxVTZsUqbN
+hVTZsVQWoryh5d0NfoyrMLDOB3SxXZGDA7jpmKDRbimcUgkQOO/Ue+Z0ZWLaCKTPRH43ZXsykfdQ
+4J8lCJ8yxh9Il/yCrfccqDIc0B+Vd81j+ZHlqdTxrqFvEzVpRZnETVPhxc5Tqo3il7nIxmpBjVxC
+0FxLCxq0TshPuppl4NsGfaW/LT7dh/IPwwS5tKUaieN9KPcH7wDlseTEqBlVFLE7AVOEmlASqSZp
+JC7dTmFI2bbwKTLTBxhL93P4DMjCNmqZ3RwfLmC8PgVcJMVXCTFC7nirueKt88Va54q0XxVoyYqs
+L4pWl8VWF8KrC+KrC+KqbNilSko6sp6EUxIsKEmYEEg9RscwKchE2MvF/TPRunzy7DKjTCYTvSa/
+X4/9lX/gTl8+TWE01wA6TdA/yfxyoMgxfyg7R+bNEkVS7Jf2rBB1YiZTQfPIZvoPuLdHmEZ+YumN
+pfnzzBYkUEV/cemP+K3kLx/8IwyOnlxY4nyTkFSKbeW5hLpMQ7x1Q/Rl0mg80PrcZW6V+zr+I2yc
+DsxKR381AIh33b+GV55dGcB1QYOY7YncHwRKvgBXM6IoOOeaqHwoXh8VXB8VbD4q3zxVvn74Fdz9
+8Vdz98Va54VaL4qtL4qtL4qtL4qsL4pWF8VWE4VdiqWXicZ28G3+/MPKKk3ROyiCQQR1HTK2TJdA
+Pq3KyDshJ+fTMsyuNtNUUf5hkCaRPX9oBR9JyMUhJPy+tnuvPnl23TYyanaCvWg9dCT26DKtQaxy
+9xb4D1B6B/zk75dOnef49VRKQazbJIW7GaD91IP+AEZ+nMPszJeOu5t1EalbA/KF4FeW1Y/a+JPm
+M2J5OJJPNWt/VtCw+1F8Q+XfGBosSwiaT1JGfxO3yyiUrNtoFBu3XlMi++/0b4wFkLI7JuGzOaFw
+fAq4Piq4PirYfFW+eKHc8Vb54q1zxV3PFWi+KVpfFVpfFVpfFVpJwq7FXYq7FUFqC/Yf5g5j5xyL
+ZBB5jtjJvKYpDMT1Ygr8h1/HLIS6MJBrzfchbaO3B3c8iPYdMtHJEeae/wDOPejNqf5paY5XlFp6
+TXs3sI0KIf8AkbImYXaE+HEfPZycAuT3v/nILyY3mTyDPcWyF9R0Zje24HVo1FJ0/wCRfxe5UZqt
+Bm4MlHlLZys8Li+QrO5e2uY506oQfozow68i2cTXscmm+vGdpQAPmeuVZdgwiN2H31sYZagfu23X
+29soibbS6wWsxP8AKMvwjdrnyTHMtqdirsVdU4q3yOBW+eKu54q7nirueKtc8VdyOFWqnFXYq7FX
+Yq7FXYq7FUPerW3J/lIP8MqzD0s4c0FbwNNKEX/ZHwGYZNNrJ9IT05Sw+GKNDzPgP8xjislE+THd
+bvjeX7uPsL8Kj2GZZREPon/nFbym1roupeZ50o+oOLSzJG/owGsjD2aQ8f8AYZo+1MtyEO5ztNHa
+3u5AIIIqDsQc1TkvjP8AO78uX8m+bZDaxFdD1MtcaawHwpU1kg/55k7f5JGdJotR4kN/qHN1+bHw
+nyYZYam8SC3kP7ktUex6ZfmFhqA3TOSOOWMq26t/nUZiskNb2MsAkenKOoAcfxzN05u2nIq5ktbs
+VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVXfU5rmGQIvwgEs56Cm+V5T6SyjzXWdmEpFE
+OTt1PcnNfuS38m9Z1GO0tvqVu1ZG3lceOZmOHCGvmUJ5P8ral5p8x2Wh6etZ7uQK0lKrHGN5JW/y
+UXf8OuQzZRjiZFthHiNPufQdFsdD0Wy0iwThaWMKQQjuQgpybxZjuT45y2SZlIyPMuyiKFI/IJY7
+598kaV5z8uXGi6gOHP47W5ABeCZR8Ei/qI7ioy7BnOOXEGE4CQp8VebvKWs+VtbuNG1iAxXEJqjf
+sSxk/DJG3dW/sO4zpcWWOSNjk6+UTE0UDY6o1uRFPvF+y/hlU4UoZjorRS2bMpDqzkeI6DJ4uTVP
+m3caNbSEmMmJvbcfdmQJlhSBk0W7X7BVx7Gh/HJiYRSg2nXy9YW+jf8AVh4gtLDZ3Y/3RJ/wJ/pj
+xBDvqd3/AL4k/wCBb+mGwrvqd3/viT/gW/pjYV31O7/3xJ/wLf0xsK76nd/74k/4Fv6Y2Fd9Tu/9
+8Sf8C39MbCu+p3f++JP+Bb+mNhXfU7v/AHxJ/wAC39MbCu+p3f8AviT/AIFv6Y2Fd9Tu/wDfEn/A
+t/TGwrvqd3/viT/gW/pjYV31O7/3xJ/wLf0xsKuXT71ukLfSKfrwcQTSIj0W8b7XFB7mv6q4OMLS
+Ng0W3Qgykynw6D7sgZlNIudY1tnSqxJxK16AA7ZAi0jZjV/rVvbI0Fj8TnZ5z1+jwxhjEWW5Sazs
+7/U7+G0tIXur26cRwwxgs7uxoAAMMpACyzA6B9gfkv8AlPB5G0dri9Cy+Yr9R9dmWjCJK1EEbeA6
+se59gM53WarxZUPpDn4sXCPN6PmE3OxV2KsX/MD8uvLvnfSfqOqxlLiIE2V/GB60DGm6k9VNPiU7
+H50Iv0+oliNhhPGJDd8lfmF+U/mvyVcuNRtzcaWzUg1SEFoHBPwh/wDfb/5LfRXrnQYNVDKNufc4
+M8ZixTT766sCTbyFQTUqdxmRGNNUhaf2vnAUAuYd/wCZD/A4aDDhTOHzJpEg/vuB8HBGCkUUSmp6
+c/2bmL/ggP140qp9btD/ALuj/wCCH9caVv63a/7+j/4If1xpXfW7X/f0f/BD+uNK763a/wC/o/8A
+gh/XGld9btf9/R/8EP640rvrdr/v6P8A4If1xpXfW7X/AH9H/wAEP640rvrdr/v6P/gh/XGld9bt
+f9/R/wDBD+uNK763a/7+j/4If1xpXfW7X/f0f/BD+uNK763a/wC/o/8Agh/XGlWPqFgn2riMf7Mf
+1xpULN5h0iL/AHeHI7ICcaWktuvOCAEW0JJ7M/8AQYaCeEpHe6tfXh/fSHj2UbDDbIRTfyb+X3mv
+zhei20SyaVFNJrx6pbxf68pFP9iKsewyjNqIYxci2QgZcn1V+V35NeX/ACNbi5NL/X5FpPqLqBwq
+N0gU/YXxPVu+2w0Oq1ksu3KPc52PEI+96FmG2uxV2KuxV2KrJoIZ4XhnjWWGQFZI3AZWU7EEHYjC
+DSvKfN//ADjZ5E1t3uNL9TQbxySfqwD25J7+gxHH5IyjM/D2jkjsfUGiWnieWzybXf8AnGL8w7Bm
+bTWtdXi34iKUQy091m4KPoc5sIdp4zzsNEtPIcmFaj+V35i6eSLry5qACmheOB5kG9PtxB1/HMmO
+qxnlINZxyHRIp9G1eBuM9jcRNStHidTT6RlomD1Y0UJkkOxV2KuxV2KuxV2KuxV2KuxV2KuxVWt7
+K8uCBbwSTEniPTRm3PbYHfASBzWk7078uvPuo0+peXtQlU9JPq0qp/wbKF/HKpajHHnIMhjkejNt
+C/5xo/MnUSrX0dtpER+0bmYSPT2SD1d/YkZjT7SxDlu2x08i9V8pf84x+S9KZJ9cnl1y5U19Nv3F
+tX/jGhLt9L0PhmBl7SnL6fS3R04HPd65Y2Fjp9rHaWFvFaWsQpHBAixxqPZVAAzXSkSbLeBSvgS7
+FXYq/wD/2Q==</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description
+ rdf:about="">
+ <xapMM:DocumentID>uuid:0A41642B59EE11DA9346CE657E5F1B06</xapMM:DocumentID>
+ <xapMM:InstanceID>uuid:0A41642C59EE11DA9346CE657E5F1B06</xapMM:InstanceID>
+ <xapMM:DerivedFrom
+ rdf:parseType="Resource">
+ <stRef:instanceID>uuid:c939d50e-5853-11da-9437-000a95dac8e4</stRef:instanceID>
+ <stRef:documentID>uuid:FDEFD071588811DA91E5E11227A4C4DF</stRef:documentID>
+ </xapMM:DerivedFrom>
+ </rdf:Description>
+ <cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title>AVAHI</dc:title><dc:creator><cc:Agent><dc:title>Inkscape</dc:title></cc:Agent></dc:creator><dc:publisher><cc:Agent><dc:title>izo@aucuneid.net</dc:title></cc:Agent></dc:publisher><dc:subject><rdf:Bag><rdf:li>avahi tango freedesktop</rdf:li></rdf:Bag></dc:subject><cc:license
+ rdf:resource="http://creativecommons.org/licenses/by-nc-sa/2.0/" /></cc:Work><cc:License
+ rdf:about="http://creativecommons.org/licenses/by-nc-sa/2.0/"><cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" /><cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" /><cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" /><cc:requires
+ rdf:resource="http://web.resource.org/cc/Attribution" /><cc:prohibits
+ rdf:resource="http://web.resource.org/cc/CommercialUse" /><cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" /><cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" /></cc:License></rdf:RDF></svg:metadata></x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<xpacket />
+ </svg:metadata>
+<svg:switch
+ id="switch5">
+ <svg:foreignObject
+ requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ x="0"
+ y="0"
+ width="1"
+ height="1"
+ id="foreignObject7">
+ <i:pgfRef
+ xlink:href="#adobe_illustrator_pgf">
+ </i:pgfRef>
+ </svg:foreignObject>
+ <svg:g
+ i:extraneous="self"
+ id="g9">
+ <svg:g
+ id="g11">
+
+ <svg:radialGradient
+ id="path2329_1_"
+ cx="38.7061"
+ cy="-110.314"
+ r="18.9916"
+ gradientTransform="matrix(1,0,0,-0.6819,-21.9902,-50.4182)"
+ gradientUnits="userSpaceOnUse">
+ <svg:stop
+ offset="0"
+ style="stop-color:#729FCF"
+ id="stop14" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#3465A4"
+ id="stop16" />
+ </svg:radialGradient>
+
+ <svg:path
+ id="path2329"
+ nodetypes="cczcczc"
+ d="M 12.021,42.829 L 26.871,42.829 C 31.079,42.829 35.244,41.287 36.769,36.89 C 38.221,32.715 37.018,24.763 27.612,18.328 L 10.042,18.328 C 0.638,24.268 -0.537,32.391 1.628,37.137 C 3.833,41.972 7.566,42.829 12.021,42.829 z "
+ style="fill:url(#path2329_1_);stroke:#204a87;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round" />
+ <svg:path
+ id="path3812"
+ nodetypes="cccc"
+ d="M 19.12,22.039 C 19.12,22.039 16.108,24.363 16.368,27.164 C 13.511,24.643 13.429,19.812 13.429,19.812 L 19.12,22.039 z "
+ style="fill:#729fcf" />
+
+ <svg:path
+ id="path3838"
+ nodetypes="cczcczc"
+ enable-background="new "
+ d="M 12.168,41.339 L 26.61,41.339 C 30.307,41.339 33.965,39.984 35.308,36.121 C 36.579,32.455 35.174,25.469 26.913,19.816 L 10.779,19.816 C 2.519,25.033 1.137,32.17 3.038,36.339 C 4.977,40.587 8.256,41.339 12.168,41.339 z "
+ style="opacity:0.21520003;fill:none;stroke:#ffffff;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round" />
+ <svg:path
+ id="path3810"
+ nodetypes="cccc"
+ d="M 20.491,22.039 C 20.491,22.039 23.5,24.363 23.24,27.164 C 26.097,24.643 26.179,19.812 26.179,19.812 L 20.491,22.039 z "
+ style="fill:#729fcf" />
+
+ <svg:linearGradient
+ id="path4368_1_"
+ gradientUnits="userSpaceOnUse"
+ x1="84.215797"
+ y1="80.128899"
+ x2="86.967102"
+ y2="79.569199"
+ gradientTransform="matrix(0.9834,0.1816,0.1816,-0.9834,-93.3736,97.3126)">
+ <svg:stop
+ offset="0"
+ style="stop-color:#000000"
+ id="stop23" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop25" />
+ </svg:linearGradient>
+ <svg:path
+ id="path4368"
+ nodetypes="cccc"
+ enable-background="new "
+ d="M 5.982,41.38 C 4.236,40.617 3.454,38.779 3.454,38.779 C 4.632,33.082 8.662,28.914 8.662,28.914 C 8.662,28.914 5.471,37.891 5.982,41.38 z "
+ style="opacity:0.22780002;fill:url(#path4368_1_)" />
+
+ <svg:linearGradient
+ id="path4370_1_"
+ gradientUnits="userSpaceOnUse"
+ x1="-698.33789"
+ y1="-77.105003"
+ x2="-700.1275"
+ y2="-76.193901"
+ gradientTransform="matrix(-0.9777,0.2101,-0.2101,-0.9777,-667.8553,105.2513)">
+ <svg:stop
+ offset="0"
+ style="stop-color:#000000"
+ id="stop29" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#000000"
+ id="stop31" />
+ </svg:linearGradient>
+ <svg:path
+ id="path4370"
+ nodetypes="cccc"
+ enable-background="new "
+ d="M 32.451,40.18 C 34.174,39.367 34.974,37.377 34.974,37.377 C 33.632,31.717 29.41,27.795 29.41,27.795 C 29.41,27.795 32.861,36.675 32.451,40.18 z "
+ style="opacity:0.22780002;fill:url(#path4370_1_)" />
+ </svg:g>
+
+ <namedview
+ showgrid="false"
+ pagecolor="#ffffff"
+ window-x="472"
+ bordercolor="#666666"
+ cy="24.622653"
+ zoom="9.8994949"
+ pageshadow="2"
+ cx="25.799661"
+ grid-bbox="true"
+ window-height="695"
+ document-units="px"
+ window-width="770"
+ showpageshadow="false"
+ borderopacity="0.17254902"
+ pageopacity="0.0"
+ window-y="167"
+ current-layer="layer1">
+ </namedview>
+ <svg:g
+ id="g34">
+
+ <svg:linearGradient
+ id="XMLID_1_"
+ gradientUnits="userSpaceOnUse"
+ x1="-147.7383"
+ y1="-97.484398"
+ x2="-137.5947"
+ y2="-97.484398"
+ gradientTransform="matrix(-0.7135,-0.7006,-0.7006,0.7135,-141.2909,-25.0322)">
+ <svg:stop
+ offset="0"
+ style="stop-color:#C17D11"
+ id="stop37" />
+ <svg:stop
+ offset="0.2735"
+ style="stop-color:#BD7A10"
+ id="stop39" />
+ <svg:stop
+ offset="0.5694"
+ style="stop-color:#B0700C"
+ id="stop41" />
+ <svg:stop
+ offset="0.8747"
+ style="stop-color:#9A6105"
+ id="stop43" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#8F5902"
+ id="stop45" />
+ </svg:linearGradient>
+ <svg:path
+ d="M 25.182,1.811 C 23.599,3.424 23.934,6.324 25.93,8.286 C 27.929,10.25 30.832,10.531 32.418,8.918 C 34.003,7.305 33.668,4.406 31.669,2.443 C 29.672,0.48 26.768,0.197 25.182,1.811 z "
+ id="path47"
+ style="fill:url(#XMLID_1_);stroke:#6f4709;stroke-width:1.39999998" />
+
+ <svg:linearGradient
+ id="XMLID_2_"
+ gradientUnits="userSpaceOnUse"
+ x1="-49.540501"
+ y1="-1.0635"
+ x2="-39.397499"
+ y2="-1.0635"
+ gradientTransform="matrix(0.7135,-0.7006,0.7006,0.7135,41.6581,-25.0322)">
+ <svg:stop
+ offset="0"
+ style="stop-color:#C17D11"
+ id="stop50" />
+ <svg:stop
+ offset="0.2735"
+ style="stop-color:#BD7A10"
+ id="stop52" />
+ <svg:stop
+ offset="0.5694"
+ style="stop-color:#B0700C"
+ id="stop54" />
+ <svg:stop
+ offset="0.8747"
+ style="stop-color:#9A6105"
+ id="stop56" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#8F5902"
+ id="stop58" />
+ </svg:linearGradient>
+ <svg:path
+ d="M 12.801,1.811 C 14.384,3.424 14.049,6.324 12.053,8.286 C 10.054,10.25 7.151,10.531 5.565,8.918 C 3.98,7.305 4.315,4.406 6.314,2.443 C 8.311,0.48 11.215,0.197 12.801,1.811 z "
+ id="path60"
+ style="fill:url(#XMLID_2_);stroke:#6f4709;stroke-width:1.39999998" />
+
+ <svg:radialGradient
+ id="path2327_1_"
+ cx="159.8369"
+ cy="-47.0518"
+ r="12.3745"
+ gradientTransform="matrix(0.788,0,0,-0.788,-109.7853,-28.1509)"
+ gradientUnits="userSpaceOnUse">
+ <svg:stop
+ offset="0"
+ style="stop-color:#E9B15E"
+ id="stop63" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#966416"
+ id="stop65" />
+ </svg:radialGradient>
+
+ <svg:path
+ id="path2327"
+ type="arc"
+ ry="8.6620579"
+ cx="31.112698"
+ rx="8.6620579"
+ cy="19.008621"
+ d="M 30.77,9.777 C 30.773,16.473 25.348,21.907 18.649,21.909 C 11.951,21.912 6.52,16.486 6.516,9.788 C 6.516,9.785 6.516,9.78 6.516,9.777 C 6.513,3.078 11.938,0.704 18.637,0.7 C 25.334,0.696 30.767,3.067 30.77,9.763 C 30.77,9.769 30.77,9.771 30.77,9.777 z "
+ style="fill:url(#path2327_1_);stroke:#6f4709;stroke-width:1.39999998;stroke-linecap:round;stroke-linejoin:round" />
+
+ <svg:path
+ id="path3834"
+ type="arc"
+ ry="8.6620579"
+ cx="31.112698"
+ rx="8.6620579"
+ cy="19.008621"
+ enable-background="new "
+ d="M 29.279,9.777 C 29.282,15.65 24.521,20.415 18.648,20.418 C 12.774,20.422 8.01,15.661 8.006,9.788 C 8.006,9.782 8.006,9.78 8.006,9.777 C 8.003,3.901 12.764,2.356 18.637,2.353 C 24.511,2.35 29.277,3.889 29.28,9.766 C 29.279,9.769 29.279,9.771 29.279,9.777 z "
+ style="opacity:0.12660002;fill:none;stroke:#ffffff;stroke-width:1.59619999;stroke-linecap:round;stroke-linejoin:round" />
+ <svg:radialGradient
+ id="XMLID_3_"
+ cx="19.202101"
+ cy="17.4814"
+ r="1.9231"
+ gradientUnits="userSpaceOnUse">
+ <svg:stop
+ offset="0"
+ style="stop-color:#EF2929"
+ id="stop70" />
+ <svg:stop
+ offset="0.4553"
+ style="stop-color:#DD1414"
+ id="stop72" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#CC0000"
+ id="stop74" />
+ </svg:radialGradient>
+ <svg:path
+ d="M 21.547,16.603 C 21.547,17.848 20.496,18.86 19.202,18.86 C 17.908,18.86 16.857,17.848 16.857,16.603 C 16.857,15.354 17.908,16.84 19.202,16.84 C 20.496,16.84 21.547,15.354 21.547,16.603 z "
+ id="path76"
+ style="fill:url(#XMLID_3_);stroke:#cc0000;stroke-width:0.16240001;stroke-linecap:round;stroke-linejoin:round" />
+ <svg:g
+ id="g78">
+ <svg:g
+ id="g80">
+ <svg:radialGradient
+ id="XMLID_4_"
+ cx="19.250999"
+ cy="12.7207"
+ r="4.7763"
+ gradientUnits="userSpaceOnUse">
+ <svg:stop
+ offset="0"
+ style="stop-color:#555753"
+ id="stop83" />
+ <svg:stop
+ offset="0.4309"
+ style="stop-color:#424645"
+ id="stop85" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#2E3436"
+ id="stop87" />
+ </svg:radialGradient>
+ <svg:path
+ d="M 16.056,14.185 C 16.81,13.081 17.732,11.991 18.281,11.139 C 18.868,10.297 19.079,7.218 19.253,7.225 C 19.425,7.218 19.637,10.297 20.224,11.139 C 20.771,11.991 21.693,13.08 22.449,14.185 C 23.2,15.292 23.44,16.268 22.843,17.004 C 22.281,17.733 20.881,18.221 19.254,18.217 C 17.625,18.221 16.225,17.733 15.664,17.004 C 15.062,16.268 15.305,15.292 16.056,14.185 z "
+ id="path89"
+ style="fill:url(#XMLID_4_)" />
+ </svg:g>
+ <svg:g
+ id="g91">
+
+ <svg:linearGradient
+ id="XMLID_5_"
+ gradientUnits="userSpaceOnUse"
+ x1="35.154301"
+ y1="-75.928703"
+ x2="36.964802"
+ y2="-75.928703"
+ gradientTransform="matrix(-0.8133,-0.5818,-0.5818,0.8133,6.2482,98.8567)">
+ <svg:stop
+ offset="0"
+ style="stop-color:#EEEEEC"
+ id="stop94" />
+ <svg:stop
+ offset="0.173"
+ style="stop-color:#D2D3D2"
+ id="stop96" />
+ <svg:stop
+ offset="0.5467"
+ style="stop-color:#8B8E8F"
+ id="stop98" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#2E3436"
+ id="stop100" />
+ </svg:linearGradient>
+ <svg:path
+ d="M 20.774,15.892 C 20.295,16.532 19.112,16.501 19.778,16.959 C 20.444,17.417 21.37,17.27 21.847,16.63 C 22.321,15.988 22.166,15.096 21.502,14.638 C 20.835,14.18 21.25,15.249 20.774,15.892 z "
+ id="path102"
+ style="opacity:0.3;fill:url(#XMLID_5_)" />
+
+ <svg:linearGradient
+ id="XMLID_6_"
+ gradientUnits="userSpaceOnUse"
+ x1="29.1709"
+ y1="-80.1465"
+ x2="30.9785"
+ y2="-80.1465"
+ gradientTransform="matrix(0.8133,-0.5818,0.5818,0.8133,39.576,98.8567)">
+ <svg:stop
+ offset="0"
+ style="stop-color:#EEEEEC"
+ id="stop105" />
+ <svg:stop
+ offset="0.173"
+ style="stop-color:#D2D3D2"
+ id="stop107" />
+ <svg:stop
+ offset="0.5467"
+ style="stop-color:#8B8E8F"
+ id="stop109" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#2E3436"
+ id="stop111" />
+ </svg:linearGradient>
+ <svg:path
+ d="M 17.728,15.944 C 18.205,16.586 19.39,16.552 18.724,17.012 C 18.059,17.468 17.133,17.321 16.658,16.681 C 16.183,16.041 16.336,15.148 17,14.689 C 17.665,14.232 17.252,15.304 17.728,15.944 z "
+ id="path113"
+ style="opacity:0.3;fill:url(#XMLID_6_)" />
+ </svg:g>
+ </svg:g>
+ <svg:ellipse
+ cx="13.243"
+ cy="7.4829998"
+ rx="3.6570001"
+ ry="3.5209999"
+ id="ellipse115"
+ sodipodi:cx="13.243"
+ sodipodi:cy="7.4829998"
+ sodipodi:rx="3.6570001"
+ sodipodi:ry="3.5209999"
+ style="fill:#ffffff;stroke:#2e3436;stroke-width:1.39999998" />
+
+ <svg:radialGradient
+ id="XMLID_7_"
+ cx="9.3857002"
+ cy="22.077101"
+ r="3.7695"
+ gradientTransform="matrix(0.9241,0,0,0.8901,4.5696,-12.1687)"
+ gradientUnits="userSpaceOnUse">
+ <svg:stop
+ offset="0"
+ style="stop-color:#FCE94F"
+ id="stop118" />
+ <svg:stop
+ offset="0.3535"
+ style="stop-color:#FBE651"
+ id="stop120" />
+ <svg:stop
+ offset="0.6"
+ style="stop-color:#F7DD57"
+ id="stop122" />
+ <svg:stop
+ offset="0.8134"
+ style="stop-color:#F1CE61"
+ id="stop124" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#E9B96E"
+ id="stop126" />
+ </svg:radialGradient>
+ <svg:ellipse
+ cx="13.243"
+ cy="7.4829998"
+ rx="3.483"
+ ry="3.355"
+ id="ellipse128"
+ sodipodi:cx="13.243"
+ sodipodi:cy="7.4829998"
+ sodipodi:rx="3.483"
+ sodipodi:ry="3.355"
+ style="fill:url(#XMLID_7_)" />
+
+ <svg:radialGradient
+ id="XMLID_8_"
+ cx="9.5366001"
+ cy="20.9419"
+ r="3.1631"
+ gradientTransform="matrix(0.9241,0,0,0.8901,4.5696,-12.1687)"
+ gradientUnits="userSpaceOnUse">
+ <svg:stop
+ offset="0"
+ style="stop-color:#EEEEEC"
+ id="stop131" />
+ <svg:stop
+ offset="0.2125"
+ style="stop-color:#EBEBE9"
+ id="stop133" />
+ <svg:stop
+ offset="0.3608"
+ style="stop-color:#E2E2E1"
+ id="stop135" />
+ <svg:stop
+ offset="0.4895"
+ style="stop-color:#D3D3D2"
+ id="stop137" />
+ <svg:stop
+ offset="0.6072"
+ style="stop-color:#BDBEBD"
+ id="stop139" />
+ <svg:stop
+ offset="0.7172"
+ style="stop-color:#A0A3A2"
+ id="stop141" />
+ <svg:stop
+ offset="0.8216"
+ style="stop-color:#7E8181"
+ id="stop143" />
+ <svg:stop
+ offset="0.9197"
+ style="stop-color:#555A5B"
+ id="stop145" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#2E3436"
+ id="stop147" />
+ </svg:radialGradient>
+ <svg:path
+ d="M 9.898,7.684 C 9.898,5.83 11.459,4.33 13.382,4.33 C 15.305,4.33 16.865,5.831 16.865,7.684 C 16.865,9.537 15.304,8.055 13.382,8.055 C 11.459,8.055 9.898,9.536 9.898,7.684 z "
+ id="path149"
+ style="opacity:0.1566265;fill:url(#XMLID_8_)" />
+
+ <svg:radialGradient
+ id="XMLID_9_"
+ cx="9.3857002"
+ cy="22.077101"
+ r="2.1484001"
+ gradientTransform="matrix(0.9241,0,0,0.8901,4.5696,-12.1687)"
+ gradientUnits="userSpaceOnUse">
+ <svg:stop
+ offset="0"
+ style="stop-color:#8F5902"
+ id="stop152" />
+ <svg:stop
+ offset="0.273"
+ style="stop-color:#8C5804"
+ id="stop154" />
+ <svg:stop
+ offset="0.4635"
+ style="stop-color:#835408"
+ id="stop156" />
+ <svg:stop
+ offset="0.6288"
+ style="stop-color:#744F11"
+ id="stop158" />
+ <svg:stop
+ offset="0.7799"
+ style="stop-color:#5E461C"
+ id="stop160" />
+ <svg:stop
+ offset="0.9198"
+ style="stop-color:#423C2B"
+ id="stop162" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#2E3436"
+ id="stop164" />
+ </svg:radialGradient>
+ <svg:ellipse
+ cx="13.243"
+ cy="7.4829998"
+ rx="1.985"
+ ry="1.911"
+ id="ellipse166"
+ sodipodi:cx="13.243"
+ sodipodi:cy="7.4829998"
+ sodipodi:rx="1.985"
+ sodipodi:ry="1.911"
+ style="fill:url(#XMLID_9_);stroke:#2e3436;stroke-width:0.1367" />
+ <svg:linearGradient
+ id="XMLID_10_"
+ gradientUnits="userSpaceOnUse"
+ x1="11.3965"
+ y1="7.4829001"
+ x2="13.6787"
+ y2="7.4829001">
+ <svg:stop
+ offset="0"
+ style="stop-color:#EEEEEC"
+ id="stop169" />
+ <svg:stop
+ offset="0.2125"
+ style="stop-color:#EBEBE9"
+ id="stop171" />
+ <svg:stop
+ offset="0.3608"
+ style="stop-color:#E2E2E1"
+ id="stop173" />
+ <svg:stop
+ offset="0.4895"
+ style="stop-color:#D3D3D2"
+ id="stop175" />
+ <svg:stop
+ offset="0.6072"
+ style="stop-color:#BDBEBD"
+ id="stop177" />
+ <svg:stop
+ offset="0.7172"
+ style="stop-color:#A0A3A2"
+ id="stop179" />
+ <svg:stop
+ offset="0.8216"
+ style="stop-color:#7E8181"
+ id="stop181" />
+ <svg:stop
+ offset="0.9197"
+ style="stop-color:#555A5B"
+ id="stop183" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#2E3436"
+ id="stop185" />
+ </svg:linearGradient>
+ <svg:path
+ d="M 13.06,7.483 C 13.06,8.478 14.301,9.285 13.268,9.285 C 12.235,9.285 11.397,8.478 11.397,7.483 C 11.397,6.487 12.235,5.68 13.268,5.68 C 14.301,5.68 13.06,6.487 13.06,7.483 z "
+ id="path187"
+ style="opacity:0.15;fill:url(#XMLID_10_)" />
+ <svg:ellipse
+ cx="24.877001"
+ cy="7.4829998"
+ rx="3.658"
+ ry="3.5209999"
+ id="ellipse189"
+ sodipodi:cx="24.877001"
+ sodipodi:cy="7.4829998"
+ sodipodi:rx="3.658"
+ sodipodi:ry="3.5209999"
+ style="fill:#ffffff;stroke:#2e3436;stroke-width:1.39999998" />
+
+ <svg:radialGradient
+ id="XMLID_11_"
+ cx="-179.37601"
+ cy="22.077101"
+ r="3.77"
+ gradientTransform="matrix(-0.9241,0,0,0.8901,-140.8831,-12.1687)"
+ gradientUnits="userSpaceOnUse">
+ <svg:stop
+ offset="0"
+ style="stop-color:#FCE94F"
+ id="stop192" />
+ <svg:stop
+ offset="0.3535"
+ style="stop-color:#FBE651"
+ id="stop194" />
+ <svg:stop
+ offset="0.6"
+ style="stop-color:#F7DD57"
+ id="stop196" />
+ <svg:stop
+ offset="0.8134"
+ style="stop-color:#F1CE61"
+ id="stop198" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#E9B96E"
+ id="stop200" />
+ </svg:radialGradient>
+ <svg:ellipse
+ cx="24.878"
+ cy="7.4829998"
+ rx="3.484"
+ ry="3.355"
+ id="ellipse202"
+ sodipodi:cx="24.878"
+ sodipodi:cy="7.4829998"
+ sodipodi:rx="3.484"
+ sodipodi:ry="3.355"
+ style="fill:url(#XMLID_11_)" />
+
+ <svg:radialGradient
+ id="XMLID_12_"
+ cx="-179.22459"
+ cy="20.9419"
+ r="3.1616001"
+ gradientTransform="matrix(-0.9241,0,0,0.8901,-140.8831,-12.1687)"
+ gradientUnits="userSpaceOnUse">
+ <svg:stop
+ offset="0"
+ style="stop-color:#EEEEEC"
+ id="stop205" />
+ <svg:stop
+ offset="0.2125"
+ style="stop-color:#EBEBE9"
+ id="stop207" />
+ <svg:stop
+ offset="0.3608"
+ style="stop-color:#E2E2E1"
+ id="stop209" />
+ <svg:stop
+ offset="0.4895"
+ style="stop-color:#D3D3D2"
+ id="stop211" />
+ <svg:stop
+ offset="0.6072"
+ style="stop-color:#BDBEBD"
+ id="stop213" />
+ <svg:stop
+ offset="0.7172"
+ style="stop-color:#A0A3A2"
+ id="stop215" />
+ <svg:stop
+ offset="0.8216"
+ style="stop-color:#7E8181"
+ id="stop217" />
+ <svg:stop
+ offset="0.9197"
+ style="stop-color:#555A5B"
+ id="stop219" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#2E3436"
+ id="stop221" />
+ </svg:radialGradient>
+ <svg:path
+ d="M 28.22,7.684 C 28.22,5.83 26.662,4.33 24.741,4.33 C 22.816,4.33 21.258,5.831 21.258,7.684 C 21.258,9.537 22.817,8.055 24.741,8.055 C 26.662,8.055 28.22,9.536 28.22,7.684 z "
+ id="path223"
+ style="opacity:0.15;fill:url(#XMLID_12_)" />
+
+ <svg:radialGradient
+ id="XMLID_13_"
+ cx="-179.375"
+ cy="22.077101"
+ r="2.1484001"
+ gradientTransform="matrix(-0.9241,0,0,0.8901,-140.8831,-12.1687)"
+ gradientUnits="userSpaceOnUse">
+ <svg:stop
+ offset="0"
+ style="stop-color:#8F5902"
+ id="stop226" />
+ <svg:stop
+ offset="0.273"
+ style="stop-color:#8C5804"
+ id="stop228" />
+ <svg:stop
+ offset="0.4635"
+ style="stop-color:#835408"
+ id="stop230" />
+ <svg:stop
+ offset="0.6288"
+ style="stop-color:#744F11"
+ id="stop232" />
+ <svg:stop
+ offset="0.7799"
+ style="stop-color:#5E461C"
+ id="stop234" />
+ <svg:stop
+ offset="0.9198"
+ style="stop-color:#423C2B"
+ id="stop236" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#2E3436"
+ id="stop238" />
+ </svg:radialGradient>
+ <svg:path
+ d="M 22.892,7.483 C 22.892,8.538 23.781,9.394 24.88,9.394 C 25.975,9.394 26.862,8.538 26.862,7.483 C 26.862,6.427 25.974,5.569 24.88,5.569 C 23.78,5.569 22.892,6.428 22.892,7.483 z "
+ id="path240"
+ style="fill:url(#XMLID_13_);stroke:#2e3436;stroke-width:0.1367" />
+
+ <svg:linearGradient
+ id="XMLID_14_"
+ gradientUnits="userSpaceOnUse"
+ x1="-183.62109"
+ y1="7.4829001"
+ x2="-181.33791"
+ y2="7.4829001"
+ gradientTransform="matrix(-1,0,0,1,-156.8955,0)">
+ <svg:stop
+ offset="0"
+ style="stop-color:#EEEEEC"
+ id="stop243" />
+ <svg:stop
+ offset="0.2125"
+ style="stop-color:#EBEBE9"
+ id="stop245" />
+ <svg:stop
+ offset="0.3608"
+ style="stop-color:#E2E2E1"
+ id="stop247" />
+ <svg:stop
+ offset="0.4895"
+ style="stop-color:#D3D3D2"
+ id="stop249" />
+ <svg:stop
+ offset="0.6072"
+ style="stop-color:#BDBEBD"
+ id="stop251" />
+ <svg:stop
+ offset="0.7172"
+ style="stop-color:#A0A3A2"
+ id="stop253" />
+ <svg:stop
+ offset="0.8216"
+ style="stop-color:#7E8181"
+ id="stop255" />
+ <svg:stop
+ offset="0.9197"
+ style="stop-color:#555A5B"
+ id="stop257" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#2E3436"
+ id="stop259" />
+ </svg:linearGradient>
+ <svg:path
+ d="M 25.062,7.483 C 25.062,8.478 23.821,9.285 24.853,9.285 C 25.886,9.285 26.726,8.478 26.726,7.483 C 26.726,6.487 25.886,5.68 24.853,5.68 C 23.82,5.681 25.062,6.487 25.062,7.483 z "
+ id="path261"
+ style="opacity:0.15;fill:url(#XMLID_14_)" />
+ <svg:path
+ d="M 22.559,18.449 C 22.559,19.856 21.078,20.996 19.251,20.996 C 17.424,20.996 15.944,19.856 15.944,18.449 C 15.944,17.044 17.424,18.874 19.251,18.874 C 21.078,18.874 22.559,17.044 22.559,18.449 z "
+ id="path263"
+ style="fill:#6f4709" />
+ </svg:g>
+ </svg:g>
+</svg:switch>
+<i:pgf>
+
+ eJzs/eda68ySAAp/N6B7sAGDwUnBkWxZssnR5OggwOCEw7v3Oz/O9Zy5jrmxUx0ktWQlhz17Zr5F
+P4tlrFbHyl3VFQlfXCeKzV5dS0hJPsRFIqWBVhv1Bpsh/G3osN0eD0cD9FX0aj0kiEkeKhUP82+0
+4q02GLZ63U38KCnAwzJ6OyoIkpAQBD6fyPC5bEJM82IiI/FSosALwrrfc2im2hq1NWio9lftq5UQ
+krXWuj486E+pjeChkE8JQorPwIdNHg1M7o27zVb3U+79czMk5fmQmMuH0kIhJIkiPD5oXWlDe51k
+VsrmUMWklMmmoXY+mRUKArwiJPP5TA7eU3qNcUfrji4GvYY2HJZ67d5guBkq/V3rhk5rn/CkFnrQ
+2u3eP0Jyu9b44WCFMm/lVluDxejURqE8WrbioSC+yeNWu3k27tQ1WCWRz6CvpTfc4s0QmoJW0Wf0
+de7tsAPfXGujEQwX+kMzvKrIJdiRXgdXg+9wiT5daf3/+s8BVH8JoeVDjVa1Tr8N60QmWigkMyGJ
+59Fv8zOtCSPFtRKFZKHAi1JIyCQzfLoQyvM5/E0ok88m04WMQF4wF0T7q6X9YzN01utqZNbFwei6
+9R8wjzSsfJ58dzVua4ObbmsEk8iirwpkxqe9ptaGbTTeLLdreKK4COZvUqFaG3xqI9jCXns8wkCX
+5+kjWNGT2t8a2hWBdHDe17rV3i0eXUIAGMmKWWhM4AUxlM2KIfgLNZ8N5STch4ALrw8GvY5e1ltF
+YHABy3s+aH22upsSQEpCzOfJPlUGraa5TTkxlCe/8NiTeeZfQf9HBgnzHY20Lh00gEfplNluPnl6
+Dd2q3Wap10HLPUQgrkH/AIjt3id5ZnzGT+D1cZ9MAf/9BjtzMWh1UZvcGX6Sf7toj+FRZdAb9w+7
+Hz0uSpC9Oqg1oFrovP6tNUaApLfwX2/QGmKUs/8NGNlf92zvuoFmNwjJg/HwK1Tt9drQBuw5QENI
++yc86WqUzCA00ULN1sfHeKhBJcvf/4M6uqiNvgDFtW5zONmD8iwK2c9BrYn+DzW10AdqfEh6huqW
+58NAnaGGz7uk16Bz00Kd3qj1YUyuNhi1hqPW7zjY/P67uwSsD9CdvV1jUf8XdFiqtdst2Pf+V6sR
+oM+GWX2yX+tD/76BwAxgW/FD1Aj6E/4/qLV7AdDq7069124NO/CG8dkckfmVf1OKhpDBHIgjNKnd
+v7R2r99HjRufQ9oohDHmA7NSH8KD9vWj1W0CMbget0bMwvU6/d4QtWNOQIXeu0h6CZmvBcCRdq1b
+G4Tw95MzudCA1o5hzZt/d2sdvIPNNb3Dk9ZfCMeghtFN5g1IOEukEwlOEEJyl6HhFaAZLSD/IA3d
+dKFVrRn6pF8hZu/0JbAeMSQ3uSdum+NLcxTFVuA7tkEVirWCavmuTP9W4VNZ/0vgyV/Ai/EnDn3A
+RaC/yY+Ii4RLGkpWyEDJQsnR3zkhD6Ug5LldNNFM4JKbKFkoeaYU+SKHfkGRaWEnrdIJkB8Jxpk2
+xojGVYAiC0WhJKhQykIZpiJxoiimxYwIooiYh1IQZVGBooLgK0qSlJFyUlbKSwWpKJUkRSqn+bSY
+Tqcz6Wy6kC6m5bSCJ1rKTF3SlmL7nmMeSY5FpEWgBa+DXIaiQlHgXwkX9FOUixz8Ksh5OQclCyUD
+BUYvS1Bgzmgxi+WiCkWBIhfRT6GYg5IpSkWxKBTKMFEeplouzVHkycIxfxQnSsFS8kbJMSVLS4YU
+rpymRcJFpEXAhQB9GQr5UaCUcEELh1agoBbwnqIPAUveseSYklWzHPoFJUNLmhYJFxEXDJsYXcu4
+oOGhnxIU2FTYmwKUPJSckuWUrJJR0lAkBLOKAMQArbIKtUuw98VSAUq+lCtlMVxJGFx4DCIlDBZk
+ounytMUVjTE94Mh/uIhMkYySpkX/yeKSwyWPSwEXAD4EqBz8QrgBs8VLB7uMiAOiOAhxQV0E6R+3
+gX5y2TyUQrYIRc6WsrBKWRUmmg5F3uQBEGA+yadzfAZJ/bxQACIDH3I5MQPaFdIOCvm8KGXQB0GC
+b+GDxBfyfBrody6XzIh5pERAU6AJvC2iKXmIRlRIC0IeV4B24OtkFt4UaTP627TlZBoIMGhJoASC
+esSzo5mrGRiJrBg8UGdyQfke78j4eCvn8/oReQlDURaIfwHT+RJmWISqE3quc5s8pudFDki6jAmg
+ghCH4G0eMLIIyFwC7FHVMuFsmARIBHoR/GDKQWgJoS2E3pi0SCdZCldWmEL6AJgqAEqWAVUlQOkC
+9KZCLyK0noUWi+i98hQ/nO3PXe+1EpgiMkWiJY1LBrPQLGWneQ5z0QJd2iJZqzImgYT8FTEly1Ei
+lcZECZMjTIgIGUIkqIhJUA7hFUN/BER/OEqACAkq4T6AqebFHOBpBlitBAxXEHmgxCq8UMIcGaQF
+LD9k8A4jzi1gMUTF0g1mTTDoPBUJMhxMDU1SxNPn/5v6MKkHwiSCxXwSJAOkWuLvEHIh7BJgxfNp
+84MYSiPbTSbLkI152sD0QhBy2XQOvVJANZBhI8nThpBdA8okdZjmpflogbMQDFIwb9KCCZlGsRTC
+F/X/VcLLYVfwb1zQVoq4SOgfB/+lsWyGpDP0DyabzuN/eSytIXkNlRLALPqnAjVQDW5G2JVEWRU0
+wDHcifAmnSshnoTALu/0U7CV4kSRaSnhov8POMXlFVpU+FfGYgT8BsAsA7mjvxHhK4jwD3YO/0vD
+7zQudICFbCGH/+U59AuK/lPERQa5AP7hKZRVhzLHD+dfZYENEkJZniwCP1GclBhdkUlTeQUzF45q
+MZTH4KIzGYXqDjxuRcLgh9SHHBSiPsgglYMCgdkND+2LUpoDmQcJKTmsScgY1FUMwAhssf4g2IpF
+5TOYkkoLlgUZAR+L+CDfF7CMD1I+5yjmI2bJCvogIRqifh4L+1mQuBCiYJEfsQngjCqInCUOmkag
+UwBgQrCVwVAnEqjEU8gpDqVkK7JRirQUaMnTQn5AiOPgF0E7wOCchAtaZqTMEf0QCf2IWSFGBCIu
+mi8W+gpYAERtoJ8MogOw+iIHkiLaYB5rCSqWJkuwQEjIJIKw4PczCVS8rjJbClWxOZvuTdV1c1+N
+UjRKgRZd62W14SyHeBMthAjqHB8A0iriShlYAwkJgIjqZzCtR3CaRuwlo7MXKY2OEoALoL+dBMr5
+msGsCgugqFZGQj8m+4H6GRCQ0aOc3g00BIIreoRFeWgqW0gi5GVl7oW1OB+TEx2ZnGgReKmoKlMJ
+FREOEcgGIRl5sYjJhWqQCklKY1qRozYHWacWlO0JHOZ2hMXlbKytRJmaztJ0/UvXuFhNS9exihzD
+zvD3hL+VsKqF0KSMFS2RqlhEvTKVK6JgqQgXAUoFjKESDAzhLaAwxmT4ncc4XgS8R1RAAY24jMFb
+yIv4H0wXZpJBeAtEIE/5poy5YokyRJCrOcz9RDxYQBsBaJqE6VsGcD8PxK8IpBARRRXkdx7IqIhN
+K2mgDjlgsQUgeDKSS0E6VUFC50FslbAAm0HadA76KQJhLWFZV8XSvQAycBqr61mQjPOGXqFrFkSn
+wNPHmgSR/FWGcfnJ8qw8b5Xj04Ycn6FyvCHAc9T8pTBmLxHzsoyhHulsi4W7NIa7AoY7ZDOwsaic
+bvggaoCpBOgqQInaIIj4nzFEf95mdrAYHThsdVAxx5INO1QWsybClghLUig7IsyIsCLKiHQ2hLlQ
+gSNMiIDB5Nt+77twMSxzlTgsmRUB/vIAiVmAyTTAJoJSHjRGFfM0wr8KmFtlMYOSMGPiMUPSmRFh
+RDmO8CCCYCrLcwDZgEoBUqYxioqArjyWSBWMyjIgdQHLr1mM8Gks5gpYBCaicYkD8lAEQpHHZsos
+tJIGEiLClvLY5qXCFpdgq4tYP7JrSHYdCbQkjqhJNmuJTkGlNGICiBnQb1ijQtYwPcCsxRxhAhbT
+xBytYEZi8KIMMWBgXiSgL9F3uqkF6TMZpOTwqIGMF0+brZ25mIYjzxAtepGQWWxxazA3dSFCcZ7T
+P0yUgkspOhTZLBz9oNikYJVYdWgpm4W1eYgCU+gPh4mdXtJGyWL4z2BpXTf556nhn5QiLTKV5ElR
+OHIqQAqWt8pUfSB9kJ80Llkq6+cwF0eliAvh5VTR5Yhma9NkSQumEosK4fCm+lqifJ5yep3Xcwyz
+N1VWg81jps7aT1nLKbGaEsZewIwd2DpHObuKObvO2ylnx0J6HrN0lqmrlLELlKnjwetsnbNxdqLz
+qtQGhxk7VmRNFZZorkX8T8ZaKzJ/q9haxxcFDgOSiFcXLU8GaD4aUB7zAPQjYxUHmaxUbNzjsdCA
+xAZdaMhSfQRR/QJnyA8KLWUsqAuEh6uLLe4NOuiznkUl0gPnrp+46jPiRBFM1ZijH/SjNL1IFjqi
+HwOadCVrFJ1yZE3KoZ/FFfBXhBaQsznCg0qYG+lmXV3rLtFzO/S5TAgC4l4cPsYjdEA0KICAkVI0
+iECaqukZetJH1PUcRvi8ge74N0exXmEQnmjyPF4L3kD3NOa1GYzw+jEh4sMFjPAFHeU5w7SlG7N0
+AxZBehbZiUBvInvRQHQFoTn8AwmBo0aqNGObyuN/RYzoJSq9K1R2Nw9KJExQMlgeyZnHJByWVXRB
+XjEQnqB8mhaE9HmM9HkqycusNE/RHkv0nCHOZ7A4T9A+T01hMhXrKepjbVfAxNe0YiE6pJurAPE5
+dI5l4L5K0R4QP5jWPuWPe4OTyOJXBBaNnIodtZxRTEc0G0fPUouViW1Wrp61MOccw5DzBhumxyhF
+in863pnYJ2OcMzFQxRhYxliIGbFhDdNZMU8YsGDgYRqLnBIWPXUmnLVgIsuE7QwYoyKHZVmFsF+M
+kYKBk6hIFrxMYzU6Y5jddFZcwAVjJmfwY8URL3mDIdvxkyjcBYqfiCFj/OQYUzIS5SWMpxmMpzlG
+5y7qFmR64E/0bPNIU6SMOc0RXR3zZl3tzhv8Gf0mirdqqN6ChUkTnCWsGukqBc6BXysG6gp4DyTK
+sU1V3GTZBG9l3VidVzkDhREYpfHqYgQOovNO/fOnwT8NLqxBq4Dkdn6asZyhUuuL6YRUov5VrAVG
+ojJQntpgWAuMQGlhhrH9lUSVw9RMxDQrh6UHmTobEQEhi0mOjIUAgYr3eczpVRiaiAX4PBCEUlaF
+YQL6c5hXFwHJyzAM0GgBfUvo8IiYdxb849agMnUhfjglTv8wUWSXUnQojH8O5+Kmk7O76Bglw5Q0
+U+hZJGc47JhOO9Rxh3HeKTNz039KtMjUnYeUAmf49RDfnhw9Xkc2tgw9ZE/Tk1GROvvgA3d8pFBm
+Tt0VevKOTXHIGFc0/IDy9BQmi01zGca9THckM8+a9FMmw4WMowdMeWq8m3Qh08+WrKdLpkmOGOWM
+EyaO2uaIdY7Y54iFDtv4DBsdsdLpdjrdUodtdYypLo/0S2KtM+x1jMWuZLHY2W12ug==
+
+
+ 1c6w2VGTHTk3okdGpunOarizmu10o112wmCHzXWmsY6Y6oihTv1vxcuZMdMdL2fETM7Vgc4dM91w
+08BLKSBuln1wE2MnRz3uTOxkcTM4dqo6dnIEPcnR7fTYaXHxxNjJWY5/8xMuniZ2CjYnT/b01zz/
+zXLMEfCs+Elt6RhDixwWIHVrum5PZy3qioGfVpu63apO5N4CZ6Iog59zYChnoig2qBsYSvDSHepn
+KtOzN68Cm8k5YpkDH/T1WaUIx7ninhX7rLzR4I42FAQk5OxY6IiHnphI/c4oKnIBsdGbW6o6t0T8
+0sTIgoGReQtGZhh3bF+OyXngpA0rGZ45iZUG1+ToeZbBNempFjnXYk+2ZsBL/ZzLPOlyOuuynnZN
+YCbHMk+KmbPwzpyOm5yFfTJHXdbzKeOoP6v7ssFkJAE7CJBTJD4Jk4KH6KAH/Y8/EIeGyeOhxTRH
+vHrRWZKE3RJ0DwnihECc/XTnBeMDPo5ydjOet6W5Tq0kp1MryeLogC0a8xVLeARni5dwqGIYUKyF
+JVBls3DUFsoW3XJGbC76/+RYRMIwLFEjDHEtzxpHJblsnjOMqMQZoqifnNCi6tYZw57KUwuNgHlb
+mtpoiJUGNDaOGlcL1DWqhBFQyakIIamNRmAsq1nDrirToxTVepBCvP8KxC+MWE+BbKADkyymLOh4
+RMVHIhIsbg4qyfjMg+iJhdLcRWYLZ/2T0vKgzSiT9dkGnXu2/120jIpal+knKJzlUYF9ZJSC8bRg
+/J+n/xcMT0vyf56zfwEbolNo8hf5rP9PKLdOv0khfgr0E0c/ZoyH5qt5Yyz6xMl+C4al/L/VNfP/
+XxpE/rJEpkBiMolIQvSGOGCgxyXg7UiUIgISknyQZIMEFxBNOCyLIK8kJGqkQazgsURfAHxM08As
+GXA1i4VyHjBAhl3OURtrWpq7WH446580TicboOi2cf24mhYOH2UVGedr2YhsU4xTbFU/y8YWdHvc
+EBsrlOVsZ9tFWmR6vm09+OIt8UE6+c5T3MIiGUcN6Sq2nhESrZNn3XheMI68SkQqpt6ZAnUfIPMm
+FDnPYXtbEdvcDFM5KvSoi3XfFukn/A1xKS/PXSwiPecYm6Y4lJKtyExhvNc5xrVd/9G9d7O00CAu
+ui4SFSxFqvYJ1LOVIIvK0YMIhfEQLhraoC53Zi2uwIwjsMUJmMqhpg+wxQOYkUd1idSUSVmp1CaX
+coxgajXsmDqju10nU1hssTeYn6rkJgvH/JF1LJM/aVuR2MJZ0Fe0nGKa/stmPKFJAhSj6EQCkwwO
+6wak6KRFJzbkfFonQxnqKpfGm0QKOf8nB6s8iSDhqA+dStXEEt5FGe9kkR4TkuP8nOFah3aWWAQs
+MVcLKJzl8MGvpF2Lsbhs4LVd6LUGWbMB1gWmmA7p2GmGs4Rbl2yx5YbHii3WwhppYYmz4Bj3ENNz
+zPQMMz0/DOcvw9lLNFw7dLcOQG3OOEfWz5DN02OVCccQ6EGxfkScXYjbvIPGNndLWIP8n6rbzq5L
+pp10ybTVaf6PB+QfD8g/HpB/PCD/eED+8YD84wH5xwPyjwfkHw/IPx6Q/2ud7f40+D+wwT8ekP9y
+T6s/HpB/PCD/eED+8YD84wH5xwPyjwfkHw/IPx6Qfzwg/yUekP+z/Az/L55aZZxOrTL2ezuyjNpD
+FB/VUHwEegEPuS9OP6aU9SNK4wIoCdtTQQviqAHVvC0O3xdHb5/WraSyfpMhvfJJpOpRzjj3kKkh
+VOCoBdR0gjGNnmXDOVH3e8kbFzYRO4luJTEtJFnOMG0WDaMI6+linmbonmqGQdN+kkFMXpzlJCMb
+4CRDxITE8SwDXQeln2co+EZsFd/ryp5n4JMBnqqu5AIlyTDhk2uU8nQndTWWqLICY97L6HcAkmtI
+zUsAFeZmL4HeJ07u9jLv99KvvVTJ/V7G4Re+u5KjW1xkNlm/pJLd5iKmLMatXYYdLc3c2oV3nDO2
+nN6LbFjOJMPGrW9/nnF6UkwbtwEGGBA4m41bBwV3G7dp3zadFovG/9hLtMRABm+3dPPUyGBe2UgO
+ZnPGKSs5MSnpB6YU9wR61bt+XyM2t3JWPwF8qql7CaQNL4EsNZ/qRxpF/U42vGM8tpRSvOTopaM6
+asq2nRPo5aLEgpFnkFS3hOrXW9PjSQ5vYBqjLXtCWWTut2YvXzOvYDOtn0SqpI7FnMX6SbcUm0nc
+rJ/s3upW0JK5qxzeWP1aUvH/pg3UbikzrWQZ5n42ZCErcNR9hrmhjSEw7P1sLIMgzEG3ixWJXYyY
+xTiLXYxYxQihcLOLIZKPDrglfM5FLWMAJMizMZPLITN4idrGJCfrmK7w6hfi56kgnKFCrvO90AXL
+xXDG1XCc76X05rX0ipGxwHpJnOWaOM73pjfmrrjJm97Mu9502wnneNObymhl7je92SwmWOgTufmk
+PqvNBBEczmY1Ee12k8kd06/w0y/x06/x0y/yM6/ym9gzjmoJ+p6xd/pZUglYdq3ovmuc5bpZdtcm
+b+hz3jfLHX15mTNu6FvIHX3ZLGfTpSf9Q4PtnbF7nEWfLjhp1Pa9csYv/dpF+26Zly9SHNN1uUkc
+Y1M/uO+X5TJGfcf0/bLjmf+dio475nCromXP3C2UFvsHc6+iZc888c0P44gNxGHX/o9Hm2WkpJRD
+mSvm1gLNlubStbJOulbW4iFoKBOGsIgFReILpftB5bHmIGOtQcUag35hbBbrCAVDOVA5475YCd8Y
+i+6LLRj3xeq3xQrkvlgSecFKdbo8V6Dct4T5r35vrn5rLhHXTG8yJKQR8ayYK3H0VlyiYBGRWhe4
+sBBN9SkkOtPkSgJNTyCS+5/xb5RBQ6K5H9jfuYnfSEjJ498FLKzg5EpIYikaN1KTv/Rbq/XfKvpN
+kwEFYIZenHCClnJ+jHCCklpvhjVokMPNro7XutqZRpFz4RmOUyR3t5sJL2QL8bWSXysBtgo65oES
+LAJn3tVO7WL2m9p1Ygzk2EqbMvqdpUb6F55SDHQRtp6pRk8Jk8wzVITB/rlawZQojxLLILKRMe/l
+5gs4w4RJwyT9WRbnoXGgjfM1MxcNyjnRoBxj74HR4ati8QcYFOIM+OpYTgDMQIXZF1I1RKuG9Ko0
+oapTqo7Ab5D1DlJ72tbnXMG80wrmLVTc4qsqGxYe1aDWgmHdYS08unWngDGohHEJm3c4m32HMUmV
+DX1VV1GJkqoHURJbRBFbIoo04FQ3QyDuIiAOw2HRR8Rnt7h9PVOH0QexMVvCvATqWC1RqUh3EhIZ
+d6E0IewcHhC2mJHIIR5rdWnKW7C/g6HXZWngcYlGrun8BCn6snHFuoi1eaK/l9CCEE5C1iewNuJE
+hlmFhKoknHnxtH6fvGtMlaUfltybPel9FfVgHM645Jpepy3R4CKehhGxF2cXaGwQe3m2aEQAqUwP
+Rh8cjfjJ2mW+rC4GGf+jBASIMkpGYi9dGDKut5aoVDSZ/WdR7f0vtrU7ZEF2Srzp+UKBPEH5rUd/
+t7Uhlzru9v7RxX+ENrno00VtEGr+139+1Majl/VQ6gxoUSjOpa5bnX5b06vxoXOONxJco3Jfgy+u
+ApDVe5CZzD/+hj+O4MM3fPWPUDp0Gnp64UNN+Pb+isPtNrkUzjUa2uJCKUX7gP/xNGDe5iR8V+Ki
+1tZGIw0P+qIeYJi2XOR4nvf/wdlTlF80oC2cOoNkoULgmNHBEX2PBABYm+hZb/yX1obF645r3YZm
+vkvSySHQwfk5UANpXUpI6zk7RBToRDJP4W+cWhRxixeysRj6nKeBh5PWcGQHgon1xpVmAT6BJ49I
+zl3UzP+Pfg0N2b50aZyOV0/drtRGNUDBlP43wCb6q9VAKXZrg7/x30IoJfd67VAUuhJCFwNtqA3+
+0kJV7Z+jkNpsjWr1Vrs1+nsd4BylGUsdQjukrtEsTkgeOql1P8ew9aGLXh+lzY07dCZlQ6krrQa9
+9WvNptEmGUCnNvwhXxljGvZ7I1utWrs1JF+BIEdG0+y3kuSrNP2m0WsPyDdbaLCh4njUC13VhiNt
+0PoPzdYinkxTn8xPt9f46Y1HIGL09GkAP9DHDYscOtWGX0ZrOF9xyMxYT94QjYUqhEaDWnfYrw20
+buNvaLXVDA2NQQhMvdpgVO/VBs0QjL5Hh49OF/KudYA81ttjLWDVz4GmdQPWHWh0d4DdAuK71hSY
+AfhWNRoFQoETpNMlC3V6f2vdroZI6vVogPLTO0JYuY1yl3e1AQHTUQjRX8/NbEEXtZEGg9S6TWiX
+VJZ4y3aej0d92G/vDWU6KIT6tT4MYtjqjNs1s4rv/JkNYLGOD30YE+vr+Nf7Sxv0EXIPJyfIvgCQ
+2m51tdBwNOj9aLQyYpgGorK1B3iOib+0xghGVK+1EXH0HlGj3erj1Npt7Z+wg58w3YBDGgEJcSYD
+qeJgUCMfAT+vtfZBbQR7fdJr1NpoT4f4OX3XuS7MThscKmxN9nG1BluOerVN7qd4COQbuoC3hyWY
+Faz30NhBHRstte6+Wo2vi0Hvo9XWjjUbIbTUVDt1rWmv6dz1hVJGvQP0sORVMAHTUvt6XAdwL/cA
+Gq4QwBmNp+5PT856Tc2RssN6/LPT7sLjBGzNoFUfj3QAYRb1X93EAtpnajW+Wu3mQLNRWf0p+jX6
+u08hOrraHb79VRsMtxi6wlb9q2bQLvz90KVe1yAzdCRDy1//S1en2+tqARamDewQ0W3/ldFrLggw
+Z51XvYVJvRBgbgAcwFkIF/GfH1t7Qds/50oInisRaP4tRCiDAL7vrv5vQvTNvwKjOqr6b4ZoNL3G
+eDjqdf69lOxfB4ebwxoSMJDCAigWFBz/5XgBY/kfNJT/C1g6/PjH/2Bu/G9Gg2G71fjfTovFXB5d
+VGPo+W5z/TvI7i5Oyp1xNlIe2Z6yeb/Z/DMQrP67Z2OoIm7TqPdGwGROtI/R+aD12eoGmdXkO//e
+SaYl5Dhe8NuxL631+RWEuhs1/82QmEsWkE3WZ1r/aDVHX0FmRSv+D2D+mOpd98aDhib3xt3mv537
+A4/6dw8B1P5aE4ShecdRmHMcy7olLQhIMZXJNwCrjd6gqTUJLLHoEkqd9UaWxxYbqyCGioch/ZQn
+VOs2qdHVZpWzWPLISyfI9FQckJewFdv+kmlzJW+c20xtQa2T6sW1l0nSalhHlUvIlFaiprQr1pQ2
+WfecGtGuWbse71qtatjacqYJktYhhs3ULTH6yRajn2XRSfVpV5285b/sc50dTMKL3lzKpFmpQXMw
+TAJQgrzcXPeu9THuNtyr9IfJttDABjr3Sv/sJ3v9Rs+nwlDzqdAcu1dodJK6Rbg3+tIGE+tvG/Tw
+q9bUBgy4OM0MwBQZa7va0IQ+x9astQzAss3AYkWWeJd5DgZ2LMy41Py013Sp1+h1AXFHppVZ8KxH
+DOTeNQE/A+1Fo/P3j52ETkAY0ditvN3WHtAcrdUdeewCgVVKZPSdiAIluum2GkCAXQ==
+
+
+ e691uz2PdYHOO/A6be8meZ0M3Wl1IE61EeDXc/T67vzieT30l+jdFV4TbO/WSafthNzr3V67rWEM
+t9DMiaEOR+1kU4MG2yNMpXUs8FkF9Bqtb3KpIO/0m2hl2t3Ag+o3AzdOYMJ4wxFB+wML6Dj1jurQ
+3kmlTCGdLBQc0RiqMrJePi2AHOlWkRV1gTe61Gp1gFIn2yDxB6s56lGsyuRFj1GSygNzBHmx4DFW
+Up1oH4HWH71kbqojBW3YVsu9ErtSHk31Pj6Gmm+1L1u1SWxFtfAxsnud714dYGLY+uzWvEknqogR
+o06lbd+KDIJ71qsN661Rp+ZBQ1FVUsdO5H02D71o2bzJNWoPGJLmVkNnBv3eyGPmqKZxAFtv1xo/
+unHDsfagmewNkMjks/Ko4gfwmK/e4D8oRrjU6veGLUtbDpCDe/1MeoIqrUNN2IKz3IBqDRu1tqa3
+5VvvL+85Dhv9duNvd/JF6jS6Qy+QhzqjVts4s3efH+xTu9b3Xwdaz2Ps/c/Oj7/4iGsNkatPMLKD
+qhOCzvDJAO8AyI9aIwPxkmLGkRSiqsALkBZgpVzOA4e5+U6uMeh54DCu0gfi2+p+eAi/uBryFwDB
+ywcvSKfISaJeGww99tGcAVBMhgMFqDxipuRXd+BD2621WRaUda3eqQ1+htZRB6hsjDpAXWbUAWqz
+o3bC0Y/uKNlsexNUUqc/+Oh1vagpqjYc13Vsd5KFkb6l/aW1PfWWegvpgp5VutonwNpfHmOGSg27
+24drPWB9XUOyvfqv/3QyCXigMagUFgMJ9bBD/ppFvVbIdFIJZnfAJouAZgdcN5jVgVhC/IwOllrO
+NgdcxcvkwDpSdXumo1Oo1cV+Roj1aYFMAM7KFxZHgDyBuPTpIcGjasOfVh/Ye/fHW2IZAGgOhhrq
+eOBdE+k0tZHjjh/16odAMEMWpySrocZuiPK3gExieav70x6OQLP8EZK19ggkGYFCV+nvWjf0O641
+B61155Uz3+V9hC2zpkhEP1I17cii2GZhT9peEjjbMBm+NFVtMVBtybo03jPk2Rn6LZyQRKKlaVxK
+uzfdAPFbp9e+s/sYaL9j5EAabMTAcvumnde7tqQLxYGWjrduS/Ss1xoEhSqJhapkzpFLsUvZ1LrD
+Cddjt6anmTJvm3JS8BmLaB2L337xDvsVBFXTU21BOshUBdvC+KGoYENRbzBj1zvIkIVg6ydNuX6S
+dUX84FAMjqQGaLHEP5l1tNWx050CdMUpsXUKasTbJho9qo2BcQdEVzHpbQOzAJl5UOm3mAEnKiRb
+Q9POKiRzfiBgX/Ig8CgGG4mFWngvBW+HFn+iaN0j7/UTJ4AxGGUJNFHRsuR+lEJiKYVfZZGt7KQB
+WKZoepMEoG3TL4YUjAoJU1IhcRq6LFnWOnoKAmt3VAuKmkJg+Yy39BNwBsJUVDeYhCZNB4l2mcQT
+DBiSqAvdh92fEAqXcpS3C/bzx36tqyufeRT7zWgzILeHzvtIDB+Gro24nSh2zgd1LTcaaKH+AClu
+TfTro9VthYrNXl0LXShlZMTpkZftWhzbrqm9peSWLu4Xr0uHh/mMoiH1Ej1M752vPsW273bWtmr3
+8SNp9Twh7w8qna/Nz274qByOR9dKrVpyuJK9OVCzy5v7N5Xd0/Te5snz2un+YNzIlVXxNB8R0ull
+nh8q38pnnF/Z33pNbuxvx/vD/eGxmOIi+1sn4YFe6Wgkfx5cnuxvp7XrUmtnt6Ekk2ufE12dNB+g
+v5xSjmzmHisj5ftFTj8m4sVO72RYPLwefcV2s8vjspJeuZO/22t3XET54I/qjo2t5AofudvLp+di
+tZS8de+Urbf5sr/9U37Z3xwmOzElHhmXo5XmBxfBi1V+fzsfKx8vdzm5vd++3/yQv0alr9yjYFmO
+91WlIZz87m/vrd2RdmDIw9Lr52sPPq3+KofNw7CcyH+vFK8Ty10yhvtac8xFCt/RWENtZC6jpa/0
+29Z2MSKtxuSz+Htsv7R2Uy5p443d26Plr61Go/aDPrVi6sfJF+lZ4FO13KC18r7Zej1qyu3I3lpi
+EHseF0+uV3/R+Nf3t46+JC6S3bp92S92G2ud2M7pVirXed5p5XKp4YdUHDQOhdjPpmC02FCOhrew
+bLk1LXcn8c3NVilVg/0VTneiibgmt3MXHTKDh5PIfulwe/lOjRcyQ9iXw6fs8m6u1HuNbd82nzbF
++vILbna3G4EJ7WY3ltGWPGXvspddtE678s96NkFB87Z5wgsvy6dKqra9Wg7HHgeolyx68IpbwVW4
+CF9fOkzjz7Hd8jb9tH2nHpPqpbj6ThoTH8RDAN17Pra7q8ZFZe9zh7Zzt7O91fw+e8U7aQwY2juX
+M7QXqCQfGQN4MQcgRHeuUCUtjb/LhGXlDS+1og330tnH7HejWFW+Y8pH6vhXrdXWVuRs/eaycBG5
+vymel+QL5eO69bv/+7L5yUXk9EP1jSzmY7b5qL4JsVs5fV88Lyvfd2+l1nc2tfXRiXyWSx8bAizg
+7nsud9Xsmf3lr387x8Xzk43jsrLePCZroy80gX3Y/VE/eRnbu639kgntZvO1/a3qaKlYPRqNJ6dm
+W1lmHfSNuB+E9aauAXPOSyMuoj42I5/i+/aewpef9yUMAtvv22UFoGMjHpN7hVf7XllXlt1YfSMI
+5Ox9Dcd4lWAu7DodnVSKb0cChpjtWH/rvRz9OE4W+e3qo7i+8rpNBmJdjuz4qqCVo6v99dJX9upH
+jZ0kyyakAgI89BCFuVabCEL3Aak6qzC15fXS55c6zG01bq6KuUfxzr4HFwftW0vbSxU1Ea8XnLak
+8KMdl7hIsXrajAGF2S0o8snDj9NocU2mXuUh9wFIo4q8WEmfTkLO6KK8ftHeKiuZRzG2W3lPcBFz
+XjCrxkdZVTI5OZs4v8UEJykc3MZxp0rqvb8hf4+aHbndve0Vq1/3K9DE8YbRQF+N987E8moi91S8
++vhag9fOVoFdRVuAL6SJ2lm8vD5KNTEJZ2gkvP1biVReCmSxqiefX/nq6tpp5TmqJC316j+IjF5m
+f/n7Jxjh+4rJUwD3jedKs/30tD9Yvh+ZNBtvCdDSbo3Zl+rRuKA2fn5X6WJdbRCS6foUaHK73Ptw
+fD64PDgrVsWrJCzw3UbhYlV+KL3/KPvk6eh4tFN+aydHxevxSkutV9UoTPLuRTk+DF8bT1M6JI9O
+yidQ6RizFomlgketjdjeXew1d/Wx1sCQLCoHnV3xrbO2Tz6VjzOXucx4VBXfNySZPujwsvgeThSF
+eLRUEN8e+7tcxHyRfKs0N4q57EbkRlTD2RJ5+i4VSrgds4oQ/+zQFsvVrSumA3VjWxHV7YMy7gq/
+Br2Yz9HImBedmsX9oafkAR4IblF5WtkXVUlW6Z+oFWPoXERoPGUVsSynLsgvMm59FMzq4D/LL8Vr
+duL6kMzRkCq4UzIkGDpascnBC/XPp232ncvhHq5HGkM7JDQSnT2hsb9SFJLb7TP64GqNDg5PCI8a
+fYJe8LhxV7Xj+DkdFBqKwzbOsPuoK+jFWATS31szvEfmag4eUWxSz1hPpmf0LoEXpt7dZcUcOuyL
+uaJmsxgOyGKhB3j+zE5btnbiXbT4zJCgZ31fDIA1p8m8GBCUaH94KfE+63OeE8aMITODc9gBtPsB
+98BYGFLFBi8EqNBC471iuiJYaZv1ghcLjxXBGPrWbJbAKoYdPCgd5il0G2tHBo+GbMNKGwzZ8cUR
+nU0swfQJ10tuvJ/QgaL+yBvGxppNGUiBIBnoEwUB1DbCaROzKBCjDvBTswPbxmPyYC6lOcwFYKV9
+tdGiGqtIn8I6QC8MkXagNeaKWYkG/m4C+AwEILvG9OK6lyZ4GdXtK487MJfNDSAtkJzcKRYQB62m
+f5OtIogd8R5oScNodvcmfVYspNp5hl+PTg7P9wej6LPaGC/nkR6wyh9VhBwVNgpv9/LlM7+iHB5m
+f7kIaIlX5fLbevgLSRIbymdifY/IyVRuJzJhxypxWOp9Nk5cVNjECpZVQbZE0qpVxIgxerMgv2nF
+q+56qdQc7D6X1fzVgTmh3NbjSbmYhl42zwSlBYrw7Y6lF355/3YtWgFpPHbWax4sX+1s2Z7L7Xat
+mL17etlUjnbCKzbNmMq3z/EDi/LMLEsMtLzqL54pFzHnyspwcv1T0TbUK4uebm2icXUhp+/ELV06
+zm6AEp6MbdU3v3JIsC/vDwZfN+nN07s9pIuBKpHPtAbZ+VUJ1NRWbGccLSttQeaPMpvwq8KDBKsr
+NPXeQnQjAz7x1Ih9YQtg7P3t/IcoFe+56DKSZbuV/lI9vdns/LyTPTDF0wnFjmnMXXlGkOyiPi9Q
+eeYirurz1MpzAhTlTN1BP3sESK7z2xuKNhjEee1iZwvv1uQ6HTwrx3J2DQBkvY7Bnhf3Kms62DPL
+5qjRgS6m63TMUJDylWGxm+7GBYXzm8gPRYB77Vyp/EQ00Dsut7E4z39s3vVsw4RekJa4dTjsfZRa
+w1ZW+UjJrdLXU2kdxnj6PtnshDpHq3wufaFOj5XU/cEePLiMS6tnd5eGltRb5XM/4/oFf3Jc7wPh
+SohOmEWQgd/bekcaX4n/KJQO6e6PHyLF8758IKfHMi/Eb4aGvv+ShH15gt0vFraOE8YjA9yRiaK6
+ocE2/aQZrXvCBFHN7W8dPywB7H+FDcjaRDas8+J1pfld3lZ3BkD592/CBWJLiK+knnaiY1GTD6qr
+H+SBYRnIt5ODA8xG8Hpnht0rOWjPxNZn73vGnnWAzMrQynPSmFoOsPL1ZWO5rHbH72Kk0Mmbbedz
+jZMj+fJi/0Jcf+icMXtweXZ9i0GOPrj7lggIiInNXulQad8DbFwmitXSzY1ae/+MwVzU2/sDHfAr
+o8pj6r1Xjh5XWmjjj/gj9beExiOZ1BnY5M6jfHDdpjYQMVtcVepp7doJXgqJ3Y99alUw8JdtzIq/
+rtjLcEA37EW3kpFpHCSUo8HGu79FhhmI3XQin7x96SYWpj3glXI7+/lkIppp8Nw8EhNRW7Ms9iae
+roz1TAONuBqqsY3sh8mgEv03+XX/dmU00vnLznH1V0mVpRQxvEClKixMMmWxk55qhcY4tYTXiTD6
+1NJ2wip2ZMpKPBvbFPLhs/L6w8UI8yu6L/C8mWKIPj98uCteVWPP6nu2P0KfvtnGCMUmppNPwq9X
+n9YOAZ4+BiznpvUAxtTG5foOsnXW4J36Ji9tXa8q5dXUGf5ObufX1pnuheN6s6wq6xKA6X5VORpe
+xrc+Duqf+5t3qbtiVfncKOZePtcZQYXaYHez29H9QaIwBnGjfYcqXaj16tqGw+BTIJacQDvPp9dK
+5WH/Qzk+rgpyYlPrG8JNlsgR1dWV6/Lb8uorbGIxAzBm7RY6PRoryatmYn/z7PuHYW9or7JL5W6J
+mtfpdyeJ3+stFQDtcqyUDpYjzIPe9oWA95mj3xr8Fe8g7Or6Z+nz87NelEbhC1h5YA==
+
+
+ BJNTY+ulC9td1yrAkXGlTOXx3aFSQW6nwikkcdwiU1wGGagyMF11SU5nNn91yKEUZhKG0KFPrAGS
+EkKbbbWeeuw7QAcIkwC42zE+e1E831SP97fkPiMdUogoxdf3t15uLqCpRG9yBwpRkJOPhhev+9vZ
+8NNWJS9VDSGYbmO+JdfU98RnG5jMcVJ9rV1fFK8+JqAIwVAYg1w+M9i6w6dd2b3sfaV0VroV2BMr
+OrLPyA8ARmEJaHJ6DwA296B8fFyKDusp7W8nwn2lcv5zi+hrwQoqz+yZBVTfOzQGD4PayUomnBj2
+chuAAL7c7v3sb+/2FSBhW3n1sVF/ZMYqZpeXAIe0z/3ciL8Dabz4dZouh9d/nhwr5b+27kvCTWcY
+2zl6NMWzp8JPUa0Wc4WrT2BGle/i8Z18amsAQGX5CW37KVDLzvluxnWulplSMc/azjvoHWKez2S2
+gUVebP7o23SQ2L89vm8BBfl8hn3Z3pM6yEJdYpvY/e0Aon2G93/3Gpql07VxMV/vfxpUlaBrbnAa
+zVci6obELP7OsRThD58q2zpWmscZ+NjqjG+/7a5e7wy24w/b8cLX83JfOT76+DnYeU6LdngRL6Ot
+4sXT7nPxelwdU0Ete8mrjcauILe/mz9GL3c7+eJ1ez9VPC985kunySdgTNG39CTAPsYRasYxLUXN
+pu3oI45Ha/vbOz9VgP29fHZlKRVBJ4m/tSvEVd+RaqNhE7g6Wj0M682+F4rnNwfl4lVv562YOdyq
+4wNBqwJIlmD7QHmTt9dXIg0QDPnV7MpyXSqXii9AYcqlva0sg4u6GJRlRCzUBBDKE9i/HP9Z+B6s
+3Tv1gqp0yanZTrl7Yz171alJMXe9eqR8FFWQJD7ediYXa/mnmDl4OSxerDTOlZfWw/JkL6fR4nX6
+rWJrQO9lN7s6Kl4vl46K3YON3/J2uTEMgqkBwR6fWdCzD3JS07jbu90U30+2leOXqlSO9i4Flv4U
+ih10uLBCRRF6rnsD0sXlONGNVw2dbWcDUGGYUA4P71fQiVVKbiva9utS8XIjdYvOZ5aRkCRk+okb
+xXyHUWdOD9Z5ud3uvxOjhik20mWRkHZ6s6ocdlp1JMaBPMaKtLTFLH5ULrZrmtEpDzB2MlLi579N
+XSP6GRuL+k1UBb2XVbWxlH0BzAgPsLUDSRcWUp/7Pbg6wSepWx+d1VXQSr+zxeOH664bZz9VPgpq
+Eqhz0omdEkkBaXzPW3dq7HwtJrdzrwkvmWL3tFz6OF6BnstJz57v9rfb5XUT2HWpz1LpiR73g/I8
+Cc6VEQLTNoVF9fCModMYkVbHfQ1rZfwRaNIW2wWu1Inme3I7qbbl7++LfeWweTlSjqLRMsLpw/3b
+6mEN7RWGsQ0LefCTemDFbHJPf7DcBBBJxwHk3hrlUqMjsGT2aDzCZNaRyDabjerm2Wt9XH5/FTuw
+vHsSBnYkjUf2HovX9f4HMdGIO9rNBME9qF6VzpThI+IQ8tbxivKslIurR/vbB6WkpfLzMvBmOQ+U
+L6HgOWM41zULnTKmgbp99ItX3dTqzrOy2TOXjZzbX27ftgBL0rViMv/zOfnacyq7WT9fLeYrwxHx
+87iq1rpcZLvS7sJu/TSbzKCkjeh6dnx5dQ/rfRNHdku1yO8edRig0qnqkCpkF6uxnf3EVx66ilcq
+j/nqM3CI4p3ymVmF3S/2vs43TKXDIFI6fTJIEyFmdCNUvAeY3Za+nrZ/y8WL/f7m6XDcsyoa2eyv
+ULgCCtMo1X6UjVaqkduWVE19/DhUDZMernQNUsp1ubzPj2rFfCK5hBSkin7AfPGYq74fpMrKuIiO
+rL8vgbWswZ50i6dIVl+Xf7a2E1yEkjhbi5/7bcQIm6ajjKXZyyU5s15Oqc1NBfSX869ty9Pqcnl/
+Tasaa3cDKwb06T27+7v+w9gt8SrLa9snavxFDsPborklZLG24+PnFry2caTU77UrwLDdg8rDW//d
+Kv89m1YF68obm0PEPJgkEKnyMjpW3lM+1vZWYSV+ZXZIl9FROXpY287eXDRTGF7KESH6icAnrhyF
+P3igyRPV+0L29vejSNh75CS36db2uLz6+NlVPnovMWzFcDRIIxyCXggWleRqZZzsvxaPH9fz5u5j
+HqA2xkuv+fMDqVqQ4kdb5bf47aalPwMXq2oPqGHiwQZoxNaH23kH3b68Bgyul3duop+tFHu/w5QD
+31eBkMQ/Qa8cbmwe1W5PzdljcmtaFS5BwD4tr1Ui5QMQK5UayGt5ECeqdytJ5Si2nGF7bo9W1EY9
+3kRW6z36XWdpFW38m/LBP25bzC4vOaRZvCbGSIF4AzbSXAUGnagVe0WtbA6PtCNFi1tIGZJz3cOq
+oLx8vohETqSNgdx20QTsa23DdC3cR4V9Wa2c9E33r2R4tXCbzR61PrPVxMOjqIYTcuqr26ytFD7v
+BjDag6jc1mSh1Ao/ramxjcavwq8kutiKnAmXNgRQOTqgDz7c1CvIDBkRpP9n1/CMtDoeKviOoQCx
+RtGnw3Z7jEM5e4NQf65LHnyCX9EgL5Ty2xWJHf3b+3YIvTYIKaMWCX2/6LVbXoEyyD8UvVIdtDqn
+KB5Sd2H2qnza6/aU3j+65KLKQ3T5QLHe84o09L0V2zHmRO/vHF8JUB70OsXB6B+9wc+VGd7p5BWt
+v+dwq7SjY65eX0ZhrLJPMGjgK8GdL3XR+6oMan+ba2i/H2i65Tgxr59wvHJGf9G8OhvfnE0XMJP1
+XMJ2b1BttTXT3df7BTQva32/2szN48etbtNz5Z1euhzXzP0VRadrBCyzcYdc7x2zvWzfslmCYvWm
+aQgrPCchrFPTB3Jtf6nXbeKrEg6bWnfU+mjpsQBeq4mQufEFwKSZczP3weV6pcCpAqYaP4wRxk0v
+jfcldQ5oZI57OgRicd4LBMow1zutftvS/uFfGWg2Q1Hd7iywE+A762Uqrq1fkOt80CtVzygi4wWA
+9UP2lgIfOsgQFQ9WQzfrsNsAjmjjNwH3nuFWZ56BHPoL1UGt39cCEAoyj1b3JzA1d84g4cNiEB0q
+eoVn6AO/GWp426rMXR6ON4kFz1ThFK43idmOJNaX1sneF1BYVpnhyMw9enaSESBZjBewuVAJFua8
+XseTKuFYGjuoOl/V5kUi3W70c8ZVclVasTHo1Wujk9rf2iAAbOmvMdImSkIEoFOq9UkqopYW7Bo0
+Fz4RgOIRIKwyaXtmIbBV5u4Ob6CbWhqwsWXzJW9RwMo4JiSBKYZpkT9ILNR//b8jeMiqBqHmmtal
+N8BoONiquTbuhj5ajS/g0iFWodC6Zs4eM3gqdINuABpq/xFqkJaNXmA0w9+xFvqrN4YHg//6z79A
+9viPUFMDIaSJhQD0uYuSgNXGobZmdNqEPbX03BtbG2tqf0FDrU6/NwCMnXgVhc8CJQYsIqiMeoQR
+ogmgOyfiIN6jrGO/47VDZBdvfXbjqIt6CypY+oF2Gr1ut9Yaovn1azCnGrRmsAXotluDlppjfQDJ
+wKylMWj1fakLgQhEa2sjrfo17tRhMG1vFMUdXI9qoIwOAoCpcZ9FUIpqoAzoqvAlEQxLhgpp7fH6
+toLEepQ0iLma1HwIbzdak7l96GvVyVux0TufH1b6AN8pVcX4zqiIgRSnKurXGtpEDzgTECH6k52g
+ZGTH2sCeCQqe3Ot3p4nWwRIlZsRehmW8U9UAmY07R6xP/jk6717U9Duh0majOFNddSLMFo28CwBm
+dLQ1aQkwMwxa08yhjSTp51C/+jMObzD7jWNoY2w3o/yk987fd/nm6vU+/nO3cLDybT6Q5LyUzz5m
+O4/bifdyD8e1Ma8dvGmlwWC31q20b7/r8vvpZbEY7wovW3vCbV5Zbo5VLqKUDp5fhI1irpsJl9Yv
+00NpBbkV1VN8KnYqprcvN7ekvepIVj4KlR/kw1JTPviHXeOpGNu5yn6F1/rV33D86/sgHGskI+H4
+W/MpHBfL1+HowRDmgr54SEonhXBsd6cfob18jaTd/vp2H4Z81KFDrl3J9NP70R6eSzI1zPzCp+v+
+RBWY3zBf7lbFaOFhhYvAOgl4GufmyAbPw8889Jwfx3Yr4dX0UBye6s3mK9Ld1vIH/Flpw7sPij7x
+k+FgsDV8HLxsXZzzqfR1FI8Vdwq9kG4rwnP6/usk7tjpy6d84NppVvxOhd06rQ9eU7E76MXaLe30
+TF5fvum3T5w6HS6/ZmW3Tg92L3PdW1unqBfcbXr9PrbVOD916nQwft+MbkS2w+9OnfJlfm/bpdPs
+8kp+66OAIdlhrumHZ75clS8dZ7pU7m9GzlunV46dVpZ7J7ZOKb7gbteOTtKnbgt8M3huiEeo0/WJ
+5a0s3UmRzGgNXkv3JvZ0cwV2n3Z7sbZm29V0NVdp404Bm+qqtdOXwctt/cql0823zE3zM2V2ykWY
+bl8T1TPXTnOpj+s15063w+uD4WZs6NzpRe4VeqHwOzHX4drug+DSaeZrfU3WKs6dptdfYttbHWam
+OETb3NVaZvk3Oz516pQvH1/KLp1mlyOZfGbPpdOHN4Dkcq9adZzrUmVlZ/VE+7px7LRymb91W96D
+1UQ4+UU6VZ9/ygBj7AIvrQ/X9uN4gTcmOj1462R+N/o8dJrr2zs9OTx7oZ0+JKK2mXKRXCaZfDS7
+tcz1UeZPOpc5504Pl8b5k4dG3rHT87Z2YHYK+2Lt9jj524+7dPoU469PfsfOnR5Lryfl8l7YqVPY
+l+ph69B1rten2eq7W6cKf8u/Fpw7PUksV5tvG1u4Uy5in+vt687QtdPbqPbWd+v0lL9L7MlOnXIR
+6FaN3e3nByXHBX6MV19dO/1eqp7ILp0+Z/mX2nsMd4pgzDbXs5vWz2bkLO7Y6evr/Ztrpz1tL/rp
+1CkXQd2e8u/qieK8wOUbYel+dHno1OlgcJZYpp3WpXUb0sQKG6qEO+UiQm1pVLFSpc3BWCrxqNP4
+RKfnO9HfV/V+HzrdGdg6jW32HuK005/Chtkp0GTUbeTjaYmwclF+EA6tBOKKV8+eKqjTxCRPPUus
+dKWtC+i0NLIvr6p+J3GnaF+iatxGCteaMUqVpJXN0rGVFGqxnfzZE+o0NdlpNrK083BwAJ0ehc1O
+oRcsTony+ReZ697mZdK2wN+9HfWHdLp3c3JiXV7Y2O+vHuapIEJdlNin4qgTFje7dSpdTD4fr4al
+Zqfv/DS9Dkizm9Hcng4AGE5b5lMrtUw/XPDq9rlKnk/IAo87/Mm+JOKnkwT+cY8/udpLOz3FkPxY
+5E+ax1m3t0v8afgu7/ZU5c8bh1duT9/469LPiK7Y5POnOH99uxx2e5rkq/unUbenGf4m/Js0n9r4
+S5gfjMM5+nySUh3wtzfhHfLUjmbppyP+9jOx5/QUr9jTCX+3Uii6vX3G32XVktvTC/5xOffi9vSb
+f7l/3NBXbOL5c45/+f6Iuz0t8K83W5Lb033+LftWMJ/aYOxtICQ3jjMub9eiQuFdPA==
+
+
+ dXlaXxbk1dey64rVr4Xjy6Ujl7cbPeHsR2y5PG2uCw/fx6vOTzOv3erW9ujRbcXE4UV4bf3oDD8V
+13ajB9anxXDyYH+XPLVTPnHUDm+nj77Np7BipcTGFauBRZvVmNwbnhGyR/SzdPwKUSUZ4E6TnVRP
+qlzuCZH91GitVK7u5R6Ux/JDVXlUt5Mc+pYvl+Rko1SSU8cxVn97j7TReCTSH9PzsrSGVUFM5ZCe
+82RSvtRpvrvGp3buxwgznoA4fmybu3+6nGrt1NcBi5bUYf5y88JCcAdL4trORYKwEaTnMFSe7TTz
+hfScnq1TtC+42/TDPe7WsdOlcjPl2inWc1w6BdEW9JwaK4+xc00/vHt0WkkUmE6bq6vLZqdY+jc6
+lXCnWEuiC4yk/y2900rbssBLUbbT9PWK2Snog0LStVMs/TPymGSbK5L+n507TT88uXYKy9sRbZ1y
+EXaBQfp37RRJ/023TjX3TvNnl/cWecw6VyxTuHSaP0AyxZtbp5e2PeUiqdbyZpwOAH+ikL45sfvO
+9bYC1CNS30mgFtPrF6QeoRbiSdZqFbIgbnkMmvbaU8mwkNSuZCzDEeKir62J8ftC/EaIG7+eWGUd
+Vhstap/FpvdYFzVwZYzhEkHyxWoPDa9k2sdMCxF/lIlE8C+0oXesEEw7ODdGoyDdr4yr2GxPXGS3
+ULm5gC9WI/RX7Z6RmKnNTEdcqPykCOrLsMJM1xgyCjmN0F/x0x5ZG10X08mxOQOAwZJlAdmVl1Nf
+mhJBvwAg9/hD7yHhKoS/uAwqrsbJL7qegpM58BIt+dh7ybmIufJ0hlivdpzfRdh/fvjXlW3/LBof
+3kGQk0+ddpDdv7fxhj54otM4za9nbLGk22H8d9BlfluxAPDJWRbLo7H4PMCuz4WAe+WhvxjI4j+E
+pQdz3RHuz77yRn8+mMMFWCx+jsXqWy1X78mejfhAz/G+pQMD7qYkPUjmh2lUmCYYYz9DetZXMVw6
+r91DfOQ9Gspf8C+6dthw6rB26vNt2I1sO2MlUWwcsBK+FY5P5pxaYtk2NWNfLEuNok1XyWmCwyrD
+dC86/rNaJbMy52IF91eV14Y/d/PuVd/kEAQrJWdIrxyv2mR1yzYpqQAQiJcF4Yv7wry5c2leG92k
+KOQYkEz0E2dIrtSHczRmZflCfwLr6uIv0V/mxrsyMiIduu4kPuUZr4Gsdxo3qFLUhQrWyuLLWD42
+puuynegXHToxQ18afN8yQysVtDQWl6N0SOy4Yq7j4j9KySd6/jI5zfNLJynMa0vSvxNb8pMf4Fnh
+0zdnWhuU9MCs7odubIlIjOgqIw+Z0dzfip2q2tmS1+6yuhhUb1aE2srawQKkp59C2IReywkvs1g7
+9agvyDUrovxYOHIekjEa9MvEF/dBLbvySnPrvPePyvywoj8rnoLFcuD9cxDo6IoF2EHbYvFa7e0m
+KDCwZ6/OjX1rtzNCFmu1po1ZGcpsjZGmPtZ+7xe2Yla5bs4V+9iMPi5sxRBNm7kxatfS7TCj3V9T
+ccUgzEVE+f7VlQxNIx1/HriqglxkQpVwZtAH6ITlIKBiY5cUdKyU73+WFoKVB+gM5NgTxiYU5XXX
+1ZFWto5PAinKsDbUDjMxnuBqn6McBWvzlvSjyYxM4TYXP6JgGYizvo+GElxrcR2IQQVM/WWGNRGD
+DoTZl8mheKO9XTPc/HVmUKPdIcJKV37npJPjY0mrk5H+RgIPyTRnw2i+D4EK1FRPC4mtAxejhvgy
+7PoYNTgb+XBDkO9DP7HDa0islgSDGi0vhAAc2giAm74fhAB8HwYlAJyPJUl8GcXWpqHYjkPC/AUg
+wUdWsEMtleXtULsXVUbChvxdts0P+1xND1RfgRGS4r6pldt3cLfy/Dv3YuGlgrlMieIei+WK4A68
+cnKxrCienETxzhFGcVcljZvswMW6JK1sLi1NZUsw187klZ0jDz1vGqViTyBmAn8Lib9JFqYmrAWd
+mivl7xxJe7fVUz992Mu8Ia0UfnmbXulh4HCTno6gl9tegAlxEafdYmDHJltPb/fZE47GyB+Gpegz
+LkzGz9Znt4G4WGyOPO01TqSAsTRwEbswvbd5MbIJ09LeTSSAMdFdlDbxpX9sFaZnWbu9GyHiNBro
+ZVpGeGyXhJ0hgmWDrvjSP7YywtmmtrOOp2aciU9BlcyB2JmfG5xzEQ9I37wMWznfbBOKpAPZ+jwJ
+wPEEt5tcFi7QwtgYnePCeMmyOt9Hq2NldS6rE0iWXYOel9fMo1gCySX4NhrA3O2vwt5fO51OOGl8
+njbvykVnem5nWOAdGpvN3urUFBeZG/kQ0giBaLInrKJdW4/OA/Hm7q9vzIs5uJWYUyv6+f4U7cSn
+H439LAm3k5jO9u/C93BTyUDSRbCTivX1SXnzvmqeMOjymJ1oBLbHQWP+7IYLqHehkXkc+jif8Rmz
+n9yX5qoY6CSKET+9KBooLpl1AslnZi/w7WYAQS4ARbsxKZrbvgShaLe9oBTN3wKPGpuXohl6JTS2
+AIo2/JEWgPvoIH4GSjQBY5PeD7NQNNQKQ0Es52LTtpMMOhr3s1fcTspVrU999WI7OhQ5ywKs1Rpt
+WczrUIg5Okw5SinU0YuiCtJ4NiZs4+jbIBvhfwBbggeHjkSIkcb9JbP7W++DXFci63S+D41NLdW7
+jwv5PrievQYlMw/9ALo054fOaNdMt6YZiQLd/blFe9KKmzJntfb4tzObQm2xkKB2groeeaMhacpA
+woD+Y57csLZUidl5YW3phNFpLFbrabnhXVDvIy+ND+lYi7FmYUiGxhYl3z//OvFCBxusN6AJSz42
+l2BcrLZ0ugAuBq3YT6xmbWcBHkS4HX4hsxJs+v7M3BBtWMLTnjw9N9yMxm3cEH3nLgawfrABuCEM
+5GkUyHXKdMOA2TufJKKRuSuklqU0EdLt9A1UBeRpvxBbNWrMFbetlD8Idr8NAkm6FnhxX7HsYpRL
+2MnbxBReai6E+d7TdE0gwvDqDDSogBAxgVzUbmljTKJ8/5CwMaYJz4kp2JLN5+r+wYsxBfFcO7eM
+6yvsbh11Ry9nUCklHXWjWbxtUWOBWIvD2Y01Upg2tigglh+WVoPYkx3PBiZ20tf5lj0Td0H2+tDL
++ZaFCNchmXZLPCh3w3BgX1WTn/Gp8tuGs2ZB94BcxnL+VWnf1t7w7Svlwsr+a7m6e6E6xdB5R9DZ
+pb5ZY+jYOKDJCDrz9ob5Yui8I+jwafUCYui8I+hcogWnjqGLeUbQGdGCc8bQuXRKI+hMajlfDJ13
+BJ0ZLThfDJ17pyiCzjVacMoYOu8IOuvuzx5D5x1BZ8TxzRlD5x1BRywk88fQeUfQMefIUV9F8klx
+cnbx0tloHJCDD/zF6q+3s0vgIRnGATdNHKSdQOGBVhOTm8spIye7WfKfFKv8679O7pbei7XwYtbJ
+amJy8lMKuk42Rj/pZ2ZRuPSbW5zD8CzuOoHhyakpxF+8gTPw/Dzi5gwZxjJD10H5xhQ4D2ky8tF+
+mOO76K5D8rdceayTldYECpmb8FMKBrCv6lSuIC7RterzuavCPZUriIqNxgEsvQHMxq+qt0bLBbFX
+wdSel/3VMHe7OvaERMFuwZxBfILd3OzFwS29KNgt8IGLzcTExL2qAZxBfA8cYFkcXEFMzSKQIsI2
+Zo1m8NRpiMxvacwWz1AXezYhwmYsdoLzgDS5Lo699yBwiGlt6W2Jc/TEChBkakW+sncAIzoXm0K3
+R1ZIcXrDmWXFrIZDJOvGrWaSCloYNYA4EeDEqlnx4GyWODDfKLD8aIFxfK9jb440TRyfn+y1wRqt
+LEOy+MCv7WiuQTABRGlLaJqXD/z5lUOIpntslJ8P/DRxfO7m86D7Z8bx3SbmbsxoKmlryoHvB2/M
+/cTc1pQRNeDRmE+8zXQrJixuxeze/nOtmDTfilkNv+SKSIur0+eBn6xuERsB910E7AP/oF0d2X2j
+5dyinwI04UdwMG4LASIfPw/mVvYMSWm054vduuzsEkW1t+rdAOffxO7Q6kXgsdNuK4I4sl/8rO8O
+2U5GnPiLIdS4hrj5oqvvYtj9+WdYDv/Q2A0uiOcBmlB6GmuAXYq06JV7UWVgkyPFl+HnaAo10xWS
+gXlOZbaYITyOjeVh1FX3iKhg5p0A8tj34WIwHq3Sqr88FmydnMw7NiDlIoHWaTrzjqvlyi02zt3S
+4DGkCYsMo/EFhksypGksMt4RdlNZZDyG5B/36rFOVovMzshukUEhSX5e0MEsMp2jABYZPy81aWUz
+ujK3RYbYxo8W5sjXOVqABxFMLR2d3vBgOxPvHM1vkUF7brPIMCcjU4Wh+RyC2ywyjvH7R4uwyKDo
+PJ2Jenp0+4eao9UJEJzjwZGtwnJqUljuH3vHoZoYTS2KbsLy8fz3hu1tXkb8PFWCKhrS3k3OPXSU
+i0xj1Dme8d4wCyTD5NYXET424bpg5y/B4uqmvTds8lwMx9UtIAYywjiczOo9eBwwhGTZzW5pC65z
+N4L6Yq9hb6M2WEQj1+wnqfCdDzAEY3T31wu5r883Ho6bxqdu5ng4h7NXaGzR8XAze6hOFQ/n4aG6
+wHi4+SNSg8TDBY4WnCsejqFjTETcouPhGJ+r6oyhGg5oaI+HY7WkqUM1AsfDcY4RcfZ9mTcezoBk
+IwYARcRNHQ/nc+rLxovNzVUQe3OcMxsvFtgnEhrzCae1LSC+C9r5RgvUmPuJzhQRX9eBTqy8Y5Vu
+AntC+rcT6FoL7xNe3I5VfZ51Vs5C/HSRXDcz3kXqqFmUvO8ADhBOYENCbLXe3bCjofpc8l7AYM4X
+sA0YCRmvzhkjq3xCMaidP5Br8tpvIMxxu1bGHmM1nb7ouKcOjg3TS+MoZHARtwHjduZDQ70VioTz
+3N2B2wmkS3vfdYPbCS7auwr2hMLcTlwx43fblJd3A8zPZsOi8WJBVWpPhRrFIF05hi9MR8fuFhmR
+ere4iNS7xUSkPv8uJCJVWEosJCIV2llARCpqZRERqaidRUSkovi1YNdAO0evWTfM1K+dTkX9PZbs
+aPg2mHDuQ98ZSOh2q3kwNAwaCmflYq7ROnOGwlmtoyh+7V8RCud5D/zCQuECnSTOHQrH6pWTjiSL
+CoVjepnqmvrpQuG4IDeWzBYKxwiGWHt1FQ3rQw/9bIob4QlHfrBfKDxfXN2P/SbEidO3gF5VqLFf
+7+Mfxnys28ZdDMiosVEAdS2QDPNgv2R4xsMFEsI2eYDjcJuW1+28iJinPFieC3NwvU0LBmW763u6
+uDrKHNiYdxnf7eHQH5sxPHq1kkMZw6/DIC+dhBP5xFt443hLCMeVq7tw/Pb1GiUNr4Y3qsUs+nSB
+6pXCieO3DNKS7n9ylB3t9H7YIetnLdZgt6hHsNtFimfXWI86o7k4h2srPTYBqjXYLVpfufpxiTtb
+f/ZKF/easPJ9W7CbnD136TS7bAmLsge7vXpG2FXCGae50lzIlcGD0ak9Fssjc9t2+A==
+
+
+ xRpjZQsBu9y/Yjq1BbtttW/OXDrNfG3s32303SLs0g8PXsFun7xrp3z55cA9wi7yk7qtu0fY1Tw6
+rfCbrp0Ohp9Hy7ZO2Qi78PNy9sZtgeNeMz1cte0pQtcE7h5/0nc/fzZuetek9c6XtSD1ls53wlZP
+SJeag/HbDxtFjuY8IYjqiAvvxqM2dup9l5q/y61Ngr1Y7djd5K32VGIdnTGOpu9qdrJZTQLksdr3
+vqo5yJBIprzBYkLFXO/JMX2uFpVJzsm65JopzyeTXMCtW1uazufKIy+ab8YRm1/fnEnk2HWyNMXq
+lQGSyAWen/VCZId74G2O+R7zs7uHuw6JWEe9BuXrTBlgSJha+uWPC75OJ+lnpyEZmSWd3V1niKZz
+GiETkbqgaDqXFVtwNJ2TNOqei3PWaDqnqU3cqjF3NJ1TLJ3reeXM0XRTRT7OHE3HbJNhbZ7Hau0c
+TeekfDCQvKBoOl8v6IVE07lx5MVG0wWxWs8fTecUS4fnstBoOg/fngVG002CT7PiGSc+UzSdE/8w
+7lVYWDSdE2l1PBWdK5rOMiQaS8dYRxcUTecUS0eiORYZTee0f1ZL7yKi6Zxi6dyy/s0eTTfzCe9U
+0XQB4isXEE3nFEs3/4r55M6ZbsUCR9M5r9iio+mcjlEI5V9kNJ1TA1xk0dF0TrhtWkcXFU3nFEvn
+cROFWxM+0XRODVgpzCKi6Zxi6ew5H+ePpnOKpbPg/kKi6ZzCb1xuoXFdjukUQNsNh9YJzR5NZxuS
+rgBOF5FqVQA3hxPBO1HFUcSwetwFDKRzS1PpGmPkKF0c+uWqtC2/e7Yzmq3OUbqYK1+dU4KyoHkT
+/PPVecWsMedih35ZKwOv05edffvcqOM+Nf88tMyQPPwtA6SqCzok4t3hnYQ26Dq5I7PjLWce6+Sb
+fdZxSJMUBgaVnYFkWm8XkVYKPylTH9Jj32wa0aT/URAzmGuau6m8oWZOc+cQ/zKZ6G4qf0TL1Gia
+u3lsF8HT3JGoAZ9Ed3MYY0iau7n9kwOlueMCRRjOm+YOZWXyTXQX8DJb9zR3dkgO5IU4dZq7Ke6F
+A76wPCMwMPzleGFxFv1jW2SRW6xogID2zcsFxPIcB/LF8At6DOOn8/laoz0P4tHM+QfSze2C3z+e
+5JWzLYx/VFqwRBhodXIzYi+xwdoiiqKTijLKTTc7o7NISlrtzTHV2bSBXWm7bXhmbygs8y/KGwpH
+/8/rp44iH+dGPuR47x3EbkjjAdqZNqbWKfoJ2pk7tytpZRL/ZsmTOH2iSY88iYsJrKWaBbI1RCcC
+a781n7Ok4GFf3xofLL7SX8JDjW24EjPXTBOunnvX3UBLyaqRMWu+V7sP9e3kkS76bupABtfop/15
+71VAAVmLy2B4s8gMhjczXhBgw/3b3tyJqnHaNadAhmlzDKF2pg9kmMwBgdtZRDxnzH579qzteKTW
+sviqcv5oCAjioX/PcMILstckGsJ388YT0UysrjnupgzschHnGR+SoGg4Q4Y717zVNMfdnKyTZrib
+P/IxSIa7QJny5o4n0jPlzY2GnhnupsyUN2OGO4csM5Ycd1M1xriAGtETOMPdZL7XhThaYCcVcxtm
+p2Mg3PmEpJtijt+9o6ixQLGwnmKObueHxtJzqy6w2ppj7MXUkY/TBtYatj57O/MH1t7ZVGv3PIn+
+7QS/pMqdWt553gs3XRATunnS7lwzX3y7g2tNCftd3HgzsIBo+DbwjK+cIoyJRoRNG8SEV8w1Iqzu
+br6bSm3HK/YVwF0wgDMWGtdPIKwMkITrfvogJle98m0Q6B467yCmzWgS81k3vj9djCsMyTOIiblv
+PGCMa33ixBV/5ykYcsFjXOX75tgNSnzy0TnmfZvPz846ScbXet4YV2jM82oqiwzjF+NaH06f7tF9
+xWY1T07u5FvSFjUwQ4zrgyfLs0U9BxpUQIhwZg66Bd7E393MadexP7oHJ8PBQByt0CC9o8IDiu2r
+ol/74VgjeYTC+ko4ti8pnRRWGB151TY8+skSmjYYCpEBi5/WPGxL4mbBJc3d0ioXcQ3DG4zfkwkW
+Nqxp7rbFT/eMc7bcerAvliixR6/Yv2/BtVO+/HF27dopF1kVjt4abrF/Ta88bPI106k1NG24/KUx
+8XAIKy0LvPu70jHmaouHW3cPwoPl3XHPOAe7Xy7wbrF/2eWVq4746haE9+IVDzdMW+RkW+xfJf5+
+69rpmhbNfbkF4SVdO+Ui0O3JmutcB8Ob3bBrp+H9l0TVsqdaQe8ef6LbwEXWS4/NToCa66/jTte3
+Xnb591W9P7fVo6cJlpqZLwp3lE2iuJ3nok3o1C0y0c4E6yyPBzZyxJ6/mKzO1U5slVYdToOeFCe3
+ydmymF2slV1MTI4Wkg1Xmf9Jmc61yn1IIO5a71GcNdqq7H0bT/DMLEoA1ypXc65N43tSpnOtcl0n
+q5A7V1TahqtyNW1Umk++g0l4cmoK2/pQY1P4aXnOzzG/i7v3oFeI21ReWjAk1yjOLV939KBDKiWf
+FoMvW+6OrUaE3aR3rJVcrU+Sq1d1Khuze84UdQHX0T7E7bmfZo9GUp9vvXXpCBdUAVYXcsrzkJjV
+pcYS7OZs15rKPoaiAGc6srZ63aAowHktyygG0H5h54TvaLCFmfLKRnc7jOrqpxXQPta3SH0H78Lk
+2U5d/PUz4wahMLXy4nTkurTkPSQu8Kk3sgnOetmVw13QsFgel+EHMNnZbCo/+T6iMNa0MnYD48yu
+3hVTbnO85Wy6tGy+chvOyBYsFNDnnoOpYqzq09xz4J4pbsk2pCmlccuQrOZOr0BAypE9QgGt9H62
+UE4sKTUrvllvAodyDpzCdGyaxRSN+UV3sU1hjuzRmG8WnUDjQvuCGvOH+aCTDBDLE7wxv5PLqVbM
+N5/ONCvmEZA2ES7sKh26xwBaTqxm0oiCxAAa95DMFAUYNAbQRxr3iQI0F8Y7BnAae/LsGfUMSJ4p
+CtAyBo8YwMksZm5rMk9GPSNWdKYoQIYReMYATkTZuC7HPBn1MOWfOQrQYUKOYUPuOnKQKEAHyeTG
+aVZIHrMFHvwLkvKZGdn+lUn5vKxwi0vK52qFW2hSPi4w0fCJJfQUTyZPEv8VSfms+ZL+VUn5Atyl
+toCkfD4+8AtKyofzVyqjOZLyWYekOWIvocn7ZDx+ocEeef28tdwAd0MFyuvnH8m1iLx+JJJrcXdD
+Oef1m9Lbdsa8ft5Z/Wa6G8ohr5/3hJxtsNPn9XPcpoXcDcXm9fN2M/H1HA6Y18/bV4qhlnPl9fMU
+2I8XkV8M5fXzsykFVfC98/p5+zNZfK3l2fP6WadmT+Q2g93SMa+fN3w6ZWeYJa+fU9TdAjxUbXn9
+vBHXK75yIck/jJjEhYUfuWb1889fGSyvnzfWBY9Kmyc9gC3XwMx5/ZzGZXK7OaI5am+BEnMFyMcX
+OBbYO6vfgvLx+QR/Bs7H55PXz7sVGjMyd14/65Ds0XnO1HL6vH4G5jhm9bPfQTRrXj/v8BRiH5s/
+rx/DuxyWUt+XefP6eWf10yOG5s3rZ4ZKOYnuM0Sl+czZSY5wli2nz+vnndVvAbiP8/oFOa2eP6+f
+dytmPr754x7cs/pNn49vluTc9miOybx+s8c9mDczO9/RPX3cg3dWP3f9Zbq8fvNHpQXJ6+ctzhsR
+Q3Pm9bOOy64tziCNO+b1m14anyWvn0srt725tVc2r593KwHy8c2ChrZWMIz5WMCCBpO4Z/Wb6UYd
+h7x+Mc+sfpMnI57BFq55/aaOSltU+mImq59bZP20ef28ZSbfW5sC5vULlI8vQBxukDx6btasafPx
+zWbBnMjHN/edVg5Z/USrxjd7Xj+HU6UAd6dPm9fP266lW+DnzevnFPPkwMXmzOtnm6RNbXe452qm
+vH7eaju3oLx+3qeZzIrNldfPspMTWf289EoXwuWY129W78Hp8vp5C4ZES5o/r5+XYFgfIp/eReT1
+2/XM6oc1iwXk9fM+scHS+ALy+nkemKHo2oXk9dv1zOpnPUuaPa+fm6XT7eaW2fL6uQ8JueW7Zvud
+PumrNnHOiL+z+SlZh0w4g88lpvzHzWbKbtqF7+zIbPVRxM26Od7bwhYt8NS32bBgcy5Kpj5o3Zf3
+WJddBBwmYIRA1Za6JbqeemP0tTetNBjsXrX2U6Pto6KQv7sW13aXFFwFRVOhWJ7qRW0QjjzHVsPI
+FBReez34Cid3vouxrd3fQmx76+ohVm399HhV/U7x6ndiky8fXyp8udc64SuXhQR/cnj2xp90Pj75
+87b2xV+fSgW+eti65W+GXx/8LT9CWHn7ujPm7xK3Uf4xfrPOv9SXzvnX1/sP/u1KGvHv0v0a/34a
+vRwMBmpqMHzubQ3GQvd2MH7LR4druVUkEFyNUGTnWqLVPDg/OCt87N++PH6GN1Yj9xcr+a02SH2R
+i+vK0erXT2RpqZA6iy63G5HDdGH1vP59r2xv6KGA4XG8nz57x1tCwt6K5Wo1wq9oTfjuoudIQei+
+nAC1hFEMhyig9CSckB/STApImkdwU3ZZrM00LMf4l3/ffl0fDM4SMdeZol7S6/exbWltny/LxzJf
+/mgc8ZXzs85w+TVbR7GrYdrf7q8a28mfPfGp8lsYxSRe8upt7g2n+eNT51rchk0m+uhxryygRTum
+vZWZmsl9jJVAu7EaXm+1d8OJ7uVzONZIXIZjj9H98IqSP0cBuEfo1xYXCSeKmfVwIrV2Fk7k428k
+nyb8eYueK+GN32WYde03T6GbJNIUY4iCrggbJWGr1KqlBDS/t/2tk/AAb1NZFU/z8Om6L8Q/P3cx
+hbn9xQo+n/pZSuK3pZVCZ8Tz0WQK/4nIY5R++tY24I2DddLfx9pvDP0Zo39uRhPozwT98yRNGkCa
+xc3mSG38/Bb4VOaQL3Z6J8Pi8d3dC9CDUYEOdDe3bj5gZ7C7E2Me1FZKO/qDUsJ8gPjL482e/ugw
+ZT4CKeyzqD84F4wHr7B1kTafquxsmN+xPVdKceYB6pmL6I8Ok7De8Q1gas8xaGd5XXwZfo/hwZWA
+/5T2bsLw58W+2fYbFhbhu3IcVdkAaVuTMV1BJDEPVPUkD4TpfIBg7OI8hazMccyC4c8b3OwG2ZzU
+xZOUOr3+keDtKiz/8vYyehqDDpIdPvVwYi7Mu97LO2x89jGhpGrbq5uf3bUbLlLeVtPfJvmkxLVy
+f8mqsLoeq/Phk4JOPCdadGqPWEd9WtQpLG5x/Sh/WchXyvtrWlU5bNI0lTCre0GH36oYU+KRcTl6
+cHgorrfflrkIBa+HWtqYeo0Fr/p5Ai1RHBY114U/b1IU7Ov3vFA/OVyHT08CkX5T9Vdxt3Aowl7V
+axL+ZFgVKA8ssUwPoIglAAZWTksAnjEBANyH//YQsh+F47/9c1LJkQDYM+mmVtEko1SzAGJNJ3Su
+bWBcBLZ7vYHXAeF+edxGd5mjPJ8ZHjch7d2ptfLb+tMxQvskQucoSbmpDX+Qs/PBBg==
+
+
+ xW5hKSUqiacYYPROXN8XhPsgOMB3pSQSVO516yj8WqcSc6accjaTAGXQQQVZO3STB+BsOopnxTej
+0U0djzfxNKKC+rq5bWDl7j7GLCRdXP3Cn+WkSQVgpvUfub3ULQvxfolXjrZ7/CQ9ACWcbCIQBQEk
+g12Y1VmMUn5WXsPyCpJlzU3e3embjp8YsDN2a50d13TZAwsWsZ1rtYmk8UhXGQx2GtbMsEgs2T4m
+qhSuLpaq9bQpiuHvUKLfU72B94i9gXH94hfYYH5M8yOHVx/FI4Zj4+/COw8dXXQY3liuQkDwm364
+wE3QBjK9Mgv76WsSG49pIPaEPBORmR4BxkEMfUoa36WM7wD44tewYaPogOAxcJ9HY7FWjTl/bUS2
+w+/M/QQIxLmIkc35GUhTugKPhKSNQdMJpddfGTFgWxle6xIAvgqhsOyQ15jknKX7MlwqN1Mx53sO
+lB9yIGEkgTZuPHiyXiixwUzoaSDV9QltCjYJNv3rPG7b3Raj3V+y5+P3fSlmJmCGxeqZg0MIkKS3
+N+AmjFsg0IUMhSU69cb5KaIXSxPXQ8ROky7jxp1iwTDztR7de3rB2wDy2MRG7P9/7V17QxNJEv8E
++Q7jKisIGaa7p1+6qxJAYEUEBAUfYAgROHltCOd6f9xnv6rqnp6e8Eqie+zeua6S1PRUv+rxq+oH
+5982Ee7qVcfgPTHwkgyg+2g1sNi4jgVdGzlgG3punnz/e08rBm3DducyBjgvfbOgS46GGcriXuvH
+c/tXzAa0oSL9768YsR4xXN6OxJVubrmSYzs0ni5b8eUA+P+yXCl3cufKFlInHea/VnU7P4WqjqKq
+5l9stirh4fsgWZvv4yZ9mO+9d3T5qPL11XFPrF35enin0prXlcLLmyeVvQqPl3cqN+Us71eYLX8+
+L6JgdMvdJ+PoZFSPocza3aeGrEDp2Uq4hFm4e0fvyceDm9yUDhc0NrbJdda9v5bvz/DrZIEk5u+H
+T6MEHBAQPKgCAsIHE/TV7R8j/JCGFyfHZ19vzGN73osnr08bhdPOR6OIoOrjI+CPjr508/SgNuI8
++/0ni4+LR1WXf771tHiwGMUdcfVzD8fIWcU1zz0tQ44tzPWVdc89K7H1Fp2ABdripMdZcy8zBFPj
+HqbPrXNC7TEQXZ4eJ2DvgejyQj1kejHJ5Nzo8mLq0P/9XzdAVZZXM7TeDP7Zxa8bjq14snbsYjY+
+di8d84B2c4FmcjyOZDZfpr4W0TDCPGpvjX2a3lfPXjYOzV0TARSaWoS2jlnvinKxCAwcVyeJ42X8
+KqcG+ue4npUc1fqvD6en1n9+9HF6Xz8/nVqbOn7jQoXGuwdbJL0Q8Y21Ng6K6HZNBPH6GM/vzuJE
+FBG4AGlnNXXBwOz7mTH3qfnTaxcglBAZAkq8uQVh3iaI0i8LrrXo6krgT5DHR91T5j6JUiHxyyde
+LDY+jxdqtnXmIu2Dn5Z/DpH2WYhfZOpS1z5UlPkY7TWChj7Frw/HC1AKiha0Cd54nTldw+Q7bgRP
+CUCzua30rVO9RvhtJtWU7XxG6dmwiPpz8eD5KGkym8iOPxZj/PyBp02P7ATahKetM9T35ynYsWBt
+2MTer5MF1F7MMrnzHFe5nrOoyFzjdwWisvcSoTZUsHlCkzPmrikq8zAn/35c09ryxOTwz+Tq+WG7
+87JzsHdwnEzUHtUmpxYYWz/ePXnWabfX2n90Z05a50ft427yMJmcejW9sGDkTLt1sttOJiq/ljJK
+rVZSgU4O36qjt7/UPz470W9EtnsxUdg8njt8/Y+dxscXK1NTE8fsw6Mn7LWZubt7PlsbmZmef/+B
+FP2SVC/pxyPQ4W5j5pOd+zx/d/XX5synbPNxpD0Esu+frv2OybN5vI1tBCPBd3cm+LNXd0bnz6Av
+SNh0LsuFINWEKqZ7yuxrz2ojRQ2P1cirkWf23uru9Iff7s6PW3m6PDUv9leeflo7fTT7pvECgtKn
+n9bXlj6v3H1zf2petV6OW2Xfzrx91t6gvk5/WPh4QNmkqmqMsvHPGm/h2twqBObFcZkRKVUWvNth
+SkvddycKH7TZ8SatO4qitd316gRKUnxio5iGGfXGVGrSXLyXeOGUIlP6CvrxrkNBabElFKPQELRm
+sbze3w/5sudj8QPbbYYH4/GDxfFWeFCvONqJLd0Ojybjd06n98KDHl144NQgoq2PBmVbmogf7OUQ
+LoZHKZlasA9PM2eP5uvPEJgvMaeg809W8etKzHtnbxxHdsXrcOuefuitNoTxLlPeqv/KSF9WJikQ
+Yq0nCzhsK55ta2Wd2IooDTW/3RnxfqmeY1JwrR4nbJ48fRRkf7VxmO49mFpufVoEfXm+cOdVKZw0
+tcE8XTBehWlo8LH5Z79cxvEyfn6z5k0cVxZ/LfVTdpfvtec+vDV7U6/O7x3Mvt1dRnu7xkr5jbHG
+5paojYRcVR51feaJDsLyxiVK+czKNEaUbyYLsX8DvHc+4H7dN6xwJW8om3SCn4T7VNlKVUlRlwnq
+wgAErRzUAMycNx+BCyQT0Bg77Cw/neyq+cYsX5u5wgAEWzOob6QFwsu943f0je6Xk13qHb+jbyy1
+8oJ3/I6+sXpo9sbEJAn2hY2XF3RtKXI892a3JC0QumTQyoVkED+rx8mglnl+IZvUHT0LDJYvZpMe
+zKX5/NRRmfY6eXAx7VV/EaW9Ru2mqKS91N07I417Mz15s0L2ISByKVEKS0BYHtXFz4/eMfARMxMo
+Am5VlmgoLKmjfTjbFhQGFXq83a2sO969XwbBPYmUIiVxXSrl/kCplIuJlPHjMC/Xh9CbE8f9JK7w
+Iv84geA79L73AtbxK1NXlebpTj8ZA3cqHhpHqSJgUaaunr550IS5Gn/mrnlFexHG5LD3l2hebPdW
+nNE6XF+iaSiTBVGHJr9xIsbiZB5mJ0HGqvnJG7OTY1cN6jVt6EkUjk1cnyO9uQ31yxjQvPTNYrD0
+YMmgvPJpLLuCReUq2vmPE32K4UQ0LLWRazmGxoNu6NWxpeI+2r2sWo5d3cIoGX2dxEzwsion566q
+uefTlXKTD6ImHYtHy0WTjriffVqAAMP99MxBtXCvq7NPj+feuIWTyKFEmYyX7WPvWDc+1/n2/O4E
+Ll3VHW7DZSGHxlO/MLT+E7me+8W6DXzCjXTkhx3oDn7YgW63BiOf1t3XD2dth8bFvV9++ejWmD5t
+Pd2LfGXc0B7XGj2oxp7Rg3W2Gx70+NlPUS0x3K/fW9gPANota7O5xZ8C0l+KkT74hQDelurxg9OH
+KLhLk2F7q1zKHFieV4s43UtuhY7tbI0E3ivjrsjOKUPlW6kHm3SP3388ijvCVlIPudU0clnJyGSC
+hWnNvySCZ9t6+44V2Z9n42Fl2GEPPqYehoFZS10t2dg9k/HDVyOzE3YMQrPs9b0KKhg9chuDVj0o
+vXBkMezRWZvsl+Nl/GqXccwijmzy7tkv4+uPOurxer40pT/sjnqE/vbVnWLR9x0v17tL8eJj57uf
+qeMUv7yZiIH4/K+o8W9Sj8HfLjAn+DOtlz4lOnO4zv2n83dbhK347Fhzu9gCtah7Eq/FUUMIdt2G
+CdCIKdLAB4VYvDr1RUDRigA3Hy0D3BCT3nerOu1/tGmLxZhbhMUdF9QX3HPhsSAo2tM7H7w+TROa
+WZ6gdNXkwUY3dbj1YOLhOFkLce/R7G+XHRQRT14vPXcy5I6A+mMfo7vrHsv3bNCggLtnbwZF3Y+n
+624RtrofI+Bb0Az9en764+cpiF57MrEoLC9obMG4GDclGAAbB4IdjJ369+Pao9oI5nu2Z49341xP
+bWQEKK/a3fNTLCC3G+29g+PF5td2p8YS9yeDP/ivtgnjJuFSwheJ1MWd2uh08/D383bCxpJFMObb
+k1Od7sxBq3twctzsfE0eImnjxeL6wkzyMPGFt6Hwo2QU2pNtQ3F4NoYppm1o43YtS6bg78aX2jk0
+YAY+voS/q7UstZxJZZMs1VIZJeADyxnTCj5kgglNFC5zLMJtxiw+kdzmjCcbyBP7wOHvxlfg/Bt8
+/UfC0jz5kuTJi+TdhyzZxYpXa8LyVEnNE65tmkmlkqNanulUZsqUtMUa1J5qlke0nMnUaGsTbqBq
+a5Ci0zyTAih5aq1iyTS8Z1IjdQ40mzKdWSqlZA6lrIY+iCTPTMqBs8hEKiXwmYZWZanSWpe0xZow
+LOVa5PSeYoYnAirOsGLknVvJgMJTroSmFmiJnOBDrqymdlsYRCgD1cEglj25OAbTtcZOLUvcn8Y+
+DOHo+vFx86i9m+x1mrsHmDhUY0kd6lecGY2zICT0CqUnZUZK62UJiijDbFLnDIYk4wkTCjpnrJJJ
+Y68Go2MtU07seGpllkNzdCokl9TRzDCWNI5qOzWeNBo3ytxps7vPBbeXyxwWXMIcJ711CZcrHwK3
+P44Oj+Fxvdntdg52zrvtM890qtNpXijV2j843O20j10ZnkwuwJCFp/hP9+tp2z0dbbX+hf+PJZOv
+gPfxXrXgP5uH50XJs5Pdg1P4+7DgcHbFSzhZXtGSS9+a+PZesWt7dXNnXr2e217bPzibPWyjeeqn
+JxdeQbr27cCHr/abp+210IjKPCaTSyfd1XbrpLMLgux6cJOMTq62m4cvmtCuP7BPo9NTC3NeA9Y+
+nXSO3KPQvqndk5329tSCRbl71f162N4uWxAZPjS1G7s9WsaH1jL3L+hThkqiktGxZOMNfAGTCqYJ
+bCm+K9BMMrSgGWg8GscszXOdSTSiCjhz/GDQzMpkowmv/wZlwG4mX8AgWTLFoJM2NbnSYCaFVanO
+weqgnkoOCouam2VglMEQp5oznbyGUjnYbu20mecCzBZQMuyFyHiaaaBsXsJ/sfapL20Hs8j/btre
++qHq31/VvV7NOAThtcqBGkIEoDxMskJjenEBAQGT5dq5c3CZHgjwXLOShkAA0EmO7rug5SxPVYb+
+Cjw0mA9B0MDmBARkqlWuCAgAL4YSjs5aZNoBCMZQM1QKjxPCHTIzTjGUFYQEoHngIAMJgYBImUTu
+8J5BR4nQQBM0AN6aSeAAZZRGuAItoFYiFJCAG4SgdnJrDEEBY7kq+3JxFKZrZ33qoTB/Nz384XX/
+RFUkMP8t3ieC8LEryjPwfYBUY1eUZ+BkBHwMrigH4Gy0jj1RnoG/EnleeiKkGKYqnugi+wE8UfZ3
+04AfnujPE/8Z53S4NmCHg9cRRoEVtt6noPgfUZBmtDfMEO8mSMhshuYbbH0GErpJ5psecrTaGQR5
+Aqw92XEOVttqEPJNYs8yijcFgFmKCXsrfI2487KQThPYBMHnqJUJhLy5JdipoT4Ksa0BLwOht8GY
+zf2oe2qd5Tm8APgvgTgZvB0oskJMCsElvI0FILjMAF5DC8GDAsyWqVDMuS8JBoBaCEgwTzaOalop
+/ALGoC4yg2Ei+M7eN+saRjc14NUSAZjdlW+0hqmy0WeVODUMLBgFyyKHUYH6Pjng3Q==
+
+
+ j5XIhfrb+ckfVuK/H5oOoWt/UqyahVj1sgD1JptxXYCKaD1nIs0M+lsEsRlABHDngKjBmSKi5ilg
+dklYWTHmUmsAkQ16aijFlUX8DMOjDCJxgBcIWtHrk/3cJP7QIgLCnFH+rbfC6+whZhUZdQgGXcKb
+PEMQI8C+AJLA+cA0HcYWQK+XP4nMAHlgHRB05ACm4SF4Asx6YU5PQGQC7VcaxgiabQAT1RmHSeXa
+AxMhXUcgBkCLKAGYp7mEiYaQxKQ5mKuLb9YlBuEq59AKMFvwgtBkEoeos9FnnZjAFNBVeBOMZAZw
+b1CTqH8Apx8m8UaTOIy23ZZNvN5uXGcU12vWfzqHzzfpz/YfYnp7p3nWhg+z25drEcx84+Tk0A35
+dKfd7LZ3G18Xjk5POt12pw9N60/y/qrK+ql5eAafJ9ePD3CD841Ku3/yZa9zsHv9G1WNDa98p6Ec
+tqt3P9F//Xf2tLkHGnZ40hmgt9E7t9zdXPP+u3pw/PmsBebm4ZeD492TL/U/BujyJe/ectdR5Qfo
++yDS/FeQY0X/9d/BHfQSnUElufLWLXcZoJriXEkxhES3vg4jy62vt95pmxqIveHPEJ3+18nJ0TDd
+du/d9mwP0WG0u2f7TbA/w3Q7fvu2Oy9Tba1SbBhRH8pst27fYHc754MY7KLlCCvqOzsnQ3U7evmW
+ew9h+vCeer99sLff/QZ3XTC45UE4vWESLx2DXb95q35+fNA9G2YQejnc8ihoDPaHFYUvB7vd/W+Q
+BP/+LQ/BgBFJ6ATGGd/mBXo53PJAZCkE7TK32QD+0IG2k9Nm66A7CO7pee/Wez6MFuDUDd7zy1+/
+5QFgSg9vBobqffnuLXf9EHfcDgV+zjsdNOTEYCgcVGXwF8gqlslOTKH986D9pY/E4sSf2aLvleek
+PGGZymPJ1KlfFMYNznmxi1nhzgfKCKZ5sQsid7QsxbVjQZsmHCVsbS62MNHWpTzDjUQmTwSHklpy
+vyMC2AEN0/aK2QQpUmcCKDKVivZIKPiA2x+YSFWWqaRVw1w+bTEUjEHbFG5TgloU7haCD0JK6VZQ
+ZK6BwlOLj1q0GKNwvUfAB2k47YoSGRXSaW4yfI271QHBbJrnIqfXcGcIrnhz5vZO4yYoaKogCvDG
+ZvZ2r3XVgg0DrSo2ftWzVONyBv7EvhU/PZlZaaD7mbCJyXAxTUqGudi6hnHTUL/GhXdobR0GJMet
+5/BBWZvltINbcMWpa/CX1qvrUnOdWmw5DC70Pc8ve1exXEIFMBx1KaCrGQcpaLSGq7bRd7W0MmaM
+hTHMUc4M1nntnuobU/EDD+73T8WDF9VagfRGStpoTLUA766edJtYNtJFdm3OPhad69Lzwgq3phYp
+m7ASE/yyVDbc46qMlKWy0SZ7Y2WsbLTNH6cnKJswOtVGs1LZcPsGzxiPlQ33IChGkuCUDQlWMl4q
+G75mZcZjZcPtfjbXolQ23F1oJFOlsl3sXl/K1iMOVWmoC5FnqVEgdRVVI5HPjBN5LhKSWmu81HJF
+uzSsyAqJN6RoUlsQeA1UqaCxLBfq4pt1+K5SGFnQMg3mg0NHQOKHqLHRZ424GQcwjfQaln+rhg0+
+ov8b+pU5P3nx/A4dwQGXJUgTWAZzc+RpFuYLnAQ4GEbewhra5Wdh0kikbcoN7vUhinIHbDgojt/l
+Z7VQpHlMIndgQDuCHIW7+jKrNalQRGM4Iz0U0tgKBdo57d7LrXPHJtPu0I3UOSfVo80d1E7cxeso
+wKlFrh0kT3sa7YTAHgvhOKGEVseFwxi0esYKgqyeUiDDycXxbPVx7Ad324NQMrB3GrEKg0HPNW3n
+NJwbJ6NgpfzBCvwIloq7rQXg/PDMEkAfnHfc8o97OrBo8RkPFZhMFOZu8KM/+u+1k6DZGWgjgXtz
+gD0EZVW32EmwkQrco7aDdBWN0AAd7dx+XCcYaoOyZpBuUkK7/27+BTLZw83mYN3s3H43ATdlEJlw
+NtBsDia0xRLc//3Wnv58xm0fxrvZ912PbC45kwT2AgF8eSgplVYxQ1E9HthVFbRDJIziIHKn6B7x
+AaMIIANnTkChQDtEUdoQ2gFQzxjzNIjKMBRQuZKOE8+Vp3BVRTsRjWVCJj0UeYHi0Y4pkgHagTFq
+QUaRjsVz2iJCO0gRnOMZKewNnhV0NIknNLDHgjlOeICkMiy4rb1VHSnCOhUCQp3esWz1f6op/wEo
+fgCKH4DiLzebPwDF/zWg8J6bkgV40BAPDqIvRi+RaTpwhbvYOR2ecNCiN3uOpwY4eCZytuAYDKYB
+wAVxI1wKPdBwQ7xB3wMKKbi7qiPjmDnHQ4KCPLKnYFYPk0O5jUvpFIJ/VnKKKL4+fC/QlPOIESeZ
+Zrm0cX2e0qpFrfK0qOWe08X+9RXrZ1fmbFhqOR5iJshWfIlal7skfhm+n8Of6o0CKlWW49lLnWpM
+cB65EcgpB4NZElwqgBEQivAN7hVDvAEUy3ARAYAins1u0eUBlGvGpKmkLDdeJ4DbvzFBqpRxLTNG
+ewJzsAEvVqCsrSuEBK4xV1vwQYqRlLYJteFwu7RJ0SQcXBh/VjYbT58izAh9w9cEjI0DXNIKQ+sx
+lGDFKaH7XLBIrhH+wCNjGK2rAG9CLnjCVQpBMiiZVCRdSsmoa0Qw1osgl9ZEhZTvSMEHKe4QeFkZ
+5rExm1k2CSkgknnZ7Ivz1s9lMeZKQcopxcidIBVfXJ/o/hvMqkqUI3+gZJ2qAriuwtIaGgCOm+s9
+Z1BtmiSHeKEDqFRHNN9WcKcDAJ7d0GmvXgJPaWKRnLkJsFwZP910CQ3JNObfcUoyvB4IKZSGR0pO
+MBe1S3qtxOtsnFIaq52UuGObeA7ZKymBZLploKgrx3OcbmyVszjGKPeSW4670LMrE/Syshhm8Og/
+/JQ418VPT2ZW4tU/uE6hBF0CpOnoZh3bg7lzPEcpYPZhhjKOclQHAeHaaBLj3JCEGLA+RtBimFJa
+4+lpGBsNn8Aq5Ze8qzPjNacOao8HLkHDcDFsmGobfVdL2pmR6IN0ZezmI5w3LoYNPLh/QrJeIozi
+WvWVrL/+AIvsdy0MrXPucuZkJo6IZvLMCT631imVc4OoZsKFfkJlzhjhuWdnsJTFFSmcV9QAi4ca
+rVNFqXJ3uQwEjk5beZY7y6/80jBqWe7Nk9XcaxkusdN5OFpbA6ViVhXVQSxsiKacOdSFFVVuSe1C
+3/rRsx5JqApCXTADUawCXa9oGUXuTJC0M1RxFNi8EFhspcWhRPef+SgYdAxkHSwMqgDIunCL9hfe
+rMMP7VYiUcVwLdIKdxxw4DobfdZJ9wKBjyX1ynIwdd+mXoOP6f+EcpXnwMpPPSmkpt9MEi7JUwXg
+lbhvBHeQ4BOu6fwwomHcU+Lv30i5v2vj0j0lqA9S0EI0QjkuPDzzNPB3hM4kbeAneGRMZinPYzQi
+sILSoitsDKl7WQrvReA6YhQIvja3OO5pyh20jxjBlHN0rmV1nuJAjG9UKBXaHTj19g7Xah0s9VcA
+VPodaICZJMFJgLzS7W3RUvc0hCi+IeTwy1IabAqt3QVGgRJ1PNA4wH/rdNFzYk6jovo8xY2za1Qo
+FNodGPX2rq8wILZvAP28sMAoZyzBTSdoww1edcQ1LewDjDUi95hO4D4GRF3UZGt93UJEoG44s3Bj
+U/70w5835Yv703RURlliV5wkSn7iQPGMMy+CnqbAxpHKYJrWy6B01ziCKWa0w8RTnAzanOdxKbzc
+ktuYU6D4+pwMehovVCZwwkAGAWhZn6e0alGrQqnQ8sCpt3/9CGE+qBByDEqdCOJKgszDCNGmnBzv
+wvyfl8C8300X392NZHQhU+5sKpgv5Sc82NRAAwORY6gHk0O7M8gpWNzMVBo5T3ECpk3O41LgFWwu
+Y06BEhnVQIO5J6cQGIFToEugyuo8pVWLGhVKhYYXjHp71484i0HFGWy7AZcVEi6MC365Tf2mTUe3
+JdF9r8GJ/m1qlA9wYiggxlCiKoaBhgtU2t1OaWkDHONunx6WoQ2WgeLE0GjG4lJg+YTgMadAicQw
+0HCXEUYuJSfc6IcXNpX1eYqXQ9eqqJRveeDU278rIxZ+5SDylBte2E2IHDJKP5atNq52iD8MAm+i
+VsrWtbayLEiXMfXFsnElS+w89DKvcPV2+7+HiCkVI2m3dBCfiOaALKXwMFgKWBfXNCHCUjEipose
+BdmeUApvh2Y2YhQIYTIjmsexESOPdaPqAiKOGhVKhXYHTr29KxAx7gi31la7XZA8jKVN28LIEupW
+2uEBMbZDWowQy1IoBZmIOQVK1O9A8zg24uSxblRfAMRRq0KpouGBUU/nBsTD9YsWk0mJt7cZZSv2
+u06g2OgIFKui2bn6XqC4z/bcNiwZDhjjZAUZ9cA4onk4S5e2UmK7gLw4yEJHSNmrhOQsLoQAQaiY
+UaAEnBrReKE4gZNHvGV1ARZHbQqFTGk5PKPe3g0IiweQRcTGqCwBHeMVs67d8nuh47+JKP4lEDLZ
+M25E1cgGmse1eZEbLaBvZPQCQMZDPXRTWlQK1xVtzKcgRCa2IDlQG3HxuDeqK6DjskGhUGhzwae3
+YwOC4wGE+lKE7JotdPKdEPLtSvV/ASXjgClreFUUA81jW5p5qUv4i0VyYysgmc6X0b3wZSlMbXER
+MwqUijB6moe2EScPf6P6AkguGxUV8u0OjHp71w9GrhdjyBQzeNcd7v7zhpQW0ytwNWp+iZbrEKUB
+isGF20phQ4shyDAGt33ybVzNFzuaacsuw8xDyf2lQ3Art6tdHbxULfawZyx77p5GE8bc0hQejQJD
+fhTTYPBxOyMCA81odQohvVXxGranuHWnjG6RLUvhchMt53pOEcXX59a5ZLEIbXJaZAmcBEw/03F9
+nuLgim+Vp0Ut95wu9g8FpVxzWGy4XxY0e7xLvyqoXq+NjCw399prnebBYbtT2ztr/rOdNI+PcSGk
+jWfMYa7aZ92TTjsp7huAV4riIyOzL5/V/gOEepm2
+
+</i:pgf>
+</svg:svg> \ No newline at end of file
diff --git a/trunk/data/icons/hicolor_apps_scalable_im-msn.svg b/trunk/data/icons/hicolor_apps_scalable_im-msn.svg
new file mode 100644
index 000000000..eb6511638
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_scalable_im-msn.svg
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.43"
+ width="48"
+ height="48"
+ version="1.0"
+ inkscape:export-filename="/home/vinicius/tango-icon-theme-code/protocols/msn-48.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:docbase="/home/vinicius/tango-icon-theme-code/protocols/scalable"
+ sodipodi:docname="msn.svg">
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title>MSN Protocol</dc:title>
+ <dc:date>2006-11-29</dc:date>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Vinicius Scopel Depizzol</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:source>vdepizzol@gmail.com</dc:source>
+ <dc:subject>
+ <rdf:Bag>
+ <rdf:li>MSN</rdf:li>
+ <rdf:li>Protocol</rdf:li>
+ </rdf:Bag>
+ </dc:subject>
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs5">
+ <linearGradient
+ id="linearGradient3286">
+ <stop
+ id="stop3288"
+ offset="0"
+ style="stop-color:#c7d9ec;stop-opacity:1;" />
+ <stop
+ id="stop3290"
+ offset="1"
+ style="stop-color:#dfe9f4;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7013">
+ <stop
+ style="stop-color:#c7d9ec;stop-opacity:1;"
+ offset="0"
+ id="stop7015" />
+ <stop
+ style="stop-color:#dfe9f4;stop-opacity:1;"
+ offset="1"
+ id="stop7017" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4380">
+ <stop
+ style="stop-color:#000000;stop-opacity:0.60344827;"
+ offset="0"
+ id="stop4382" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop4384" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient16408">
+ <stop
+ style="stop-color:#87b2e0;stop-opacity:1;"
+ offset="0"
+ id="stop16410" />
+ <stop
+ style="stop-color:#3f7ab9;stop-opacity:1;"
+ offset="1"
+ id="stop16412" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient14652">
+ <stop
+ style="stop-color:#badcff;stop-opacity:1;"
+ offset="0"
+ id="stop14654" />
+ <stop
+ style="stop-color:#729fcf;stop-opacity:1;"
+ offset="1"
+ id="stop14656" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient14652"
+ id="radialGradient14658"
+ cx="24.80966"
+ cy="3.1118734"
+ fx="24.80966"
+ fy="3.1118734"
+ r="4.045774"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.143376,-1.546375e-15,1.755727e-15,1.33519,-3.557111,-1.043069)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16408"
+ id="linearGradient2630"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.56247,0,0,2.753017,3.471512,0.653917)"
+ x1="7.3585782"
+ y1="10.033006"
+ x2="7.4242849"
+ y2="15.283006" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4380"
+ id="radialGradient4386"
+ cx="11.403918"
+ cy="11.820429"
+ fx="11.403918"
+ fy="11.820429"
+ r="3.9179103"
+ gradientTransform="matrix(1,0,0,0.4375,-9.43595e-18,6.648991)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4380"
+ id="radialGradient4390"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.4375,4.14469e-15,6.648991)"
+ cx="11.403918"
+ cy="11.820429"
+ fx="11.403918"
+ fy="11.820429"
+ r="3.9179103" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7013"
+ id="linearGradient7019"
+ x1="27.18845"
+ y1="8.5750885"
+ x2="23.755941"
+ y2="1.5480845"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3286"
+ id="linearGradient7027"
+ x1="14.197828"
+ y1="20.762081"
+ x2="5.7143059"
+ y2="8.1650333"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.045145,0,0,2.025318,0.739154,0.465862)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16408"
+ id="linearGradient7946"
+ x1="7.0555573"
+ y1="33.672562"
+ x2="11.832954"
+ y2="35.06567"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.927935,0,0,1,1.147813,0)" />
+ </defs>
+ <sodipodi:namedview
+ inkscape:window-height="714"
+ inkscape:window-width="1014"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ fill="#729fcf"
+ showborder="false"
+ inkscape:zoom="1"
+ inkscape:cx="37.5"
+ inkscape:cy="19"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:current-layer="svg2"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <path
+ transform="matrix(4.526985,0,0,3.006648,-28.23745,5.709214)"
+ sodipodi:open="true"
+ sodipodi:end="6.2799944"
+ sodipodi:start="0"
+ d="M 15.321829,11.820429 A 3.9179103,1.7140858 0 1 1 15.321809,11.814959"
+ sodipodi:ry="1.7140858"
+ sodipodi:rx="3.9179103"
+ sodipodi:cy="11.820429"
+ sodipodi:cx="11.403918"
+ id="path4388"
+ style="opacity:1;fill:url(#radialGradient4390);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.48917751"
+ sodipodi:type="arc" />
+ <path
+ style="fill:url(#linearGradient7946);fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.00000048px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1"
+ d="M 15.46346,24.414244 C 10.785493,28.476792 1.6101807,34.975993 7.2307622,38.679967 C 12.779079,42.336318 14.894624,28.872343 14.894624,28.872343"
+ id="path8525"
+ sodipodi:nodetypes="czc" />
+ <path
+ sodipodi:nodetypes="czc"
+ id="path7071"
+ d="M 15.353246,25.591713 C 11.734612,29.238525 3.2531464,35.09652 7.7417982,37.899128 C 12.001173,40.558581 14.043096,28.138937 14.043096,28.138937"
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#c7d9ec;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ style="fill:url(#linearGradient2630);fill-opacity:1;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.00000048px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 24.292455,17.301321 C 16.935857,17.428878 -2.1890432,43.377295 23.394922,43.377293 C 28.775671,43.377293 32.295389,42.22196 34.344814,40.402607 C 34.359882,40.38923 34.389733,40.416057 34.404649,40.402607 C 35.545703,40.890781 38.571551,39.598037 39.909512,38.693744 C 45.082133,35.19771 36.500579,26.909532 31.532546,22.301325 C 31.401541,22.179808 26.294466,17.48873 24.531797,17.364612 C 24.447957,17.358794 24.379687,17.299808 24.292455,17.301321 z "
+ id="path5023"
+ sodipodi:nodetypes="cssssssc" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient7027);stroke-width:1.00000083px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 23.624857,42.414249 C -0.59814104,42.64502 18.255106,18.509032 24.039065,18.512059 C 26.410046,18.588582 38.20781,29.175081 40.119099,34.372181 C 41.916319,37.111847 36.635193,40.539824 34.716977,38.456356 C 33.320614,40.39141 29.993406,42.401612 23.624857,42.414249 z "
+ id="path5900"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ style="fill:#000000;fill-opacity:0.12987013;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 30.401802,32.658992 C 30.401802,32.658992 29.835279,40.428683 33.786549,40.24678 C 36.824985,40.104721 30.583172,32.660882 30.401802,32.658992 z "
+ id="path5265"
+ sodipodi:nodetypes="csc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#radialGradient4386);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.48917751"
+ id="path3505"
+ sodipodi:cx="11.403918"
+ sodipodi:cy="11.820429"
+ sodipodi:rx="3.9179103"
+ sodipodi:ry="1.7140858"
+ d="M 15.321829,11.820429 A 3.9179103,1.7140858 0 1 1 15.321809,11.814959"
+ sodipodi:start="0"
+ sodipodi:end="6.2799944"
+ sodipodi:open="true"
+ transform="matrix(2.166658,0,0,3.055838,-1.154206,-14.5643)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#radialGradient14658);fill-opacity:1;fill-rule:nonzero;stroke:#3465a4;stroke-width:0.34177133;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path2396"
+ sodipodi:cx="26.385618"
+ sodipodi:cy="4.5758967"
+ sodipodi:rx="3.595403"
+ sodipodi:ry="3.595403"
+ d="M 29.981021,4.5758967 A 3.595403,3.595403 0 1 1 29.981003,4.5644242"
+ sodipodi:start="0"
+ sodipodi:end="6.2799944"
+ sodipodi:open="true"
+ transform="matrix(2.924455,0,0,2.927415,-53.17815,-0.370312)" />
+ <path
+ transform="matrix(2.645712,0,0,2.622481,-45.82115,0.928673)"
+ sodipodi:open="true"
+ sodipodi:end="6.2799944"
+ sodipodi:start="0"
+ d="M 29.981021,4.5758967 A 3.595403,3.595403 0 1 1 29.981003,4.5644242"
+ sodipodi:ry="3.595403"
+ sodipodi:rx="3.595403"
+ sodipodi:cy="4.5758967"
+ sodipodi:cx="26.385618"
+ id="path2398"
+ style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient7019);stroke-width:0.37964022;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path14660"
+ d="M 34.763497,38.506802 C 32.960413,37.064271 31.152443,33.19781 31.176374,32.550651"
+ style="fill:none;fill-opacity:0.92941176;fill-rule:evenodd;stroke:#c7d9ec;stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-opacity:0.92941176;fill-rule:evenodd;stroke:#3465a4;stroke-width:1.00000036px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="M 36.615639,40.197689 C 31.377707,39.46 30.570319,32.555681 30.570319,32.555681"
+ id="path10279"
+ sodipodi:nodetypes="cc" />
+</svg>
diff --git a/trunk/data/icons/hicolor_apps_scalable_im-sip.svg b/trunk/data/icons/hicolor_apps_scalable_im-sip.svg
new file mode 100644
index 000000000..309fbf37b
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_scalable_im-sip.svg
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/s odipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.43"
+ version="1.0"
+ sodipodi:docbase="/home/hbons/Desktop/Gaim Refresh/protocols/48"
+ sodipodi:docname="sip.svg"
+ inkscape:export-filename="/home/hbons/Desktop/Gaim Refresh/sip.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2227">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop2229" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop2231" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2264">
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:1;"
+ offset="0"
+ id="stop2266" />
+ <stop
+ style="stop-color:#eeeeec;stop-opacity:0;"
+ offset="1"
+ id="stop2268" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3150">
+ <stop
+ style="stop-color:#2e3436;stop-opacity:1;"
+ offset="0"
+ id="stop3152" />
+ <stop
+ style="stop-color:#2e3436;stop-opacity:0;"
+ offset="1"
+ id="stop3154" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3150"
+ id="radialGradient3156"
+ cx="10.748654"
+ cy="10.457643"
+ fx="10.748654"
+ fy="10.457643"
+ r="6.6449099"
+ gradientTransform="matrix(-1.017285,3.152773e-16,-5.511361e-9,-0.35721,21.6831,14.19321)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2316">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop2318" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop2320" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2316"
+ id="linearGradient2322"
+ x1="11.5"
+ y1="-1.7001089"
+ x2="11.5"
+ y2="6.1576657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(-0.526317,6.411502)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2264"
+ id="linearGradient2270"
+ x1="-13.576514"
+ y1="7.5"
+ x2="-9"
+ y2="7.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2264"
+ id="linearGradient2272"
+ x1="5"
+ y1="-15.5"
+ x2="14"
+ y2="-15.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2264"
+ id="linearGradient2274"
+ x1="5"
+ y1="-21.5"
+ x2="10"
+ y2="-21.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2264"
+ id="linearGradient2276"
+ x1="16"
+ y1="5.5"
+ x2="21"
+ y2="5.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2264"
+ id="linearGradient2278"
+ x1="16"
+ y1="9.5"
+ x2="21"
+ y2="9.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2264"
+ id="linearGradient2280"
+ x1="5"
+ y1="-11.5"
+ x2="14"
+ y2="-11.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2264"
+ id="linearGradient2282"
+ x1="1"
+ y1="13.5"
+ x2="8"
+ y2="13.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2264"
+ id="linearGradient2284"
+ x1="1"
+ y1="9.5"
+ x2="8"
+ y2="9.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2264"
+ id="linearGradient2286"
+ x1="-10"
+ y1="1.5"
+ x2="-5.4234858"
+ y2="1.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2264"
+ id="linearGradient2288"
+ x1="1"
+ y1="5.5"
+ x2="8"
+ y2="5.5"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2227"
+ id="linearGradient2233"
+ x1="25.0156"
+ y1="8.8961887"
+ x2="25.0156"
+ y2="21.733829"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="13.788817"
+ inkscape:cx="34.924917"
+ inkscape:cy="22.006439"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ fill="#eeeeec"
+ inkscape:window-width="1268"
+ inkscape:window-height="971"
+ inkscape:window-x="6"
+ inkscape:window-y="21" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.4;fill:url(#radialGradient3156);fill-opacity:1;stroke:none;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3140"
+ sodipodi:cx="10.748654"
+ sodipodi:cy="10.457643"
+ sodipodi:rx="6.6449099"
+ sodipodi:ry="2.3675451"
+ d="M 17.393564 10.457643 A 6.6449099 2.3675451 0 1 1 4.1037445,10.457643 A 6.6449099 2.3675451 0 1 1 17.393564 10.457643 z"
+ transform="matrix(3.376861,0,0,1.900703,-12.73565,10.62313)" />
+ <path
+ style="fill:#729fcf;fill-opacity:1;stroke:#3465a4;stroke-width:1.00000095;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 2.4375,10.5 L 2.4375,22.5 L 13.75,22.5 L 13.75,26.5 L 2.4375,26.5 L 2.4375,30.5 L 17.5,30.5 L 17.5,18.5 L 6.21875,18.5 L 6.21875,14.5 L 17.5,14.5 L 17.5,10.5 L 2.4375,10.5 z M 21.46875,10.5 L 21.46875,30.5 L 25.5,30.5 L 25.5,10.5 L 21.46875,10.5 z M 29.5,10.5 L 29.5,30.5 L 33.5,30.5 L 33.5,22.5 L 45.5,22.5 L 45.5,10.5 L 29.5,10.5 z M 33.5,14.5 L 41.5,14.5 L 41.5,18.5625 L 33.5,18.5625 L 33.5,14.5 z "
+ id="rect2212" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-1.0424688"
+ inkscape:original="M 2.4375 10.5 L 2.4375 22.5 L 13.75 22.5 L 13.75 26.5 L 2.4375 26.5 L 2.4375 30.5 L 17.5 30.5 L 17.5 18.5 L 6.21875 18.5 L 6.21875 14.5 L 17.5 14.5 L 17.5 10.5 L 2.4375 10.5 z M 21.46875 10.5 L 21.46875 30.5 L 25.5 30.5 L 25.5 10.5 L 21.46875 10.5 z M 29.5 10.5 L 29.5 30.5 L 33.5 30.5 L 33.5 22.5 L 45.5 22.5 L 45.5 10.5 L 29.5 10.5 z M 33.5 14.5 L 41.5 14.5 L 41.5 18.5625 L 33.5 18.5625 L 33.5 14.5 z "
+ xlink:href="#rect2212"
+ style="fill:url(#linearGradient2233);fill-opacity:1.0;stroke:#ffffff;stroke-width:1.00000095;stroke-miterlimit:4;stroke-opacity:1;opacity:0.35"
+ id="path1352"
+ inkscape:href="#rect2212"
+ d="M 3.46875,11.53125 L 3.46875,21.46875 L 13.75,21.46875 C 14.316987,21.474875 14.775125,21.933013 14.78125,22.5 L 14.78125,26.5 C 14.775125,27.066987 14.316987,27.525125 13.75,27.53125 L 3.46875,27.53125 L 3.46875,29.46875 L 16.46875,29.46875 L 16.46875,19.53125 L 6.21875,19.53125 C 5.6517628,19.525125 5.1936251,19.066987 5.1875,18.5 L 5.1875,14.5 C 5.1936251,13.933013 5.6517628,13.474875 6.21875,13.46875 L 16.46875,13.46875 L 16.46875,11.53125 L 3.46875,11.53125 z M 22.5,11.53125 L 22.5,29.46875 L 24.46875,29.46875 L 24.46875,11.53125 L 22.5,11.53125 z M 30.53125,11.53125 L 30.53125,29.46875 L 32.46875,29.46875 L 32.46875,22.5 C 32.474875,21.933013 32.933013,21.474875 33.5,21.46875 L 44.46875,21.46875 L 44.46875,11.53125 L 30.53125,11.53125 z M 33.3125,13.46875 C 33.374873,13.463118 33.437627,13.463118 33.5,13.46875 L 41.5,13.46875 C 42.066987,13.474875 42.525125,13.933013 42.53125,14.5 L 42.53125,18.5625 C 42.525125,19.129487 42.066987,19.587625 41.5,19.59375 L 33.5,19.59375 C 32.933013,19.587625 32.474875,19.129487 32.46875,18.5625 L 32.46875,14.5 C 32.464991,13.997926 32.819624,13.564486 33.3125,13.46875 z " />
+ </g>
+</svg>
diff --git a/trunk/data/icons/hicolor_apps_scalable_im-xmpp.svg b/trunk/data/icons/hicolor_apps_scalable_im-xmpp.svg
new file mode 100644
index 000000000..a0a9eb866
--- /dev/null
+++ b/trunk/data/icons/hicolor_apps_scalable_im-xmpp.svg
@@ -0,0 +1,632 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="48"
+ height="48"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ sodipodi:docbase="/home/baze/Desktop/jabber/scalable"
+ sodipodi:docname="jabber.svg"
+ version="1.0"
+ inkscape:export-filename="/home/baze/Desktop/jabber/scalable/jabber.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient6156">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop6158" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop6160" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient6339">
+ <stop
+ style="stop-color:#cc0000;stop-opacity:1;"
+ offset="0"
+ id="stop6341" />
+ <stop
+ style="stop-color:#cc0000;stop-opacity:0;"
+ offset="1"
+ id="stop6343" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6305">
+ <stop
+ id="stop6307"
+ offset="0"
+ style="stop-color:#cc0000;stop-opacity:0;" />
+ <stop
+ id="stop6309"
+ offset="1"
+ style="stop-color:#cc0000;stop-opacity:0.61176473;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1311">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop1313" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop1315" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient5100"
+ gradientUnits="userSpaceOnUse"
+ x1="27.943266"
+ y1="1.5"
+ x2="27.943266"
+ y2="25.500046" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient5121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8271607,0,0,0.4916824,67.476312,197.10085)"
+ x1="274.33041"
+ y1="394.74817"
+ x2="279.77005"
+ y2="394.74817" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient5125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.7618383,0,0,0.6527934,502.60091,134.89766)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient5128"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8271607,0,0,0.4916824,68.20175,195.70886)"
+ x1="273.4534"
+ y1="397.57925"
+ x2="278.89304"
+ y2="397.57925" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient5131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.7618383,0,0,0.6527934,502.60091,133.50572)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient5134"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.7618383,0,0,0.6527934,502.60091,133.41933)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient5137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.7618383,0,0,0.6527934,502.60091,133.33292)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient5140"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8271607,0,0,0.4916824,68.201735,195.89128)"
+ x1="273.4534"
+ y1="397.20825"
+ x2="278.89304"
+ y2="397.20825" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient5143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8271607,0,0,0.4916824,68.201735,195.90514)"
+ x1="273.4534"
+ y1="397.18005"
+ x2="278.89304"
+ y2="397.18005" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient5146"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8271607,0,0,0.4916824,68.201764,196.05741)"
+ x1="273.45337"
+ y1="396.87036"
+ x2="278.89301"
+ y2="396.87036" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient5150"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8923776,0,0,0.9986827,270.78512,364.22471)"
+ x1="28.032001"
+ y1="3.8257253"
+ x2="28.032001"
+ y2="29.140774" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6339"
+ id="linearGradient5153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4184829,0,0,1.4000056,-75.308126,-131.49921)"
+ x1="262.54434"
+ y1="363.74292"
+ x2="256.31683"
+ y2="368.26056" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6156"
+ id="radialGradient6162"
+ cx="13.992072"
+ cy="29.030083"
+ fx="13.992072"
+ fy="29.030083"
+ r="6.9228339"
+ gradientTransform="matrix(1,0,0,0.2960725,0,20.435073)"
+ gradientUnits="userSpaceOnUse" />
+ <filter
+ inkscape:collect="always"
+ x="-0.030158492"
+ width="1.060317"
+ y="-0.10186184"
+ height="1.2037237"
+ id="filter6184">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="0.17398519"
+ id="feGaussianBlur6186" />
+ </filter>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6156"
+ id="radialGradient6224"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2960725,0,20.435073)"
+ cx="13.992072"
+ cy="29.030083"
+ fx="13.992072"
+ fy="29.030083"
+ r="6.9228339" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6339"
+ id="linearGradient6226"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4184829,0,0,1.4000056,-75.308126,-131.49921)"
+ x1="262.54434"
+ y1="363.74292"
+ x2="256.31683"
+ y2="368.26056" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6228"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8923776,0,0,0.9986827,270.78512,364.22471)"
+ x1="28.032001"
+ y1="3.8257253"
+ x2="28.032001"
+ y2="29.140774" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6230"
+ gradientUnits="userSpaceOnUse"
+ x1="27.943266"
+ y1="1.5"
+ x2="27.943266"
+ y2="25.500046" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient6232"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8271607,0,0,0.4916824,68.201764,196.05741)"
+ x1="273.45337"
+ y1="396.87036"
+ x2="278.89301"
+ y2="396.87036" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient6234"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8271607,0,0,0.4916824,68.201735,195.90514)"
+ x1="273.4534"
+ y1="397.18005"
+ x2="278.89304"
+ y2="397.18005" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient6236"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8271607,0,0,0.4916824,68.201735,195.89128)"
+ x1="273.4534"
+ y1="397.20825"
+ x2="278.89304"
+ y2="397.20825" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6238"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.7618383,0,0,0.6527934,502.60091,133.33292)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6240"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.7618383,0,0,0.6527934,502.60091,133.41933)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6242"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.7618383,0,0,0.6527934,502.60091,133.50572)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient6244"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8271607,0,0,0.4916824,68.20175,195.70886)"
+ x1="273.4534"
+ y1="397.57925"
+ x2="278.89304"
+ y2="397.57925" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6246"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.7618383,0,0,0.6527934,502.60091,134.89766)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient6248"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8271607,0,0,0.4916824,67.476312,197.10085)"
+ x1="274.33041"
+ y1="394.74817"
+ x2="279.77005"
+ y2="394.74817" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient6251"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2619512,0,0,0.7413853,-43.834448,110.10038)"
+ x1="274.33041"
+ y1="394.74817"
+ x2="279.77005"
+ y2="394.74817" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6255"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.1622926,0,0,0.9843171,618.12748,16.198336)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient6258"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2619512,0,0,0.7413853,-42.834449,108.10035)"
+ x1="273.4534"
+ y1="397.57925"
+ x2="278.89304"
+ y2="397.57925" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6261"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.1622926,0,0,0.9843171,618.12748,14.198414)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6264"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.1622926,0,0,0.9843171,618.12748,14.16705)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6267"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.1622926,0,0,0.9843171,618.12748,14.135677)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient6270"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2619512,0,0,0.7413853,-42.834472,108.47434)"
+ x1="273.4534"
+ y1="397.20825"
+ x2="278.89304"
+ y2="397.20825" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient6273"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2619512,0,0,0.7413853,-42.834472,108.59416)"
+ x1="273.4534"
+ y1="397.18005"
+ x2="278.89304"
+ y2="397.18005" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6305"
+ id="linearGradient6276"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.2619512,0,0,0.7413853,-42.834428,108.92266)"
+ x1="273.45337"
+ y1="396.87036"
+ x2="278.89301"
+ y2="396.87036" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6280"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4173051,0,0,1.5768665,263.83554,361.89844)"
+ x1="28.032001"
+ y1="3.8257253"
+ x2="28.032001"
+ y2="29.140774" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6339"
+ id="linearGradient6283"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.1640972,0,0,2.1331674,-262.6967,-392.68034)"
+ x1="262.54434"
+ y1="363.74292"
+ x2="256.31683"
+ y2="368.26056" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6288"
+ gradientUnits="userSpaceOnUse"
+ x1="27.943266"
+ y1="1.5"
+ x2="27.943266"
+ y2="25.500046" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6156"
+ id="radialGradient6290"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.2960725,0,20.435073)"
+ cx="13.992072"
+ cy="29.030083"
+ fx="13.992072"
+ fy="29.030083"
+ r="6.9228339" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1311"
+ id="linearGradient6294"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1.1622926,0,0,0.9843171,619.12748,18.19834)"
+ x1="278.50909"
+ y1="391.67624"
+ x2="273.50909"
+ y2="391.73898" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="1"
+ guidetolerance="0.4"
+ objecttolerance="0.4"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="16.904373"
+ inkscape:cx="36.723208"
+ inkscape:cy="13.602623"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer5"
+ showgrid="true"
+ inkscape:grid-points="false"
+ inkscape:window-width="1024"
+ inkscape:window-height="723"
+ inkscape:window-x="0"
+ inkscape:window-y="25"
+ width="48px"
+ height="48px"
+ gridspacingx="1px"
+ gridspacingy="1px"
+ inkscape:grid-bbox="true"
+ showguides="true"
+ inkscape:guide-bbox="true">
+ <sodipodi:guide
+ orientation="vertical"
+ position="11.001241"
+ id="guide6343" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="Layer1"
+ style="display:inline"
+ transform="translate(-278.49946,-366.7429)">
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.2;fill:url(#radialGradient6290);fill-opacity:1;stroke:none;stroke-width:16.60000038;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter6184)"
+ id="path5161"
+ sodipodi:cx="13.992072"
+ sodipodi:cy="29.030083"
+ sodipodi:rx="6.9228339"
+ sodipodi:ry="2.0496609"
+ d="M 20.914906 29.030083 A 6.9228339 2.0496609 0 1 1 7.0692382,29.030083 A 6.9228339 2.0496609 0 1 1 20.914906 29.030083 z"
+ transform="matrix(1.3000458,0,0,1.4636583,283.30913,369.25278)" />
+ <path
+ style="fill:#555753;fill-rule:evenodd;stroke:#2f312e;stroke-width:1.00000036px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 296.11675,408.3226 C 297.0139,407.8359 305.98507,407.8359 306.88215,408.3226 C 307.7793,408.80934 303.29371,411.24291 301.49948,411.24291 C 299.70529,411.24291 295.21967,408.80934 296.11675,408.3226 z "
+ id="path5592"
+ sodipodi:nodetypes="czzz" />
+ <path
+ style="fill:#edd400;fill-opacity:1;fill-rule:nonzero;stroke:#c4a000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ d="M 294.55231,397.1754 C 293.58927,397.59612 292.99947,398.09958 292.99947,398.65147 C 292.99947,399.024 294.45661,399.3503 294.92021,399.67061 C 294.45661,399.99097 292.99947,400.3524 292.99947,400.72498 C 292.99947,401.09749 294.45661,401.42381 294.92021,401.74412 C 294.45661,402.06445 292.99947,402.42593 292.99947,402.79846 C 292.99947,403.17099 294.45661,403.53243 294.92021,403.85278 C 294.45661,404.17311 292.99947,404.49942 292.99947,404.87198 C 292.99947,405.3804 294.70453,405.87718 295.53321,406.27775 C 295.36596,406.49377 294.31722,406.50981 294.31722,406.74421 C 294.31722,408.17684 297.39386,408.88494 301.49946,408.88494 C 305.60498,408.88494 308.79106,408.17684 308.79106,406.74421 C 308.79106,406.50981 307.73306,406.49377 307.56586,406.27775 C 308.39448,405.87718 309.99948,405.3804 309.99948,404.87198 C 309.99948,404.49942 308.60152,404.17311 308.13795,403.85278 C 308.60152,403.53243 309.99948,403.17099 309.99948,402.79846 C 309.99948,402.42593 308.60152,402.06445 308.13795,401.74412 C 308.60152,401.42381 309.99948,401.09749 309.99948,400.72498 C 309.99948,400.3524 308.60152,399.99097 308.13795,399.67061 C 308.60152,399.3503 309.99948,399.024 309.99948,398.65147 C 309.99948,398.10561 309.4314,397.59351 308.48744,397.1754 C 306.69453,398.16654 304.04176,398.49379 301.58831,398.55875 C 299.15979,398.62304 296.91696,398.33866 294.55231,397.1754 z "
+ id="path5590"
+ sodipodi:nodetypes="cscscscscssscscscscscsc" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6283);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+ d="M 315.99092,380.18994 C 315.99092,387.67268 310.43033,391.38117 307.59632,396.93814 C 306.63787,398.81727 303.69021,399.2429 301.44323,399.2429 C 299.18267,399.2429 296.34335,398.83222 295.38594,396.93814 C 292.58466,391.39636 287.00372,388.41334 287.00372,380.18994 C 287.00372,371.96654 293.82138,367.24551 301.49763,367.24551 C 309.16091,367.24551 315.99092,372.70717 315.99092,380.18994 z "
+ id="path4659"
+ sodipodi:nodetypes="cssszsz" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6280);stroke-width:1.00000095;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+ d="M 288.07066,381.20002 C 288.3095,388.08935 295.41504,392.41305 296.77687,397.23419 C 299.93024,398.67946 303.14035,398.5193 306.18423,397.08848 C 309.47478,390.95505 314.30064,387.09849 314.98118,381.05927 C 315.41813,373.11194 307.93381,368.24291 301.93649,368.24291 C 293.56935,368.24291 287.25346,373.68738 288.07066,381.20002 z "
+ id="path5564"
+ sodipodi:nodetypes="ccccsc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#linearGradient6288);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.3233397;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+ id="path5556"
+ sodipodi:cx="26.5"
+ sodipodi:cy="13.5"
+ sodipodi:rx="11.5"
+ sodipodi:ry="11.5"
+ d="M 38 13.5 A 11.5 11.5 0 1 1 15,13.5 A 11.5 11.5 0 1 1 38 13.5 z"
+ transform="matrix(0.7826087,0,0,0.3913042,280.76033,368.96029)" />
+ <path
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6276);stroke-width:1.00000072px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 302.95166,398.98428 C 306.73753,398.98428 307.99946,398.2429 307.99946,398.2429"
+ id="path6619"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6273);stroke-width:1.00000072px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 303.43041,400.87994 C 306.8572,400.87994 307.99946,400.2429 307.99946,400.2429"
+ id="path6621"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6270);stroke-width:1.00000072px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 303.43041,402.9843 C 306.8572,402.9843 307.99946,402.2429 307.99946,402.2429"
+ id="path6623"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="opacity:0.80349342;fill:none;fill-rule:evenodd;stroke:url(#linearGradient6267);stroke-width:1.00000048px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 299.64862,399.2429 C 296.16175,399.2429 294.99946,398.25859 294.99946,398.25859"
+ id="path6652"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="opacity:0.80349342;fill:none;fill-rule:evenodd;stroke:url(#linearGradient6264);stroke-width:1.00000048px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="M 299.64862,401.2429 C 296.16175,401.2429 294.99946,400.25859 294.99946,400.25859"
+ id="path6654"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="opacity:0.80349342;fill:none;fill-rule:evenodd;stroke:url(#linearGradient6261);stroke-width:1.00000048px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="M 299.64862,403.2429 C 296.16175,403.2429 294.99946,402.25859 294.99946,402.25859"
+ id="path6656"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6258);stroke-width:1.00000072px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+ d="M 303.43041,404.83446 C 306.8572,404.83446 307.99946,404.2429 307.99946,404.2429"
+ id="path6695"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="opacity:0.80349342;fill:none;fill-rule:evenodd;stroke:url(#linearGradient6255);stroke-width:1.00000048px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="M 299.64862,405.2429 C 296.16175,405.2429 294.99946,404.25859 294.99946,404.25859"
+ id="path6708"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:#fed12d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="M 292.49946,378.7429 L 297.0611,394.715 L 297.03628,382.82739 L 306.06504,382.82739 L 305.98222,394.7429 L 310.49946,378.7429 L 306.63651,380.79208 L 296.33848,380.79208 L 292.49946,378.7429 z "
+ id="path6155"
+ sodipodi:nodetypes="ccccccccc" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path6126"
+ d="M 302.43041,406.83448 C 305.8572,406.83448 306.99946,406.2429 306.99946,406.2429"
+ style="color:#000000;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6251);stroke-width:1.00000072px;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+ <path
+ style="opacity:0.80349342;fill:none;fill-rule:evenodd;stroke:url(#linearGradient6294);stroke-width:1.00000048px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+ d="M 300.64862,407.2429 C 297.16175,407.2429 295.99946,406.25859 295.99946,406.25859"
+ id="path6292"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/trunk/data/icons/hicolor_status_16x16_empathy-available.png b/trunk/data/icons/hicolor_status_16x16_empathy-available.png
new file mode 100644
index 000000000..5435e02d5
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_16x16_empathy-available.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_16x16_empathy-away.png b/trunk/data/icons/hicolor_status_16x16_empathy-away.png
new file mode 100644
index 000000000..7576a611f
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_16x16_empathy-away.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_16x16_empathy-busy.png b/trunk/data/icons/hicolor_status_16x16_empathy-busy.png
new file mode 100644
index 000000000..90eab6077
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_16x16_empathy-busy.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_16x16_empathy-extended-away.png b/trunk/data/icons/hicolor_status_16x16_empathy-extended-away.png
new file mode 100644
index 000000000..9dec477e1
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_16x16_empathy-extended-away.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_16x16_empathy-offline.png b/trunk/data/icons/hicolor_status_16x16_empathy-offline.png
new file mode 100644
index 000000000..637be12cb
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_16x16_empathy-offline.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_16x16_empathy-pending.png b/trunk/data/icons/hicolor_status_16x16_empathy-pending.png
new file mode 100644
index 000000000..0aa2c5f49
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_16x16_empathy-pending.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_16x16_im-message.png b/trunk/data/icons/hicolor_status_16x16_im-message.png
new file mode 100644
index 000000000..be0e2e157
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_16x16_im-message.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_16x16_user-typing.png b/trunk/data/icons/hicolor_status_16x16_user-typing.png
new file mode 100644
index 000000000..5c272a339
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_16x16_user-typing.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_22x22_empathy-available.png b/trunk/data/icons/hicolor_status_22x22_empathy-available.png
new file mode 100644
index 000000000..ec8c4522b
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_22x22_empathy-available.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_22x22_empathy-away.png b/trunk/data/icons/hicolor_status_22x22_empathy-away.png
new file mode 100644
index 000000000..6c068f2d4
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_22x22_empathy-away.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_22x22_empathy-busy.png b/trunk/data/icons/hicolor_status_22x22_empathy-busy.png
new file mode 100644
index 000000000..0fe61fd23
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_22x22_empathy-busy.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_22x22_empathy-extended-away.png b/trunk/data/icons/hicolor_status_22x22_empathy-extended-away.png
new file mode 100644
index 000000000..72c5b1985
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_22x22_empathy-extended-away.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_22x22_empathy-offline.png b/trunk/data/icons/hicolor_status_22x22_empathy-offline.png
new file mode 100644
index 000000000..fe5de8288
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_22x22_empathy-offline.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_22x22_empathy-pending.png b/trunk/data/icons/hicolor_status_22x22_empathy-pending.png
new file mode 100644
index 000000000..b79e7e56d
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_22x22_empathy-pending.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_24x24_empathy-available.png b/trunk/data/icons/hicolor_status_24x24_empathy-available.png
new file mode 100644
index 000000000..95f25345a
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_24x24_empathy-available.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_24x24_empathy-away.png b/trunk/data/icons/hicolor_status_24x24_empathy-away.png
new file mode 100644
index 000000000..3a7e01f16
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_24x24_empathy-away.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_24x24_empathy-busy.png b/trunk/data/icons/hicolor_status_24x24_empathy-busy.png
new file mode 100644
index 000000000..7e5dced26
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_24x24_empathy-busy.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_24x24_empathy-extended-away.png b/trunk/data/icons/hicolor_status_24x24_empathy-extended-away.png
new file mode 100644
index 000000000..968472e74
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_24x24_empathy-extended-away.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_24x24_empathy-offline.png b/trunk/data/icons/hicolor_status_24x24_empathy-offline.png
new file mode 100644
index 000000000..bdfc8855b
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_24x24_empathy-offline.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_24x24_empathy-pending.png b/trunk/data/icons/hicolor_status_24x24_empathy-pending.png
new file mode 100644
index 000000000..dc5bb5993
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_24x24_empathy-pending.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_32x32_empathy-available.png b/trunk/data/icons/hicolor_status_32x32_empathy-available.png
new file mode 100644
index 000000000..5d04e0a23
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_32x32_empathy-available.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_32x32_empathy-away.png b/trunk/data/icons/hicolor_status_32x32_empathy-away.png
new file mode 100644
index 000000000..712f68aea
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_32x32_empathy-away.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_32x32_empathy-busy.png b/trunk/data/icons/hicolor_status_32x32_empathy-busy.png
new file mode 100644
index 000000000..be1280e75
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_32x32_empathy-busy.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_32x32_empathy-extended-away.png b/trunk/data/icons/hicolor_status_32x32_empathy-extended-away.png
new file mode 100644
index 000000000..cf7ff2db7
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_32x32_empathy-extended-away.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_32x32_empathy-offline.png b/trunk/data/icons/hicolor_status_32x32_empathy-offline.png
new file mode 100644
index 000000000..3c4d664f2
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_32x32_empathy-offline.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_32x32_empathy-pending.png b/trunk/data/icons/hicolor_status_32x32_empathy-pending.png
new file mode 100644
index 000000000..ed195498a
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_32x32_empathy-pending.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_48x48_empathy-available.png b/trunk/data/icons/hicolor_status_48x48_empathy-available.png
new file mode 100644
index 000000000..5bcae55c2
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_48x48_empathy-available.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_48x48_empathy-away.png b/trunk/data/icons/hicolor_status_48x48_empathy-away.png
new file mode 100644
index 000000000..f9d7aeefa
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_48x48_empathy-away.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_48x48_empathy-busy.png b/trunk/data/icons/hicolor_status_48x48_empathy-busy.png
new file mode 100644
index 000000000..b6c60c902
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_48x48_empathy-busy.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_48x48_empathy-extended-away.png b/trunk/data/icons/hicolor_status_48x48_empathy-extended-away.png
new file mode 100644
index 000000000..3ca50e5a0
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_48x48_empathy-extended-away.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_48x48_empathy-offline.png b/trunk/data/icons/hicolor_status_48x48_empathy-offline.png
new file mode 100644
index 000000000..b65080ba0
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_48x48_empathy-offline.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_48x48_empathy-pending.png b/trunk/data/icons/hicolor_status_48x48_empathy-pending.png
new file mode 100644
index 000000000..405015597
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_48x48_empathy-pending.png
Binary files differ
diff --git a/trunk/data/icons/hicolor_status_scalable_empathy-available.svg b/trunk/data/icons/hicolor_status_scalable_empathy-available.svg
new file mode 100644
index 000000000..8d4cc585f
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_scalable_empathy-available.svg
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ id="svg4908"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ sodipodi:docbase="/home/andreas/project/gossip/16x16"
+ sodipodi:docname="status-avaible.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/gossip/16x16/status-avaible.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs4910">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5899">
+ <stop
+ style="stop-color:#7fe719;stop-opacity:1"
+ offset="0"
+ id="stop5901" />
+ <stop
+ style="stop-color:#67bc13;stop-opacity:1"
+ offset="1"
+ id="stop5903" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5899"
+ id="radialGradient5905"
+ cx="9.466115"
+ cy="8.9839392"
+ fx="9.466115"
+ fy="8.9839392"
+ r="6.7474474"
+ gradientTransform="matrix(1.1671849,-3.2679277e-3,2.7524467e-3,1.0150183,-1.6222549,-0.2024225)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.197802"
+ inkscape:cx="14.452639"
+ inkscape:cy="6.4458104"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1674"
+ inkscape:window-height="969"
+ inkscape:window-x="0"
+ inkscape:window-y="26" />
+ <metadata
+ id="metadata4913">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#radialGradient5905);fill-opacity:1;stroke:#376e01;stroke-width:0.97113216;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4926"
+ sodipodi:cx="7.9737625"
+ sodipodi:cy="7.7221532"
+ sodipodi:rx="6.2618814"
+ sodipodi:ry="6.3632426"
+ d="M 14.235644 7.7221532 A 6.2618814 6.3632426 0 1 1 1.7118812,7.7221532 A 6.2618814 6.3632426 0 1 1 14.235644 7.7221532 z"
+ transform="matrix(1.0380267,0,0,1.0214918,-0.2769783,0.1118841)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.4;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.14770162;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5897"
+ sodipodi:cx="7.9737625"
+ sodipodi:cy="7.7221532"
+ sodipodi:rx="6.2618814"
+ sodipodi:ry="6.3632426"
+ d="M 14.235644 7.7221532 A 6.2618814 6.3632426 0 1 1 1.7118812,7.7221532 A 6.2618814 6.3632426 0 1 1 14.235644 7.7221532 z"
+ transform="matrix(0.8783303,0,0,0.8643392,0.996403,1.3254404)" />
+ </g>
+</svg>
diff --git a/trunk/data/icons/hicolor_status_scalable_empathy-away.svg b/trunk/data/icons/hicolor_status_scalable_empathy-away.svg
new file mode 100644
index 000000000..7e7b0ed6b
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_scalable_empathy-away.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ id="svg4908"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ sodipodi:docbase="/home/andreas/project/gossip/16x16"
+ sodipodi:docname="status-away.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/gossip/16x16/status-away.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs4910">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5917">
+ <stop
+ style="stop-color:#f80000;stop-opacity:1"
+ offset="0"
+ id="stop5919" />
+ <stop
+ style="stop-color:#e70000;stop-opacity:1"
+ offset="1"
+ id="stop5921" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5917"
+ id="linearGradient5923"
+ x1="6.5096536"
+ y1="8.5893564"
+ x2="9.9108915"
+ y2="11.540099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.9925682,6.043956e-8,1.1147803e-2)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.627417"
+ inkscape:cx="13.206814"
+ inkscape:cy="4.0564985"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1674"
+ inkscape:window-height="969"
+ inkscape:window-x="0"
+ inkscape:window-y="26" />
+ <metadata
+ id="metadata4913">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:url(#linearGradient5923);fill-opacity:1;fill-rule:evenodd;stroke:#8a0000;stroke-width:0.99999988px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="M 1.5,13.5 L 14.499999,13.5 L 7.9789933,1.4999999 L 1.5,13.5 z "
+ id="path4944"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.3;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.00000012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 3.2186016,12.488535 L 12.832121,12.488535 L 8.0098272,3.5671249 L 3.2186016,12.488535 z "
+ id="path4946"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/trunk/data/icons/hicolor_status_scalable_empathy-busy.svg b/trunk/data/icons/hicolor_status_scalable_empathy-busy.svg
new file mode 100644
index 000000000..66fc70945
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_scalable_empathy-busy.svg
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ id="svg6941"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ sodipodi:docbase="/home/andreas/project/gossip/16x16"
+ sodipodi:docname="status-busy.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/gossip/16x16/status-busy.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs6943">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5899">
+ <stop
+ style="stop-color:#fce94f;stop-opacity:1"
+ offset="0"
+ id="stop5901" />
+ <stop
+ style="stop-color:#edd400;stop-opacity:1"
+ offset="1"
+ id="stop5903" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5899"
+ id="radialGradient5905"
+ cx="9.466115"
+ cy="8.9839392"
+ fx="9.466115"
+ fy="8.9839392"
+ r="6.7474474"
+ gradientTransform="matrix(1.1671849,-3.2679277e-3,2.7524467e-3,1.0150183,-1.6222549,-0.2024225)"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.696217"
+ inkscape:cx="17.665904"
+ inkscape:cy="9.7718474"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1674"
+ inkscape:window-height="969"
+ inkscape:window-x="0"
+ inkscape:window-y="26" />
+ <metadata
+ id="metadata6946">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#radialGradient5905);fill-opacity:1;stroke:#8d7300;stroke-width:0.97113222;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4926"
+ sodipodi:cx="7.9737625"
+ sodipodi:cy="7.7221532"
+ sodipodi:rx="6.2618814"
+ sodipodi:ry="6.3632426"
+ d="M 14.235644 7.7221532 A 6.2618814 6.3632426 0 1 1 1.7118812,7.7221532 A 6.2618814 6.3632426 0 1 1 14.235644 7.7221532 z"
+ transform="matrix(1.0380267,0,0,1.0214918,-0.2769782,0.1118841)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.6;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.14770162;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5897"
+ sodipodi:cx="7.9737625"
+ sodipodi:cy="7.7221532"
+ sodipodi:rx="6.2618814"
+ sodipodi:ry="6.3632426"
+ d="M 14.235644 7.7221532 A 6.2618814 6.3632426 0 1 1 1.7118812,7.7221532 A 6.2618814 6.3632426 0 1 1 14.235644 7.7221532 z"
+ transform="matrix(0.8783303,0,0,0.8643392,0.996403,1.3254404)" />
+ <rect
+ style="opacity:1;fill:#eeeeec;fill-opacity:1;stroke:#888a85;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5886"
+ width="9.000001"
+ height="9"
+ x="5.5"
+ y="5.5"
+ rx="0"
+ ry="0" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5969"
+ width="7"
+ height="7"
+ x="6.5"
+ y="6.5"
+ rx="0"
+ ry="0" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:#8d7300;fill-opacity:1;stroke:none;stroke-width:1.46393549;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5888"
+ sodipodi:cx="10.676733"
+ sodipodi:cy="7.8460393"
+ sodipodi:rx="1.4415842"
+ sodipodi:ry="1.4866337"
+ d="M 12.118317 7.8460393 A 1.4415842 1.4866337 0 1 1 9.2351488,7.8460393 A 1.4415842 1.4866337 0 1 1 12.118317 7.8460393 z"
+ transform="matrix(0.6936814,0,0,0.6726606,2.5937487,2.7222784)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#888a85;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 7.4772272,10.5 L 11.522773,10.5"
+ id="path5883" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#888a85;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 7.4872926,12.5 L 11.524094,12.5"
+ id="path5885" />
+ </g>
+</svg>
diff --git a/trunk/data/icons/hicolor_status_scalable_empathy-extended-away.svg b/trunk/data/icons/hicolor_status_scalable_empathy-extended-away.svg
new file mode 100644
index 000000000..3104dff54
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_scalable_empathy-extended-away.svg
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ id="svg4908"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docbase="/home/martyn/Desktop/16x16"
+ sodipodi:docname="status-away-extended.svg"
+ inkscape:export-filename="/home/martyn/Desktop/16x16/status-away-extended.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4910">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5917">
+ <stop
+ style="stop-color:#d80000;stop-opacity:1"
+ offset="0"
+ id="stop5919" />
+ <stop
+ style="stop-color:#ca0000;stop-opacity:1"
+ offset="1"
+ id="stop5921" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5917"
+ id="linearGradient5923"
+ x1="6.5096536"
+ y1="8.5893564"
+ x2="9.9108915"
+ y2="11.540099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1538462,0,0,1.0752822,-1.2307693,-0.1129232)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="42.866662"
+ inkscape:cx="8.0000008"
+ inkscape:cy="7.4533429"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1323"
+ inkscape:window-height="987"
+ inkscape:window-x="0"
+ inkscape:window-y="26" />
+ <metadata
+ id="metadata4913">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:url(#linearGradient5923);fill-opacity:1;fill-rule:evenodd;stroke:#8a0000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+ d="M 0.5,14.5 L 15.5,14.5 L 7.975762,1.5 L 0.5,14.5 z "
+ id="path4944"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="opacity:0.3;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 2.2790289,13.5 L 13.779497,13.5 L 8.0106803,3.5000001 L 2.2790289,13.5 z "
+ id="path4946"
+ sodipodi:nodetypes="cccc" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:#ffe680;fill-opacity:1;stroke:#555753;stroke-width:0.8123197;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4911"
+ sodipodi:cx="11.09375"
+ sodipodi:cy="11.890625"
+ sodipodi:rx="4.53125"
+ sodipodi:ry="3.640625"
+ d="M 15.625 11.890625 A 4.53125 3.640625 0 1 1 6.5625,11.890625 A 4.53125 3.640625 0 1 1 15.625 11.890625 z"
+ transform="matrix(0.983072,0,0,1.223563,-1.005946,-3.448939)" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:white;stroke-width:1.01539958;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5882"
+ sodipodi:cx="11.09375"
+ sodipodi:cy="11.890625"
+ sodipodi:rx="4.53125"
+ sodipodi:ry="3.640625"
+ d="M 15.625 11.890625 A 4.53125 3.640625 0 1 1 6.5625,11.890625 A 4.53125 3.640625 0 1 1 15.625 11.890625 z"
+ transform="matrix(0.786458,0,0,0.978852,1.175241,-0.539149)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:0.91149789px;stroke-linecap:round;stroke-linejoin:round;marker-mid:none;stroke-opacity:1"
+ d="M 10.027723,8.0394381 L 10.027723,11.229682 L 6.8944493,11.229682"
+ id="path5884" />
+ <path
+ style="opacity:0.33695655;fill:white;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 5.8909083,11.545458 C 9.3617367,11.656825 9.9649551,9.8471677 13.714194,9.8750085 C 13.073853,8.0931929 11.598288,7.100202 9.8999937,7.0909217 C 8.1738593,7.0816413 5.9187492,8.9469795 5.8909083,11.545458 z "
+ id="path5886"
+ sodipodi:nodetypes="cczc" />
+ </g>
+</svg>
diff --git a/trunk/data/icons/hicolor_status_scalable_empathy-offline.svg b/trunk/data/icons/hicolor_status_scalable_empathy-offline.svg
new file mode 100644
index 000000000..975f7dc8f
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_scalable_empathy-offline.svg
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16px"
+ height="16px"
+ id="svg6941"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ sodipodi:docbase="/home/andreas/project/gossip/16x16"
+ sodipodi:docname="status-offline.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/gossip/16x16/status-offline.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="true">
+ <defs
+ id="defs6943">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7922">
+ <stop
+ style="stop-color:#e8e8e6;stop-opacity:1"
+ offset="0"
+ id="stop7924" />
+ <stop
+ style="stop-color:#babdb6;stop-opacity:1"
+ offset="1"
+ id="stop7926" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7922"
+ id="linearGradient7928"
+ x1="0.67574239"
+ y1="0.81831664"
+ x2="9.8658419"
+ y2="10.594059"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8666667,0,0,0.8666667,1.0666667,1.0666666)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="22.197802"
+ inkscape:cx="15.038145"
+ inkscape:cy="7.8865336"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1674"
+ inkscape:window-height="969"
+ inkscape:window-x="0"
+ inkscape:window-y="26" />
+ <metadata
+ id="metadata6946">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <rect
+ style="opacity:1;fill:url(#linearGradient7928);fill-opacity:1;stroke:#555753;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6949"
+ width="13"
+ height="13"
+ x="1.5"
+ y="1.4999999"
+ rx="1.4641089"
+ ry="1.4641089" />
+ <rect
+ style="opacity:0.4;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect7920"
+ width="11"
+ height="11"
+ x="2.5"
+ y="2.5"
+ rx="0.45049509"
+ ry="0.45049506" />
+ </g>
+</svg>
diff --git a/trunk/data/icons/hicolor_status_scalable_empathy-pending.svg b/trunk/data/icons/hicolor_status_scalable_empathy-pending.svg
new file mode 100644
index 000000000..89c626c85
--- /dev/null
+++ b/trunk/data/icons/hicolor_status_scalable_empathy-pending.svg
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg4908"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/andreas/project/misc icons/22x22"
+ sodipodi:docname="status-pending.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/andreas/project/misc icons/22x22/status-pending.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"
+ sodipodi:modified="TRUE">
+ <defs
+ id="defs4910">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient5898">
+ <stop
+ style="stop-color:#555753;stop-opacity:1;"
+ offset="0"
+ id="stop5900" />
+ <stop
+ style="stop-color:#3b3c39;stop-opacity:1"
+ offset="1"
+ id="stop5902" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5898"
+ id="linearGradient5904"
+ x1="13.756032"
+ y1="6.1055899"
+ x2="11.815526"
+ y2="10.317804"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="13.74062"
+ inkscape:cy="11.30699"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="1680"
+ inkscape:window-height="973"
+ inkscape:window-x="0"
+ inkscape:window-y="26" />
+ <metadata
+ id="metadata4913">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ transform="scale(1.0248552,0.9757476)"
+ style="font-size:26.23629379px;font-style:normal;font-weight:normal;fill:url(#linearGradient5904);fill-opacity:1.0;stroke:#2e3436;stroke-width:1.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+ d="M 11.275218,14.919035 L 7.3476583,14.919035 L 7.3476583,13.925219 C 7.3476538,13.224909 7.4885713,12.605727 7.7704111,12.067669 C 8.0522411,11.521089 8.3408215,10.829313 9.246116,9.9923373 L 10.066,9.2493173 C 10.552798,8.8052256 10.907227,8.3867434 11.129288,7.9938696 C 11.359871,7.6010219 11.475167,7.2081611 11.475176,6.8152861 C 11.475167,6.2174687 11.270196,5.7520141 10.860263,5.4189209 C 10.450313,5.0773184 9.8781028,4.9065094 9.1436305,4.9064933 C 8.4518474,4.9065094 7.7045578,5.0516971 6.9017597,5.3420567 C 6.0989529,5.6239073 5.2619887,6.0466597 4.3908644,6.6103151 L 4.3908644,2.5877583 C 5.4242572,2.2290778 6.3679772,1.9643238 7.222027,1.7934955 C 8.0760675,1.6227057 8.9002211,1.5373012 9.6944902,1.5372817 C 11.778353,1.5373012 13.366877,1.9643238 14.460067,2.8183508 C 15.553233,3.6638737 16.099822,4.9022392 16.099835,6.5334509 C 16.099822,7.3704297 15.933283,8.1219894 15.600218,8.7881324 C 15.267128,9.4457594 14.699188,10.154617 13.896397,10.914707 L 13.076512,11.644916 C 12.495751,12.174434 11.723583,12.601456 11.544243,12.925985 C 11.364884,13.24199 11.275209,13.592149 11.275218,13.976462 L 11.275218,14.919035 M 7.3040896,16.952301 L 11.275218,16.952301 L 11.275218,21.009531 L 7.3040896,21.009531 L 7.3040896,16.952301"
+ id="text4916"
+ sodipodi:nodetypes="cccsccsssssccsssssccsccccccc" />
+ <path
+ style="font-size:26.23629379px;font-style:normal;font-weight:normal;fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1.00000024px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans;opacity:0.3"
+ d="M 10.531174,13.500001 L 8.5164063,13.500001 C 8.5164063,12.945747 8.7402784,12.078404 9.502579,11.143944 C 10.535614,9.6270452 12.892911,8.6362695 12.800574,6.4913892 C 12.708237,4.3018572 10.841095,3.7491649 9.4251268,3.7085782 C 8.0538104,3.6679915 6.7663299,4.0790254 5.5,4.8038685 L 5.5,3.3107849 C 6.3825651,3.0144106 7.1885459,2.7956469 7.9179435,2.6544931 C 8.6473335,2.5133711 9.3511984,2.4428023 10.029541,2.4427861 C 13.078781,2.3815955 15.397539,3.3494535 15.500001,6.5710727 C 15.213972,9.3832031 12.116268,10.497789 10.531174,12.721162 L 10.531174,13.500001"
+ id="path4925"
+ sodipodi:nodetypes="ccczzccscccc" />
+ <rect
+ style="opacity:0.3;fill:none;fill-opacity:1;stroke:#eeeeec;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5896"
+ width="1.9715405"
+ height="1.9651624"
+ x="8.5284595"
+ y="17.534838" />
+ </g>
+</svg>
diff --git a/trunk/data/icq.profile b/trunk/data/icq.profile
new file mode 100644
index 000000000..0f4622e75
--- /dev/null
+++ b/trunk/data/icq.profile
@@ -0,0 +1,11 @@
+[Profile]
+Manager=haze
+Protocol=icq
+IconName = im-icq
+DisplayName=ICQ
+ConfigurationUI = icq
+Capabilities = chat-p2p, supports-alias, supports-avatars, supports-roster
+VCardDefault = 1
+VCardField = X-ICQ
+SupportedPresences = away,hidden,do-not-disturb
+
diff --git a/trunk/data/irc.profile b/trunk/data/irc.profile
new file mode 100644
index 000000000..05bf5ed5a
--- /dev/null
+++ b/trunk/data/irc.profile
@@ -0,0 +1,9 @@
+[Profile]
+Manager = idle
+Protocol = irc
+DisplayName = IRC
+IconName = im-irc
+ConfigurationUI = irc
+VCardField = X-IRC
+Capabilities = chat-p2p, chat-room, chat-room-list
+SupportedPresences = away
diff --git a/trunk/data/jabber.profile b/trunk/data/jabber.profile
new file mode 100644
index 000000000..c3cb57aff
--- /dev/null
+++ b/trunk/data/jabber.profile
@@ -0,0 +1,12 @@
+[Profile]
+Manager = gabble
+Protocol = jabber
+DisplayName = Jabber
+IconName = im-xmpp
+ConfigurationUI = jabber
+VCardDefault = 1
+VCardField = X-JABBER
+Capabilities = chat-p2p, chat-room, chat-room-list, voice-p2p, contact-search, split-account, registration-ui, supports-avatars, supports-alias, supports-roster
+DefaultAccountDomain = jabber.org
+Default-fallback-conference-server = conference.jabber.org
+SupportedPresences = away,extended-away,hidden,do-not-disturb
diff --git a/trunk/data/msn-haze.profile b/trunk/data/msn-haze.profile
new file mode 100644
index 000000000..840dd2c42
--- /dev/null
+++ b/trunk/data/msn-haze.profile
@@ -0,0 +1,12 @@
+[Profile]
+Manager=haze
+Protocol=msn
+DisplayName=MSN (Haze)
+IconName = im-msn
+ConfigurationUI = haze
+SupportsInvisible = 0
+Capabilities = chat-p2p, supports-alias, supports-avatars, supports-roster
+VCardDefault = 1
+VCardField = X-MSN
+SupportedPresences = away,hidden,do-not-disturb
+
diff --git a/trunk/data/msn.profile b/trunk/data/msn.profile
new file mode 100644
index 000000000..7ebd78118
--- /dev/null
+++ b/trunk/data/msn.profile
@@ -0,0 +1,12 @@
+[Profile]
+Manager=butterfly
+Protocol=msn
+DisplayName=MSN
+IconName = im-msn
+ConfigurationUI = msn
+SupportsInvisible = 1
+Capabilities = chat-p2p, split-account, supports-avatars, supports-alias
+VCardDefault = 1
+VCardField = X-MSN
+SupportedPresences = offline,available,away,extended-away,hidden,do-not-disturb
+
diff --git a/trunk/data/salut.profile b/trunk/data/salut.profile
new file mode 100644
index 000000000..acd483ccc
--- /dev/null
+++ b/trunk/data/salut.profile
@@ -0,0 +1,9 @@
+[Profile]
+Manager = salut
+Protocol = local-xmpp
+DisplayName = Salut
+IconName = im-local-xmpp
+ConfigurationUI = local-xmpp
+VCardField = X-LOCAL-XMPP
+Capabilities = chat-p2p, contact-search, supports-alias, supports-roster
+SupportedPresences = away,extended-away,hidden,do-not-disturb
diff --git a/trunk/data/sipphone.profile b/trunk/data/sipphone.profile
new file mode 100644
index 000000000..4904a7481
--- /dev/null
+++ b/trunk/data/sipphone.profile
@@ -0,0 +1,16 @@
+[Profile]
+Manager = sofiasip
+Protocol = sip
+DisplayName = Sipphone.com (SIP)
+IconName = im-sip
+ConfigurationUI = sofiasip
+VCardDefault = 1
+VCardField = X-SIP
+Capabilities = voice-p2p, split-account, video-p2p
+DefaultAccountDomain = proxy01.sipphone.com
+Default-priority = 1
+Default-stun-server = stun01.sipphone.com
+Default-proxy = 198.65.166.131
+Default-discover-stun = false
+Default-transport = udp
+
diff --git a/trunk/data/sofiasip.profile b/trunk/data/sofiasip.profile
new file mode 100644
index 000000000..e49f9a09d
--- /dev/null
+++ b/trunk/data/sofiasip.profile
@@ -0,0 +1,10 @@
+[Profile]
+Manager = sofiasip
+Protocol = sip
+DisplayName = SIP
+IconName = im-sip
+ConfigurationUI = sofiasip
+VCardDefault = 1
+VCardField = X-SIP
+Capabilities = chat-p2p, voice-p2p, split-account
+
diff --git a/trunk/data/yahoo.profile b/trunk/data/yahoo.profile
new file mode 100644
index 000000000..f4173d1af
--- /dev/null
+++ b/trunk/data/yahoo.profile
@@ -0,0 +1,11 @@
+[Profile]
+Manager=haze
+Protocol=yahoo
+DisplayName=Yahoo
+IconName = im-yahoo
+ConfigurationUI = yahoo
+Capabilities = chat-p2p, supports-alias, supports-avatars, supports-roster
+VCardDefault = 1
+VCardField = X-YAHOO
+SupportedPresences = away,hidden,do-not-disturb
+
diff --git a/trunk/docs/.gitignore b/trunk/docs/.gitignore
new file mode 100644
index 000000000..a7316fb11
--- /dev/null
+++ b/trunk/docs/.gitignore
@@ -0,0 +1,8 @@
+html
+xml
+tmpl
+*.txt
+*.stamp
+
+version.xml
+
diff --git a/trunk/docs/Makefile.am b/trunk/docs/Makefile.am
new file mode 100644
index 000000000..2053a4567
--- /dev/null
+++ b/trunk/docs/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = libempathy libempathy-gtk
+
diff --git a/trunk/docs/libempathy-gtk/.gitignore b/trunk/docs/libempathy-gtk/.gitignore
new file mode 100644
index 000000000..51f581636
--- /dev/null
+++ b/trunk/docs/libempathy-gtk/.gitignore
@@ -0,0 +1,6 @@
+libempathy-gtk.args
+libempathy-gtk.hierarchy
+libempathy-gtk.interfaces
+libempathy-gtk.prerequisites
+libempathy-gtk.signals
+
diff --git a/trunk/docs/libempathy-gtk/Makefile.am b/trunk/docs/libempathy-gtk/Makefile.am
new file mode 100644
index 000000000..1a666bafb
--- /dev/null
+++ b/trunk/docs/libempathy-gtk/Makefile.am
@@ -0,0 +1,59 @@
+NULL =
+
+AUTOMAKE_OPTIONS = 1.6
+
+# The name of the module.
+DOC_MODULE=libempathy-gtk
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE=libempathy-gtk-docs.sgml
+
+# Extra options to supply to gtkdoc-scan
+SCAN_OPTIONS=--deprecated-guards="G_DISABLE_DEPRECATED"
+
+# The directory containing the source code. Relative to $(srcdir)
+DOC_SOURCE_DIR=$(top_srcdir)/libempathy-gtk
+
+HFILE_GLOB=$(top_srcdir)/libempathy-gtk/*.h
+CFILE_GLOB=$(top_srcdir)/libempathy-gtk/*.c
+
+# Headers to ignore
+IGNORE_HFILES= \
+ empathy-gtk-enum-types.h \
+ stamp-empathy-gtk-enum-types.h \
+ ephy-spinner.h \
+ totem-subtitle-encoding.h \
+ $(NULL)
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+GTKDOC_CFLAGS = \
+ -I$(srcdir) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libempathy-gtk \
+ -I$(top_builddir) \
+ -I$(top_builddir)/libempathy-gtk \
+ $(EMPATHY_CFLAGS) \
+ $(NULL)
+
+GTKDOC_LIBS = \
+ $(top_builddir)/libempathy-gtk/libempathy-gtk.la \
+ $(top_builddir)/libempathy/libempathy.la \
+ $(EMPATHY_LIBS) \
+ $(NULL)
+
+# Extra options to supply to gtkdoc-mkdb
+MKDB_OPTIONS = --output-format=xml --sgml-mode
+
+# Images to copy into HTML directory
+HTML_IMAGES =
+
+content_files = \
+ version.xml
+
+extra_files = version.xml.in
+
+include $(top_srcdir)/gtk-doc.make
+
+EXTRA_DIST += \
+ version.xml.in
diff --git a/trunk/docs/libempathy-gtk/libempathy-gtk-docs.sgml b/trunk/docs/libempathy-gtk/libempathy-gtk-docs.sgml
new file mode 100644
index 000000000..6256b3e92
--- /dev/null
+++ b/trunk/docs/libempathy-gtk/libempathy-gtk-docs.sgml
@@ -0,0 +1,59 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY version SYSTEM "version.xml">
+]>
+<book lang="en" id="libempathy-gtk" xmlns:xi="http://www.w3.org/2003/XInclude">
+<title>libempathy-gtk Reference Manual</title>
+ <bookinfo>
+ <title>libempathy-gtk Reference Manual</title>
+ <releaseinfo>for libempathy-gtk &version;</releaseinfo>
+ </bookinfo>
+ <part>
+ <title>libempathy-gtk Overview</title>
+ </part>
+ <part>
+ <title>API Reference</title>
+ <chapter id="libempathy_api">
+ <title>libempathy-gtk API reference</title>
+ <xi:include href="xml/empathy-account-chooser.xml"/>
+ <xi:include href="xml/empathy-accounts-dialog.xml"/>
+ <xi:include href="xml/empathy-account-widget.xml"/>
+ <xi:include href="xml/empathy-account-widget-irc.xml"/>
+ <xi:include href="xml/empathy-avatar-chooser.xml"/>
+ <xi:include href="xml/empathy-avatar-image.xml"/>
+ <xi:include href="xml/empathy-cell-renderer-activatable.xml"/>
+ <xi:include href="xml/empathy-cell-renderer-expander.xml"/>
+ <xi:include href="xml/empathy-cell-renderer-text.xml"/>
+ <xi:include href="xml/empathy-chat.xml"/>
+ <xi:include href="xml/empathy-chat-view.xml"/>
+ <xi:include href="xml/empathy-conf.xml"/>
+ <xi:include href="xml/empathy-contact-dialogs.xml"/>
+ <xi:include href="xml/empathy-contact-list-store.xml"/>
+ <xi:include href="xml/empathy-contact-list-view.xml"/>
+ <xi:include href="xml/empathy-contact-menu.xml"/>
+ <xi:include href="xml/empathy-contact-widget.xml"/>
+ <xi:include href="xml/empathy-geometry.xml"/>
+ <xi:include href="xml/empathy-images.xml"/>
+ <xi:include href="xml/empathy-irc-network-dialog.xml"/>
+ <xi:include href="xml/empathy-log-window.xml"/>
+ <xi:include href="xml/empathy-new-message-dialog.xml"/>
+ <xi:include href="xml/empathy-presence-chooser.xml"/>
+ <xi:include href="xml/empathy-profile-chooser.xml"/>
+ <xi:include href="xml/empathy-smiley-manager.xml"/>
+ <xi:include href="xml/empathy-spell-dialog.xml"/>
+ <xi:include href="xml/empathy-spell.xml"/>
+ <xi:include href="xml/empathy-theme-manager.xml"/>
+ <xi:include href="xml/empathy-ui-utils.xml"/>
+ </chapter>
+ </part>
+
+ <chapter id="libempathy-gtk-hierarchy">
+ <title>Object Hierarchy</title>
+ <xi:include href="xml/tree_index.sgml"/>
+ </chapter>
+
+ <index>
+ <title id="index-all">Index</title>
+ </index>
+</book>
diff --git a/trunk/docs/libempathy-gtk/libempathy-gtk.types b/trunk/docs/libempathy-gtk/libempathy-gtk.types
new file mode 100644
index 000000000..37e035551
--- /dev/null
+++ b/trunk/docs/libempathy-gtk/libempathy-gtk.types
@@ -0,0 +1,20 @@
+empathy_account_chooser_get_type
+empathy_avatar_chooser_get_type
+empathy_avatar_image_get_type
+empathy_cell_renderer_activatable_get_type
+empathy_cell_renderer_expander_get_type
+empathy_cell_renderer_text_get_type
+empathy_chat_get_type
+empathy_chat_view_get_type
+empathy_contact_list_store_get_type
+empathy_contact_list_view_get_type
+empathy_contact_widget_flags_get_type
+empathy_contact_list_store_sort_get_type
+empathy_contact_list_store_col_get_type
+empathy_presence_chooser_get_type
+empathy_smiley_manager_get_type
+empathy_theme_boxes_get_type
+empathy_theme_get_type
+empathy_theme_irc_get_type
+empathy_theme_manager_get_type
+
diff --git a/trunk/docs/libempathy-gtk/version.xml.in b/trunk/docs/libempathy-gtk/version.xml.in
new file mode 100644
index 000000000..d78bda934
--- /dev/null
+++ b/trunk/docs/libempathy-gtk/version.xml.in
@@ -0,0 +1 @@
+@VERSION@
diff --git a/trunk/docs/libempathy/.gitignore b/trunk/docs/libempathy/.gitignore
new file mode 100644
index 000000000..0a5b4cabb
--- /dev/null
+++ b/trunk/docs/libempathy/.gitignore
@@ -0,0 +1,6 @@
+libempathy.args
+libempathy.hierarchy
+libempathy.interfaces
+libempathy.prerequisites
+libempathy.signals
+
diff --git a/trunk/docs/libempathy/Makefile.am b/trunk/docs/libempathy/Makefile.am
new file mode 100644
index 000000000..7cf0108c2
--- /dev/null
+++ b/trunk/docs/libempathy/Makefile.am
@@ -0,0 +1,60 @@
+NULL =
+
+AUTOMAKE_OPTIONS = 1.6
+
+# The name of the module.
+DOC_MODULE=libempathy
+
+# The top-level SGML file.
+DOC_MAIN_SGML_FILE=libempathy-docs.sgml
+
+# Extra options to supply to gtkdoc-scan
+SCAN_OPTIONS=--deprecated-guards="G_DISABLE_DEPRECATED"
+
+# The directory containing the source code. Relative to $(srcdir)
+DOC_SOURCE_DIR=$(top_srcdir)/libempathy
+
+HFILE_GLOB=$(top_srcdir)/libempathy/*.h
+CFILE_GLOB=$(top_srcdir)/libempathy/*.c
+
+# Headers to ignore
+IGNORE_HFILES= \
+ empathy-filter-glue.h \
+ empathy-debug.h \
+ empathy-marshal.h \
+ tp-stream-engine-gen.h \
+ stamp-empathy-enum-types.h \
+ empathy-chandler-glue.h \
+ $(NULL)
+
+# CFLAGS and LDFLAGS for compiling scan program. Only needed
+# if $(DOC_MODULE).types is non-empty.
+GTKDOC_CFLAGS = \
+ -I$(srcdir) \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/libempathy \
+ -I$(top_builddir) \
+ -I$(top_builddir)/libempathy \
+ $(LIBEMPATHY_CFLAGS) \
+ $(NULL)
+
+GTKDOC_LIBS = \
+ $(top_builddir)/libempathy/libempathy.la \
+ $(LIBEMPATHY_LIBS) \
+ $(NULL)
+
+# Extra options to supply to gtkdoc-mkdb
+MKDB_OPTIONS = --output-format=xml --sgml-mode
+
+# Images to copy into HTML directory
+HTML_IMAGES =
+
+content_files = \
+ version.xml
+
+extra_files = version.xml.in
+
+include $(top_srcdir)/gtk-doc.make
+
+EXTRA_DIST += \
+ version.xml.in
diff --git a/trunk/docs/libempathy/libempathy-docs.sgml b/trunk/docs/libempathy/libempathy-docs.sgml
new file mode 100644
index 000000000..6e040b0cb
--- /dev/null
+++ b/trunk/docs/libempathy/libempathy-docs.sgml
@@ -0,0 +1,57 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY version SYSTEM "version.xml">
+]>
+<book lang="en" id="libempathy" xmlns:xi="http://www.w3.org/2003/XInclude">
+<title>libempathy Reference Manual</title>
+ <bookinfo>
+ <title>libempathy Reference Manual</title>
+ <releaseinfo>for libempathy &version;</releaseinfo>
+ </bookinfo>
+ <part>
+ <title>libempathy Overview</title>
+ </part>
+ <part>
+ <title>API Reference</title>
+ <chapter id="libempathy_api">
+ <title>libempathy API reference</title>
+ <xi:include href="xml/empathy-avatar.xml"/>
+ <xi:include href="xml/empathy-chatroom-manager.xml"/>
+ <xi:include href="xml/empathy-chatroom.xml"/>
+ <xi:include href="xml/empathy-contact-factory.xml"/>
+ <xi:include href="xml/empathy-contact-groups.xml"/>
+ <xi:include href="xml/empathy-contact-list.xml"/>
+ <xi:include href="xml/empathy-contact-manager.xml"/>
+ <xi:include href="xml/empathy-contact.xml"/>
+ <xi:include href="xml/empathy-dispatcher.xml"/>
+ <xi:include href="xml/empathy-enum-types.xml"/>
+ <xi:include href="xml/empathy-idle.xml"/>
+ <xi:include href="xml/empathy-irc-server.xml"/>
+ <xi:include href="xml/empathy-irc-network.xml"/>
+ <xi:include href="xml/empathy-irc-network-manager.xml"/>
+ <xi:include href="xml/empathy-log-manager.xml"/>
+ <xi:include href="xml/empathy-message.xml"/>
+ <xi:include href="xml/empathy-status-presets.xml"/>
+ <xi:include href="xml/empathy-time.xml"/>
+ <xi:include href="xml/empathy-tp-call.xml"/>
+ <xi:include href="xml/empathy-tp-chat.xml"/>
+ <xi:include href="xml/empathy-tp-contact-factory.xml"/>
+ <xi:include href="xml/empathy-tp-contact-list.xml"/>
+ <xi:include href="xml/empathy-tp-group.xml"/>
+ <xi:include href="xml/empathy-tp-roomlist.xml"/>
+ <xi:include href="xml/empathy-tp-tube.xml"/>
+ <xi:include href="xml/empathy-tube-handler.xml"/>
+ <xi:include href="xml/empathy-utils.xml"/>
+ </chapter>
+ </part>
+
+ <chapter id="libempathy-hierarchy">
+ <title>Object Hierarchy</title>
+ <xi:include href="xml/tree_index.sgml"/>
+ </chapter>
+
+ <index>
+ <title id="index-all">Index</title>
+ </index>
+</book>
diff --git a/trunk/docs/libempathy/libempathy.types b/trunk/docs/libempathy/libempathy.types
new file mode 100644
index 000000000..dead1e5c4
--- /dev/null
+++ b/trunk/docs/libempathy/libempathy.types
@@ -0,0 +1,21 @@
+empathy_contact_list_get_type
+empathy_contact_manager_get_type
+empathy_reg_ex_type_get_type
+empathy_capabilities_get_type
+empathy_idle_get_type
+empathy_log_manager_get_type
+empathy_message_get_type
+empathy_tp_call_status_get_type
+empathy_tp_call_get_type
+empathy_tp_chat_get_type
+empathy_tp_contact_factory_get_type
+empathy_tp_contact_list_get_type
+empathy_tp_group_get_type
+empathy_tp_roomlist_get_type
+empathy_tp_tube_get_type
+empathy_tube_handler_get_type
+empathy_irc_server_get_type
+empathy_irc_network_get_type
+empathy_irc_network_manager_get_type
+empathy_dispatcher_get_type
+
diff --git a/trunk/docs/libempathy/version.xml.in b/trunk/docs/libempathy/version.xml.in
new file mode 100644
index 000000000..d78bda934
--- /dev/null
+++ b/trunk/docs/libempathy/version.xml.in
@@ -0,0 +1 @@
+@VERSION@
diff --git a/trunk/extensions/.gitignore b/trunk/extensions/.gitignore
new file mode 100644
index 000000000..09d7dbf50
--- /dev/null
+++ b/trunk/extensions/.gitignore
@@ -0,0 +1,2 @@
+_gen
+extensions.html
diff --git a/trunk/extensions/Channel_Handler.xml b/trunk/extensions/Channel_Handler.xml
new file mode 100644
index 000000000..80233e97d
--- /dev/null
+++ b/trunk/extensions/Channel_Handler.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" ?>
+<node name="/Channel_Handler" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <tp:copyright>Copyright (C) 2007 Collabora Limited</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
+Library 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.ChannelHandler">
+
+ <method name="HandleChannel">
+ <arg direction="in" type="s" name="Bus_Name" tp:type="DBus_Bus_Name">
+ <tp:docstring>
+ The bus name of the connection and channel
+ </tp:docstring>
+ </arg>
+ <arg direction="in" type="o" name="Connection">
+ <tp:docstring>
+ The object-path of the connection that owns the channel
+ </tp:docstring>
+ </arg>
+ <arg direction="in" type="s" tp:type="DBus_Interface" name="Channel_Type">
+ <tp:docstring>
+ The channel type
+ </tp:docstring>
+ </arg>
+ <arg direction="in" type="o" name="Channel">
+ <tp:docstring>
+ The object-path of the channel
+ </tp:docstring>
+ </arg>
+ <arg direction="in" type="u" tp:type="Handle_Type" name="Handle_Type">
+ <tp:docstring>The type of the handle that the channel communicates
+ with, or 0 if there is no associated handle</tp:docstring>
+ </arg>
+ <arg direction="in" type="u" tp:type="Handle" name="Handle">
+ <tp:docstring>The handle that the channel communicates with,
+ or 0 if there is no associated handle</tp:docstring>
+ </arg>
+ <tp:docstring>
+ Called when a channel handler should handle a new channel.
+ </tp:docstring>
+ <!-- FIXME: possible errors? -->
+ </method>
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ <p>An interface exported by client applications which are able to
+ handle incoming channels.</p>
+ </tp:docstring>
+ </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
+
diff --git a/trunk/extensions/Makefile.am b/trunk/extensions/Makefile.am
new file mode 100644
index 000000000..72ae28aec
--- /dev/null
+++ b/trunk/extensions/Makefile.am
@@ -0,0 +1,137 @@
+tools_dir = $(top_srcdir)/tools
+
+AM_CFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ $(WARN_CFLAGS) \
+ $(LIBEMPATHY_CFLAGS)
+
+EXTRA_DIST = \
+ all.xml \
+ misc.xml \
+ Channel_Handler.xml \
+ Stream_Engine.xml \
+ Tube_Handler.xml
+
+noinst_LTLIBRARIES = libemp-extensions.la
+
+libemp_extensions_la_LIBADD = \
+ $(TP_GLIB_LIBS)
+
+# The client-specific parts are built into a separate .o file, so the linker
+# can discard them when linking services. The service-specific parts are
+# in svc-*.c, so we don't need an extensions-svc.c.
+libemp_extensions_la_SOURCES = \
+ extensions.c \
+ extensions-cli.c \
+ extensions.h
+
+nodist_libemp_extensions_la_SOURCES = \
+ _gen/signals-marshal.c \
+ _gen/signals-marshal.h \
+ _gen/signals-marshal.list \
+ _gen/register-dbus-glib-marshallers-body.h \
+ _gen/enums.h \
+ _gen/gtypes.h \
+ _gen/gtypes-body.h \
+ _gen/interfaces.h \
+ _gen/interfaces-body.h \
+ _gen/cli-misc.h \
+ _gen/cli-misc-body.h \
+ _gen/svc-misc.h \
+ _gen/svc-misc.c
+
+BUILT_SOURCES = \
+ _gen/all.xml \
+ _gen/misc.xml \
+ $(nodist_libemp_extensions_la_SOURCES) \
+ extensions.html
+
+CLEANFILES = $(BUILT_SOURCES)
+
+XSLTPROCFLAGS = --nonet --novalid
+
+# Generated files which can be generated for all categories simultaneously
+
+_gen/all.xml: all.xml $(wildcard *.xml)
+ $(mkdir_p) _gen
+ $(XSLTPROC) $(XSLTPROCFLAGS) --xinclude $(tools_dir)/identity.xsl \
+ $< > $@
+
+extensions.html: _gen/all.xml $(tools_dir)/doc-generator.xsl
+ $(XSLTPROC) $(XSLTPROCFLAGS) \
+ $(tools_dir)/doc-generator.xsl \
+ $< > $@
+
+_gen/gtypes.h _gen/gtypes-body.h: _gen/all.xml \
+ $(top_srcdir)/tools/glib-gtypes-generator.py
+ $(PYTHON) $(top_srcdir)/tools/glib-gtypes-generator.py \
+ $< _gen/gtypes Emp
+
+_gen/signals-marshal.list: _gen/all.xml \
+ $(tools_dir)/glib-signals-marshal-gen.py
+ $(PYTHON) $(tools_dir)/glib-signals-marshal-gen.py $< > $@
+
+_gen/signals-marshal.h: _gen/signals-marshal.list Makefile.am
+ $(GLIB_GENMARSHAL) --header --prefix=_emp_ext_marshal $< > $@
+
+_gen/signals-marshal.c: _gen/signals-marshal.list Makefile.am
+ { echo '#include "_gen/signals-marshal.h"' && \
+ $(GLIB_GENMARSHAL) --body --prefix=_emp_ext_marshal $< ; } > $@
+
+_gen/register-dbus-glib-marshallers-body.h: _gen/all.xml \
+ $(tools_dir)/glib-client-marshaller-gen.py
+ $(PYTHON) $(tools_dir)/glib-client-marshaller-gen.py $< \
+ _emp_ext > $@
+
+_gen/enums.h: _gen/all.xml $(tools_dir)/c-constants-generator.xsl
+ $(XSLTPROC) $(XSLTPROCFLAGS) \
+ --stringparam mixed-case-prefix Emp \
+ $(tools_dir)/c-constants-generator.xsl \
+ $< > $@
+
+_gen/interfaces.h: _gen/all.xml \
+ $(tools_dir)/glib-interfaces-generator.xsl \
+ $(tools_dir)/c-interfaces-generator.xsl
+ $(XSLTPROC) $(XSLTPROCFLAGS) \
+ --stringparam mixed-case-prefix Emp \
+ $(tools_dir)/glib-interfaces-generator.xsl \
+ $< > $@
+
+_gen/interfaces-body.h: _gen/all.xml \
+ $(tools_dir)/glib-interfaces-body-generator.xsl \
+ $(tools_dir)/c-interfaces-generator.xsl
+ $(XSLTPROC) $(XSLTPROCFLAGS) \
+ --stringparam mixed-case-prefix Emp \
+ $(tools_dir)/glib-interfaces-body-generator.xsl \
+ $< > $@
+
+# Generated files which must be generated per "category". Each TpProxy
+# subclass you want to use with --subclass will need to have its own category,
+# although you can subdivide further if you want.
+
+_gen/misc.xml: misc.xml $(wildcard *.xml)
+ $(mkdir_p) _gen
+ $(XSLTPROC) $(XSLTPROCFLAGS) --xinclude $(tools_dir)/identity.xsl \
+ $< > $@
+
+_gen/cli-misc-body.h _gen/cli-misc.h: _gen/misc.xml \
+ $(tools_dir)/glib-client-gen.py
+ $(PYTHON) $(tools_dir)/glib-client-gen.py \
+ --group=misc \
+ --subclass=TpProxy \
+ --subclass-assert=TP_IS_PROXY \
+ --iface-quark-prefix=EMP_IFACE_QUARK \
+ --tp-proxy-api=0.7.6 \
+ $< Emp_Cli _gen/cli-misc
+
+_gen/svc-misc.c _gen/svc-misc.h: _gen/misc.xml \
+ $(tools_dir)/glib-ginterface-gen.py
+ $(PYTHON) $(tools_dir)/glib-ginterface-gen.py \
+ --filename=_gen/svc-misc \
+ --signal-marshal-prefix=_emp_ext \
+ --include='<telepathy-glib/dbus.h>' \
+ --include='"_gen/signals-marshal.h"' \
+ --not-implemented-func='tp_dbus_g_method_return_not_implemented' \
+ --allow-unstable \
+ $< Emp_Svc_
diff --git a/trunk/extensions/Stream_Engine.xml b/trunk/extensions/Stream_Engine.xml
new file mode 100644
index 000000000..0303a516d
--- /dev/null
+++ b/trunk/extensions/Stream_Engine.xml
@@ -0,0 +1,44 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node name="/Stream_Engine">
+ <interface name="org.freedesktop.Telepathy.StreamEngine">
+ <method name="SetOutputVolume">
+ <arg direction="in" type="o" name="channel_path" />
+ <arg direction="in" type="u" name="stream_id" />
+ <arg direction="in" type="u" name="volume" />
+ </method>
+ <method name="MuteInput">
+ <arg direction="in" type="o" name="channel_path" />
+ <arg direction="in" type="u" name="stream_id" />
+ <arg direction="in" type="b" name="mute_state" />
+ </method>
+ <method name="MuteOutput">
+ <arg direction="in" type="o" name="channel_path" />
+ <arg direction="in" type="u" name="stream_id" />
+ <arg direction="in" type="b" name="mute_state" />
+ </method>
+ <method name="SetOutputWindow">
+ <arg direction="in" type="o" name="channel_path" />
+ <arg direction="in" type="u" name="stream_id" />
+ <arg direction="in" type="u" name="window" />
+ </method>
+ <method name="AddPreviewWindow">
+ <arg direction="in" type="u" name="window" />
+ </method>
+ <method name="RemovePreviewWindow">
+ <arg direction="in" type="u" name="window" />
+ </method>
+ <signal name="Receiving">
+ <arg type="o" name="channel_path" />
+ <arg type="u" name="stream_id" />
+ <arg type="b" name="state" />
+ </signal>
+ <signal name="StreamStateChanged">
+ <arg type="o" name="channel_path" />
+ <arg type="u" name="stream_id" />
+ <arg type="u" name="state" />
+ <arg type="u" name="direction" />
+ </signal>
+ <method name="Shutdown">
+ </method>
+ </interface>
+</node>
diff --git a/trunk/extensions/Tube_Handler.xml b/trunk/extensions/Tube_Handler.xml
new file mode 100644
index 000000000..1c14158ba
--- /dev/null
+++ b/trunk/extensions/Tube_Handler.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" ?>
+<node name="/Tube_Handler" xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0">
+ <tp:copyright>Copyright (C) 2008 Collabora Limited</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
+Library 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.gnome.Empathy.TubeHandler">
+
+ <method name="HandleTube">
+ <arg direction="in" type="s" name="Bus_Name" tp:type="DBus_Bus_Name">
+ <tp:docstring>
+ The bus name of the connection and channel
+ </tp:docstring>
+ </arg>
+ <arg direction="in" type="o" name="Connection">
+ <tp:docstring>
+ The object-path of the connection that owns the channel
+ </tp:docstring>
+ </arg>
+ <arg direction="in" type="o" name="Channel">
+ <tp:docstring>
+ The object-path of the tubes channel
+ </tp:docstring>
+ </arg>
+ <arg direction="in" type="u" tp:type="Handle_Type" name="Handle_Type">
+ <tp:docstring>The type of the handle that the channel communicates
+ with, or 0 if there is no associated handle</tp:docstring>
+ </arg>
+ <arg direction="in" type="u" tp:type="Handle" name="Handle">
+ <tp:docstring>The handle that the channel communicates with,
+ or 0 if there is no associated handle</tp:docstring>
+ </arg>
+ <arg name="id" type="u" tp:type="Tube_ID">
+ <tp:docstring>
+ The ID of the new tube.
+ </tp:docstring>
+ </arg>
+ <tp:docstring>
+ Called when a tube handler should handle a new tube within a tubes channel.
+ </tp:docstring>
+ <!-- FIXME: possible errors? -->
+ </method>
+ <tp:docstring xmlns="http://www.w3.org/1999/xhtml">
+ <p>An interface exported by client applications which are able to
+ handle incoming tubes.</p>
+ </tp:docstring>
+ </interface>
+</node>
+<!-- vim:set sw=2 sts=2 et ft=xml: -->
+
diff --git a/trunk/extensions/all.xml b/trunk/extensions/all.xml
new file mode 100644
index 000000000..d4986ff08
--- /dev/null
+++ b/trunk/extensions/all.xml
@@ -0,0 +1,22 @@
+<tp:spec
+ xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+ xmlns:xi="http://www.w3.org/2001/XInclude">
+
+<tp:title>Extensions for empathy</tp:title>
+
+<xi:include href="misc.xml"/>
+
+<tp:generic-types>
+ <tp:external-type name="Contact_Handle" type="u"
+ from="Telepathy specification"/>
+ <tp:external-type name="DBus_Bus_Name" type="s"
+ from="Telepathy specification"/>
+ <tp:external-type name="DBus_Interface" type="s"
+ from="Telepathy specification"/>
+ <tp:external-type name="Handle_Type" type="u"
+ from="Telepathy specification"/>
+ <tp:external-type name="Handle" type="u"
+ from="Telepathy specification"/>
+</tp:generic-types>
+
+</tp:spec>
diff --git a/trunk/extensions/extensions-cli.c b/trunk/extensions/extensions-cli.c
new file mode 100644
index 000000000..9a72da148
--- /dev/null
+++ b/trunk/extensions/extensions-cli.c
@@ -0,0 +1,31 @@
+#include "extensions.h"
+
+#include <telepathy-glib/proxy-subclass.h>
+
+static void _emp_ext_register_dbus_glib_marshallers (void);
+
+/* include auto-generated stubs for client-specific code */
+#include "_gen/signals-marshal.h"
+#include "_gen/cli-misc-body.h"
+#include "_gen/register-dbus-glib-marshallers-body.h"
+
+static gpointer
+emp_cli_once (gpointer data)
+{
+ _emp_ext_register_dbus_glib_marshallers ();
+
+ tp_proxy_init_known_interfaces ();
+
+ tp_proxy_or_subclass_hook_on_interface_add (TP_TYPE_PROXY,
+ emp_cli_misc_add_signals);
+
+ return NULL;
+}
+
+void
+emp_cli_init (void)
+{
+ static GOnce once = G_ONCE_INIT;
+
+ g_once (&once, emp_cli_once, NULL);
+}
diff --git a/trunk/extensions/extensions.c b/trunk/extensions/extensions.c
new file mode 100644
index 000000000..eeda4623c
--- /dev/null
+++ b/trunk/extensions/extensions.c
@@ -0,0 +1,6 @@
+#include "extensions.h"
+
+/* include auto-generated stubs for things common to service and client */
+#include "_gen/gtypes-body.h"
+#include "_gen/interfaces-body.h"
+#include "_gen/signals-marshal.h"
diff --git a/trunk/extensions/extensions.h b/trunk/extensions/extensions.h
new file mode 100644
index 000000000..d97dc830c
--- /dev/null
+++ b/trunk/extensions/extensions.h
@@ -0,0 +1,20 @@
+#ifndef __EMP_EXTENSIONS_H__
+#define __EMP_EXTENSIONS_H__
+
+#include <glib-object.h>
+#include <telepathy-glib/channel.h>
+
+#include "extensions/_gen/enums.h"
+#include "extensions/_gen/cli-misc.h"
+#include "extensions/_gen/svc-misc.h"
+
+G_BEGIN_DECLS
+
+#include "extensions/_gen/gtypes.h"
+#include "extensions/_gen/interfaces.h"
+
+void emp_cli_init (void);
+
+G_END_DECLS
+
+#endif
diff --git a/trunk/extensions/misc.xml b/trunk/extensions/misc.xml
new file mode 100644
index 000000000..72d3a4124
--- /dev/null
+++ b/trunk/extensions/misc.xml
@@ -0,0 +1,11 @@
+<tp:spec
+ xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+ xmlns:xi="http://www.w3.org/2001/XInclude">
+
+<tp:title>Misc extensions for Empathy</tp:title>
+
+<xi:include href="Stream_Engine.xml"/>
+<xi:include href="Channel_Handler.xml"/>
+<xi:include href="Tube_Handler.xml"/>
+
+</tp:spec>
diff --git a/trunk/help/.gitignore b/trunk/help/.gitignore
new file mode 100644
index 000000000..c3f66c309
--- /dev/null
+++ b/trunk/help/.gitignore
@@ -0,0 +1,2 @@
+*.omf
+*.mo
diff --git a/trunk/help/C/empathy.xml b/trunk/help/C/empathy.xml
new file mode 100644
index 000000000..b9d756cd3
--- /dev/null
+++ b/trunk/help/C/empathy.xml
@@ -0,0 +1,297 @@
+<?xml version="1.0"?>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
+<!ENTITY legal SYSTEM "legal.xml">
+<!ENTITY appversion "2.24">
+<!ENTITY manrevision "2.0">
+<!ENTITY date "April 2008">
+<!ENTITY app "<application>Empathy</application>">
+<!ENTITY appname "Empathy">
+]>
+
+<article id="index" lang="en">
+ <!-- please do not change the id; for translations, change lang to -->
+ <!-- appropriate code -->
+ <articleinfo>
+ <title>&app; Manual V&manrevision;</title>
+
+ <copyright>
+ <year>2008</year>
+ <holder>Ubuntu Documentation Project</holder>
+ </copyright>
+ <!-- An address can be added to the publisher information. If a role is
+ not specified, the publisher/author is the same for all versions of the
+ document. -->
+ <publisher>
+ <publishername>Ubuntu Documentation Project</publishername>
+ </publisher>
+
+ <!-- licence stuff -->
+ &legal;
+
+ <authorgroup>
+ <author role="maintainer">
+ <firstname>Milo</firstname>
+ <surname>Casagrande</surname>
+ <affiliation>
+ <orgname>Ubuntu Documentation Project</orgname>
+ <address><email>milo_casagrande@yahoo.it</email></address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Seth</firstname>
+ <surname>Dudenhofer</surname>
+ <affiliation>
+ <orgname>Ubuntu Documentation Project</orgname>
+ <address><email>sdudenhofer@gmail.com</email></address>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Jesse N.</firstname>
+ <surname>Richardson</surname>
+ <affiliation>
+ <orgname>Ubuntu Documentation Project</orgname>
+ <address><email>richardson183@bellsouth.net</email></address>
+ </affiliation>
+ </author>
+ </authorgroup>
+
+<!-- According to GNU FDL, revision history is mandatory if you are -->
+<!-- modifying/reusing someone else's document. If not, you can omit it. -->
+<!-- Remember to remove the &manrevision; entity from the revision -->
+<!-- entries other than the current revision. -->
+<!-- The revision numbering system for GNOME manuals is as follows: -->
+<!-- * the revision number consists of two components -->
+<!-- * the first component of the revision number reflects the release version of the GNOME desktop. -->
+<!-- * the second component of the revision number is a decimal unit that is incremented with each revision of the manual. -->
+<!-- For example, if the GNOME desktop release is V2.x, the first version of the manual that -->
+<!-- is written in that desktop timeframe is V2.0, the second version of the manual is V2.1, etc. -->
+<!-- When the desktop release version changes to V3.x, the revision number of the manual changes -->
+<!-- to V3.0, and so on. -->
+ <revhistory>
+ <revision>
+ <revnumber>Empathy Manual V&manrevision;</revnumber>
+ <date>&date;</date>
+ <revdescription>
+ <para role="author">Milo Casagrande
+ <email>milo_casagrande@yahoo.it</email>
+ </para>
+ <para role="author">Seth Dudenhofer
+ <email>sdudenhofer@gmail.com</email>
+ </para>
+ <para role="author">Jesse N. Richardson
+ <email>richardson183@bellsouth.net</email>
+ </para>
+ <para role="publisher">Ubuntu Documentation Project</para>
+ </revdescription>
+ </revision>
+ </revhistory>
+
+ <releaseinfo>
+ This manual describes version &appversion; of &appname;.
+ </releaseinfo>
+ <legalnotice>
+ <title>Feedback</title>
+ <para>
+ To report a bug or make a suggestion regarding the &app; application or
+ this manual, follow the directions in the <ulink url="ghelp:gnome-feedback"
+ type="help">GNOME Feedback Page</ulink>.
+ </para>
+ </legalnotice>
+
+ <abstract role="description">
+ <para>
+ &appname; is an application for instant messaging.
+ </para>
+ </abstract>
+
+ </articleinfo>
+
+ <indexterm zone="index">
+ <primary>Empathy</primary>
+ </indexterm>
+ <indexterm zone="index">
+ <primary>empathy</primary>
+ <secondary>istant messaging</secondary>
+ </indexterm>
+
+ <sect1 id="empathy-intro">
+ <title>Introduction</title>
+ <para>
+ &app; is a multi-protocol instant messaging program for the
+ GNOME Desktop that allows you to keep in touch with your friends
+ over a network.
+ </para>
+ <para>
+ It supports the following protocols:
+ <itemizedlist>
+ <listitem>
+ <para>
+ <acronym>AIM</acronym>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Google Talk
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ ICQ
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <acronym>IRC</acronym>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Jabber
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ <acronym>MSN</acronym>
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Salut
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Yahoo
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </sect1>
+
+ <sect1 id="empathy-getting-started">
+ <title>Getting Started</title>
+
+ <sect2 id="empathy-starting">
+ <title>To Start &appname;</title>
+ <para>You can start &app; in the following ways:
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term><guimenu>Applications</guimenu> menu</term>
+ <listitem>
+ <para>Choose
+ <menuchoice>
+ <guisubmenu>Internet</guisubmenu>
+ <guimenuitem>Empathy Instant Messenger</guimenuitem>
+ </menuchoice>.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Command line</term>
+ <listitem>
+ <para>Type <command>empathy</command> and then press
+ <keycap>Return</keycap>.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+
+ <sect2 id="emphaty-when-start">
+ <title>When you start &appname;</title>
+ <para>
+ When you start &app; the following window is displayed.
+ <!-- Figure -->
+ <!--
+ Commented out, need to find a solution on how to
+ structure this section.
+ <figure id="empathy-mainwindow">
+ <title>&app; Main Window</title>
+ <screenshot>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="figures/empathy-main-window.png" format="PNG"/>
+ </imageobject>
+ <textobject>
+ <phrase>
+ Shows &app; main window. Contains the titlebar, the
+ menubar, contact list, status icon and status arrow
+ button list.
+ </phrase>
+ </textobject>
+ </mediaobject>
+ </screenshot>
+ </figure>
+ -->
+ <!-- End of Figure -->
+ </para>
+ <para>
+ <xref linkend="empathy-TBL-1"/> describes the components of a browser window.
+ <table frame="topbot" id="empathy-TBL-1">
+ <title>&app; Main Components</title>
+ <tgroup cols="2" colsep="0" rowsep="0">
+ <colspec colname="colspec0" colwidth="29.39*"/>
+ <colspec colname="colspec1" colwidth="70.61*"/>
+ <thead>
+ <row rowsep="1">
+ <entry valign="top">
+ <para>Component</para>
+ </entry>
+ <entry valign="top">
+ <para>Description</para>
+ </entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry valign="top">
+ <para>Menubar</para>
+ </entry>
+ <entry valign="top">
+ <para>
+ Contains menus used to perform actions in &app;.
+ </para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Status Drop-Down List</para>
+ </entry>
+ <entry valign="top">
+ <para>
+ Allows to update the user's status.
+ </para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Account Button</para>
+ </entry>
+ <entry valign="top">
+ <para>
+ Opens the <guilabel>Accounts</guilabel> dialog.
+ </para>
+ </entry>
+ </row>
+ <row>
+ <entry valign="top">
+ <para>Contact List</para>
+ </entry>
+ <entry valign="top">
+ <para>
+ Shows all the available contacts and their
+ associated status.
+ </para>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </para>
+ </sect2>
+
+ </sect1>
+
+</article>
diff --git a/trunk/help/C/legal.xml b/trunk/help/C/legal.xml
new file mode 100644
index 000000000..ac97e1de4
--- /dev/null
+++ b/trunk/help/C/legal.xml
@@ -0,0 +1,76 @@
+ <legalnotice id="legalnotice">
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation
+ License (GFDL), Version 1.1 or any later version published
+ by the Free Software Foundation with no Invariant Sections,
+ no Front-Cover Texts, and no Back-Cover Texts. You can find
+ a copy of the GFDL at this <ulink type="help"
+ url="ghelp:fdl">link</ulink> or in the file COPYING-DOCS
+ distributed with this manual.
+ </para>
+ <para> This manual is part of a collection of GNOME manuals
+ distributed under the GFDL. If you want to distribute this
+ manual separately from the collection, you can do so by
+ adding a copy of the license to the manual, as described in
+ section 6 of the license.
+ </para>
+
+ <para>
+ Many of the names used by companies to distinguish their
+ products and services are claimed as trademarks. Where those
+ names appear in any GNOME documentation, and the members of
+ the GNOME Documentation Project are made aware of those
+ trademarks, then the names are in capital letters or initial
+ capital letters.
+ </para>
+
+ <para>
+ DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED
+ UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE
+ WITH THE FURTHER UNDERSTANDING THAT:
+
+ <orderedlist>
+ <listitem>
+ <para>DOCUMENT IS PROVIDED ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
+ IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
+ THAT THE DOCUMENT OR MODIFIED VERSION OF THE
+ DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR
+ A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE
+ RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE
+ OF THE DOCUMENT OR MODIFIED VERSION OF THE
+ DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR
+ MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY
+ CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
+ SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS
+ LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED
+ VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER
+ EXCEPT UNDER THIS DISCLAIMER; AND
+ </para>
+ </listitem>
+ <listitem>
+ <para>UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL
+ THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE),
+ CONTRACT, OR OTHERWISE, SHALL THE AUTHOR,
+ INITIAL WRITER, ANY CONTRIBUTOR, OR ANY
+ DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION
+ OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH
+ PARTIES, BE LIABLE TO ANY PERSON FOR ANY
+ DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
+ CONSEQUENTIAL DAMAGES OF ANY CHARACTER
+ INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS
+ OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
+ MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR
+ LOSSES ARISING OUT OF OR RELATING TO USE OF THE
+ DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT,
+ EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF
+ THE POSSIBILITY OF SUCH DAMAGES.
+ </para>
+ </listitem>
+ </orderedlist>
+ </para>
+ </legalnotice>
+
diff --git a/trunk/help/Makefile.am b/trunk/help/Makefile.am
new file mode 100644
index 000000000..fb5a11e2a
--- /dev/null
+++ b/trunk/help/Makefile.am
@@ -0,0 +1,8 @@
+include $(top_srcdir)/gnome-doc-utils.make
+
+DOC_MODULE = empathy
+DOC_ENTITIES = legal.xml
+DOC_LINGUAS = es
+DOC_FIGURES =
+
+dist-hook: doc-dist-hook
diff --git a/trunk/help/empathy.omf.in b/trunk/help/empathy.omf.in
new file mode 100644
index 000000000..fc3414507
--- /dev/null
+++ b/trunk/help/empathy.omf.in
@@ -0,0 +1,10 @@
+<?xml version="1.0" standalone="no"?>
+<omf>
+ <resource>
+ <subject category="GNOME|Applications|Internet"/>
+ <type>manual</type>
+ <relation seriesid="593c483c-fd87-11dc-962a-db91d980186f"/>
+ <rights type="GNU FDL" license.version="1.1" holder="Milo Casagrande"/>
+ </resource>
+</omf>
+
diff --git a/trunk/help/es/.gitignore b/trunk/help/es/.gitignore
new file mode 100644
index 000000000..6722cd96e
--- /dev/null
+++ b/trunk/help/es/.gitignore
@@ -0,0 +1 @@
+*.xml
diff --git a/trunk/help/es/es.po b/trunk/help/es/es.po
new file mode 100644
index 000000000..602f3337b
--- /dev/null
+++ b/trunk/help/es/es.po
@@ -0,0 +1,310 @@
+# translation of empathy.help.HEAD.po to Español
+# Jorge González <jorgegonz@svn.gnome.org>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy.help.HEAD\n"
+"POT-Creation-Date: 2008-04-20 10:28+0000\n"
+"PO-Revision-Date: 2008-04-20 14:16+0200\n"
+"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
+"Language-Team: Español <gnome-es-list@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: C/empathy.xml:16(title)
+msgid "<application>Empathy</application> Manual V2.0"
+msgstr "Manual de <application>Empathy</application> V2.0"
+
+#: C/empathy.xml:19(year)
+msgid "2008"
+msgstr "2008"
+
+#: C/empathy.xml:20(holder) C/empathy.xml:26(publishername) C/empathy.xml:37(orgname) C/empathy.xml:45(orgname) C/empathy.xml:53(orgname) C/empathy.xml:85(para)
+msgid "Ubuntu Documentation Project"
+msgstr "Proyecto de documentación de Ubuntu"
+
+#: C/empathy.xml:2(para)
+msgid "Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License (GFDL), Version 1.1 or any later version published by the Free Software Foundation with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. You can find a copy of the GFDL at this <ulink type=\"help\" url=\"ghelp:fdl\">link</ulink> or in the file COPYING-DOCS distributed with this manual."
+msgstr ""
+"Se concede permiso para copiar, distribuir o modificar este documento según "
+"las condiciones de la GNU Free Documentation License (GFDL), Versión 1.1 o "
+"cualquier versión posterior publicada por la Free Software Foundation sin "
+"Secciones invariantes, Textos de portada y Textos de contraportada. "
+"Encontrará una copia de la GFDL en este <ulink type=\"help\" url=\"ghelp:fdl"
+"\">enlace</ulink> o en el archivo COPYING-DOCS distribuido con este manual."
+
+#: C/empathy.xml:12(para)
+msgid "This manual is part of a collection of GNOME manuals distributed under the GFDL. If you want to distribute this manual separately from the collection, you can do so by adding a copy of the license to the manual, as described in section 6 of the license."
+msgstr ""
+"Este manual forma parte de una colección de documentos de GNOME distribuidos "
+"según la GFDL. Si desea distribuir este manual de forma independiente de la "
+"colección, puede hacerlo agregando una copia de la licencia al documento, "
+"según se describe en la sección 6 de la misma."
+
+#: C/empathy.xml:19(para)
+msgid "Many of the names used by companies to distinguish their products and services are claimed as trademarks. Where those names appear in any GNOME documentation, and the members of the GNOME Documentation Project are made aware of those trademarks, then the names are in capital letters or initial capital letters."
+msgstr ""
+"Muchos de los nombres utilizados por las empresas para distinguir sus "
+"productos y servicios se consideran marcas comerciales. Cuando estos nombres "
+"aparezcan en la documentación de GNOME, y siempre que se haya informado a "
+"los miembros del Proyecto de documentación de GNOME de dichas marcas "
+"comerciales, los nombres aparecerán en mayúsculas o con las iniciales en "
+"mayúsculas."
+
+#: C/empathy.xml:35(para)
+msgid "DOCUMENT IS PROVIDED ON AN \"AS IS\" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER; AND"
+msgstr ""
+"EL DOCUMENTO SE PROPORCIONA \"TAL CUAL\", SIN GARANTÍA DE NINGÚN TIPO, NI "
+"EXPLÍCITA NI IMPLÍCITA INCLUYENDO, SIN LIMITACIÓN, GARANTÍA DE QUE EL "
+"DOCUMENTO O VERSIÓN MODIFICADA DE ÉSTE CAREZCA DE DEFECTOS COMERCIALES, SEA "
+"ADECUADO A UN FIN CONCRETO O INCUMPLA ALGUNA NORMATIVA. TODO EL RIESGO "
+"RELATIVO A LA CALIDAD, PRECISIÓN Y UTILIDAD DEL DOCUMENTO O SU VERSIÓN "
+"MODIFICADA RECAE EN USTED. SI CUALQUIER DOCUMENTO O VERSIÓN MODIFICADA DE "
+"AQUÉL RESULTARA DEFECTUOSO EN CUALQUIER ASPECTO, USTED (Y NO EL REDACTOR "
+"INICIAL, AUTOR O CONTRIBUYENTE) ASUMIRÁ LOS COSTES DE TODA REPARACIÓN, "
+"MANTENIMIENTO O CORRECCIÓN NECESARIOS. ESTA RENUNCIA DE GARANTÍA ES UNA "
+"PARTE ESENCIAL DE ESTA LICENCIA. NO SE AUTORIZA EL USO DE NINGÚN DOCUMENTO "
+"NI VERSIÓN MODIFICADA DE ÉSTE POR EL PRESENTE, SALVO DENTRO DEL CUMPLIMIENTO "
+"DE LA RENUNCIA;Y"
+
+#: C/empathy.xml:55(para)
+msgid "UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL THE AUTHOR, INITIAL WRITER, ANY CONTRIBUTOR, OR ANY DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR LOSSES ARISING OUT OF OR RELATING TO USE OF THE DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES."
+msgstr ""
+"EN NINGUNA CIRCUNSTANCIA NI BAJO NINGUNA TEORÍA LEGAL, SEA POR ERROR "
+"(INCLUYENDO NEGLIGENCIA) CONTRATO O DOCUMENTO DE OTRO TIPO, EL AUTOR, EL "
+"ESCRITOR INICIAL, EL AUTOR DE APORTACIONES NI NINGÚN DISTRIBUIDOR DEL "
+"DOCUMENTO O VERSIÓN MODIFICADA DEL DOCUMENTO, NI NINGÚN PROVEEDOR DE NINGUNA "
+"DE ESAS PARTES, SERÁ RESPONSABLE ANTE NINGUNA PERSONA POR NINGÚN DAÑO "
+"DIRECTO, INDIRECTO, ESPECIAL, INCIDENTAL O DERIVADO DE NINGÚN TIPO, "
+"INCLUYENDO, SIN LIMITACIÓN DAÑOS POR PÉRDIDA DE FONDO DE COMERCIO, PARO "
+"TÉCNICO, FALLO INFORMÁTICO O AVERÍA O CUALQUIER OTRO POSIBLE DAÑO O AVERÍA "
+"DERIVADO O RELACIONADO CON EL USO DEL DOCUMENTO O SUS VERSIONES MODIFICADAS, "
+"AUNQUE DICHA PARTE HAYA SIDO INFORMADA DE LA POSIBILIDAD DE QUE SE "
+"PRODUJESEN ESOS DAÑOS."
+
+#: C/empathy.xml:28(para)
+msgid "DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE WITH THE FURTHER UNDERSTANDING THAT: <placeholder-1/>"
+msgstr ""
+"ESTE DOCUMENTO Y LAS VERSIONES MODIFICADAS DEL MISMO SE PROPORCIONAN SEGÚN "
+"LAS CONDICIONES ESTABLECIDAS EN LA LICENCIA DE DOCUMENTACIÓN LIBRE DE GNU "
+"(GFDL) Y TENIENDO EN CUENTA QUE: <placeholder-1/>"
+
+#: C/empathy.xml:34(firstname)
+msgid "Milo"
+msgstr "Milo"
+
+#: C/empathy.xml:35(surname)
+msgid "Casagrande"
+msgstr "Casagrande"
+
+#: C/empathy.xml:38(email)
+msgid "milo_casagrande@yahoo.it"
+msgstr "milo_casagrande@yahoo.it"
+
+#: C/empathy.xml:42(firstname)
+msgid "Seth"
+msgstr "Seth"
+
+#: C/empathy.xml:43(surname)
+msgid "Dudenhofer"
+msgstr "Dudenhofer"
+
+#: C/empathy.xml:46(email)
+msgid "sdudenhofer@gmail.com"
+msgstr "sdudenhofer@gmail.com"
+
+#: C/empathy.xml:50(firstname)
+msgid "Jesse N."
+msgstr "Jesse N."
+
+#: C/empathy.xml:51(surname)
+msgid "Richardson"
+msgstr "Richardson"
+
+#: C/empathy.xml:54(email)
+msgid "richardson183@bellsouth.net"
+msgstr "richardson183@bellsouth.net"
+
+#: C/empathy.xml:73(revnumber)
+msgid "Empathy Manual V2.0"
+msgstr "Manual de Empathy V2.0"
+
+#: C/empathy.xml:74(date)
+msgid "April 2008"
+msgstr "Abril de 2008"
+
+#: C/empathy.xml:76(para)
+msgid "Milo Casagrande <email>milo_casagrande@yahoo.it</email>"
+msgstr "Milo Casagrande <email>milo_casagrande@yahoo.it</email>"
+
+#: C/empathy.xml:79(para)
+msgid "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
+msgstr "Seth Dudenhofer <email>sdudenhofer@gmail.com</email>"
+
+#: C/empathy.xml:82(para)
+msgid "Jesse N. Richardson <email>richardson183@bellsouth.net</email>"
+msgstr "Jesse N. Richardson <email>richardson183@bellsouth.net</email>"
+
+#: C/empathy.xml:90(releaseinfo)
+msgid "This manual describes version 2.24 of Empathy."
+msgstr "Este manual describe la versión 2.24 de Empathy."
+
+#: C/empathy.xml:94(title)
+msgid "Feedback"
+msgstr "Comentarios"
+
+#: C/empathy.xml:95(para)
+msgid "To report a bug or make a suggestion regarding the <application>Empathy</application> application or this manual, follow the directions in the <ulink url=\"ghelp:gnome-feedback\" type=\"help\">GNOME Feedback Page</ulink>."
+msgstr "Para informar de un fallo, o hacer alguna sugerencia concerniente a la aplicación <application>Empathy</application> o este manual, siga las indicaciones en la <ulink url=\"ghelp:gnome-feedback\" type=\"help\">Página de comentarios de GNOME</ulink>."
+
+#: C/empathy.xml:103(para)
+msgid "Empathy is an application for instant messaging."
+msgstr "Empathy es una aplicación para mensajería instantánea."
+
+#: C/empathy.xml:111(primary)
+msgid "Empathy"
+msgstr "Empathy"
+
+#: C/empathy.xml:114(primary)
+msgid "empathy"
+msgstr "empathy"
+
+#: C/empathy.xml:115(secondary)
+msgid "istant messaging"
+msgstr "mensajería instantánea"
+
+#: C/empathy.xml:119(title)
+msgid "Introduction"
+msgstr "Introducción"
+
+#: C/empathy.xml:120(para)
+msgid "<application>Empathy</application> is a multi-protocol instant messaging program for the GNOME Desktop that allows you to keep in touch with your friends over a network."
+msgstr "<application>Empathy</application> es un programa multiprotocolo de mensajería instantánea para el Escritorio GNOME que le permite mantenerse en contacto con sus amigos a través de una red."
+
+#: C/empathy.xml:130(acronym)
+msgid "AIM"
+msgstr "AIM"
+
+#: C/empathy.xml:134(para)
+msgid "Google Talk"
+msgstr "Google Talk"
+
+#: C/empathy.xml:139(para)
+msgid "ICQ"
+msgstr "ICQ"
+
+#: C/empathy.xml:145(acronym)
+msgid "IRC"
+msgstr "IRC"
+
+#: C/empathy.xml:149(para)
+msgid "Jabber"
+msgstr "Jabber"
+
+#: C/empathy.xml:155(acronym)
+msgid "MSN"
+msgstr "MSN"
+
+#: C/empathy.xml:159(para)
+msgid "Salut"
+msgstr "Salut"
+
+#: C/empathy.xml:164(para)
+msgid "Yahoo"
+msgstr "Yahoo"
+
+#: C/empathy.xml:125(para)
+msgid "It supports the following protocols: <placeholder-1/>"
+msgstr "Soporta los siguientes protocolos: <placeholder-1/>"
+
+#: C/empathy.xml:173(title)
+msgid "Getting Started"
+msgstr "Inicio"
+
+#: C/empathy.xml:176(title)
+msgid "To Start Empathy"
+msgstr "Iniciar Empathy"
+
+#: C/empathy.xml:177(para)
+msgid "You can start <application>Empathy</application> in the following ways:"
+msgstr "Puede iniciar <application>Empathy</application> de las siguientes formas:"
+
+#: C/empathy.xml:181(term)
+msgid "<guimenu>Applications</guimenu> menu"
+msgstr "Menú <guimenu>Aplicaciones</guimenu>"
+
+#: C/empathy.xml:183(para)
+msgid "Choose <menuchoice><guisubmenu>Internet</guisubmenu><guimenuitem>Empathy Instant Messenger</guimenuitem></menuchoice>."
+msgstr "Elija <menuchoice><guisubmenu>Internet</guisubmenu><guimenuitem>Mensajería instantánea Empathy</guimenuitem></menuchoice>."
+
+#: C/empathy.xml:192(term)
+msgid "Command line"
+msgstr "Línea de comandos"
+
+#: C/empathy.xml:194(para)
+msgid "Type <command>empathy</command> and then press <keycap>Return</keycap>."
+msgstr "Escriba <command>empathy</command> y pulse <keycap>intro</keycap>."
+
+#: C/empathy.xml:203(title)
+msgid "When you start Empathy"
+msgstr "Al iniciar Empathy"
+
+#: C/empathy.xml:204(para)
+msgid "When you start <application>Empathy</application> the following window is displayed."
+msgstr "Se mostrará la siguiente ventana al iniciar <application>Empathy</application>."
+
+#: C/empathy.xml:233(title)
+msgid "<application>Empathy</application> Main Components"
+msgstr "Componentes principales de <application>Empathy</application>"
+
+#: C/empathy.xml:240(para)
+msgid "Component"
+msgstr "Componente"
+
+#: C/empathy.xml:243(para)
+msgid "Description"
+msgstr "Descripción"
+
+#: C/empathy.xml:250(para)
+msgid "Menubar"
+msgstr "Barra de menú"
+
+#: C/empathy.xml:253(para)
+msgid "Contains menus used to perform actions in <application>Empathy</application>."
+msgstr "Contiene los menús usados para realizar acciones en <application>Empathy</application>."
+
+#: C/empathy.xml:260(para)
+msgid "Status Drop-Down List"
+msgstr "Lista desplegable de estados"
+
+#: C/empathy.xml:263(para)
+msgid "Allows to update the user's status."
+msgstr "Permite actualizar el estado del usuario."
+
+#: C/empathy.xml:270(para)
+msgid "Account Button"
+msgstr "Botón Cuentas"
+
+#: C/empathy.xml:273(para)
+msgid "Opens the <guilabel>Accounts</guilabel> dialog."
+msgstr "Abre el diálogo <guilabel>Cuentas</guilabel>."
+
+#: C/empathy.xml:280(para)
+msgid "Contact List"
+msgstr "Lista de contactos"
+
+#: C/empathy.xml:283(para)
+msgid "Shows all the available contacts and their associated status."
+msgstr "Muestra todos los contactos disponibles y su estado asociado."
+
+#: C/empathy.xml:230(para)
+msgid "<xref linkend=\"empathy-TBL-1\"/> describes the components of a browser window. <table frame=\"topbot\" id=\"empathy-TBL-1\"><placeholder-1/><tgroup cols=\"2\" colsep=\"0\" rowsep=\"0\"><colspec colname=\"colspec0\" colwidth=\"29.39*\"/><colspec colname=\"colspec1\" colwidth=\"70.61*\"/><placeholder-2/><placeholder-3/></tgroup></table>"
+msgstr "La <xref linkend=\"empathy-TBL-1\"/>describe los componentes de la ventana del examinador. <table frame=\"topbot\" id=\"empathy-TBL-1\"><placeholder-1/><tgroup cols=\"2\" colsep=\"0\" rowsep=\"0\"><colspec colname=\"colspec0\" colwidth=\"29.39*\"/><colspec colname=\"colspec1\" colwidth=\"70.61*\"/><placeholder-2/><placeholder-3/></tgroup></table>"
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: C/empathy.xml:0(None)
+msgid "translator-credits"
+msgstr "Jorge González <jorgegonz@svn.gnome.org>, 2008"
+
diff --git a/trunk/libempathy-gtk/.gitignore b/trunk/libempathy-gtk/.gitignore
new file mode 100644
index 000000000..3e3f6f051
--- /dev/null
+++ b/trunk/libempathy-gtk/.gitignore
@@ -0,0 +1,2 @@
+empathy-gtk-marshal.*
+*.gladep
diff --git a/trunk/libempathy-gtk/Makefile.am b/trunk/libempathy-gtk/Makefile.am
new file mode 100644
index 000000000..225c25ec0
--- /dev/null
+++ b/trunk/libempathy-gtk/Makefile.am
@@ -0,0 +1,191 @@
+AM_CPPFLAGS = \
+ -I. \
+ -I$(top_srcdir) \
+ -DDATADIR=\""$(datadir)"\" \
+ $(EMPATHY_CFLAGS) \
+ $(ENCHANT_CFLAGS) \
+ $(WARN_CFLAGS)
+
+BUILT_SOURCES = \
+ empathy-gtk-marshal.h \
+ empathy-gtk-marshal.c \
+ empathy-gtk-marshal.list \
+ empathy-gtk-enum-types.h \
+ empathy-gtk-enum-types.c
+
+lib_LTLIBRARIES = libempathy-gtk.la
+
+libempathy_gtk_la_SOURCES = \
+ empathy-account-chooser.c \
+ empathy-chat.c \
+ empathy-irc-network-dialog.c \
+ empathy-spell-dialog.c \
+ empathy-accounts-dialog.c \
+ empathy-chat-view.c \
+ empathy-log-window.c \
+ empathy-theme-boxes.c \
+ empathy-account-widget.c \
+ empathy-conf.c \
+ empathy-theme.c \
+ empathy-account-widget-irc.c \
+ empathy-account-widget-sip.c \
+ empathy-contact-dialogs.c \
+ empathy-new-message-dialog.c \
+ empathy-theme-irc.c \
+ empathy-avatar-chooser.c \
+ empathy-contact-list-store.c \
+ empathy-presence-chooser.c \
+ empathy-theme-manager.c \
+ empathy-avatar-image.c \
+ empathy-contact-list-view.c \
+ empathy-ui-utils.c \
+ empathy-cell-renderer-activatable.c \
+ empathy-contact-widget.c \
+ empathy-profile-chooser.c \
+ empathy-cell-renderer-expander.c \
+ empathy-geometry.c \
+ empathy-smiley-manager.c \
+ empathy-cell-renderer-text.c \
+ empathy-spell.c \
+ empathy-contact-menu.c \
+ totem-subtitle-encoding.c totem-subtitle-encoding.h
+
+# do not distribute generated files
+nodist_libempathy_gtk_la_SOURCES =\
+ $(BUILT_SOURCES)
+
+libempathy_gtk_la_LIBADD = \
+ $(EMPATHY_LIBS) \
+ $(ENCHANT_LIBS) \
+ $(top_builddir)/libempathy/libempathy.la
+
+libempathy_gtk_la_LDFLAGS = \
+ -version-info ${LIBEMPATHY_GTK_CURRENT}:${LIBEMPATHY_GTK_REVISION}:${LIBEMPATHY_GTK_AGE} \
+ -export-symbols-regex ^empathy_
+
+libempathy_gtk_headers = \
+ empathy-images.h \
+ empathy-account-chooser.h \
+ empathy-chat.h \
+ empathy-irc-network-dialog.h \
+ empathy-spell-dialog.h \
+ empathy-accounts-dialog.h \
+ empathy-chat-view.h \
+ empathy-log-window.h \
+ empathy-theme-boxes.h \
+ empathy-account-widget.h \
+ empathy-conf.h \
+ empathy-theme.h \
+ empathy-account-widget-irc.h \
+ empathy-account-widget-sip.h \
+ empathy-contact-dialogs.h \
+ empathy-new-message-dialog.h \
+ empathy-theme-irc.h \
+ empathy-avatar-chooser.h \
+ empathy-contact-list-store.h \
+ empathy-presence-chooser.h \
+ empathy-theme-manager.h \
+ empathy-avatar-image.h \
+ empathy-contact-list-view.h \
+ empathy-ui-utils.h \
+ empathy-cell-renderer-activatable.h \
+ empathy-contact-widget.h \
+ empathy-profile-chooser.h \
+ empathy-cell-renderer-expander.h \
+ empathy-geometry.h \
+ empathy-smiley-manager.h \
+ empathy-cell-renderer-text.h \
+ empathy-spell.h \
+ empathy-contact-menu.h
+
+libempathy_gtk_includedir = $(includedir)/libempathy-gtk/
+libempathy_gtk_include_HEADERS = \
+ $(libempathy_gtk_headers) \
+ empathy-gtk-enum-types.h
+
+gladedir = $(datadir)/empathy
+glade_DATA = \
+ empathy-contact-widget.glade \
+ empathy-contact-dialogs.glade \
+ empathy-presence-chooser.glade \
+ empathy-accounts-dialog.glade \
+ empathy-account-widget-generic.glade \
+ empathy-account-widget-jabber.glade \
+ empathy-account-widget-msn.glade \
+ empathy-account-widget-sip.glade \
+ empathy-account-widget-salut.glade \
+ empathy-account-widget-irc.glade \
+ empathy-account-widget-icq.glade \
+ empathy-account-widget-yahoo.glade \
+ empathy-account-widget-groupwise.glade \
+ empathy-account-widget-aim.glade \
+ empathy-spell-dialog.glade \
+ empathy-log-window.glade \
+ empathy-chat.glade \
+ empathy-new-message-dialog.glade
+
+empathy-gtk-marshal.list: $(libempathy_gtk_la_SOURCES) Makefile.am
+ ( cd $(srcdir) && \
+ sed -n -e 's/.*empathy_gtk_marshal_\([[:upper:][:digit:]]*__[[:upper:][:digit:]_]*\).*/\1/p' \
+ $(libempathy_gtk_la_SOURCES) ) \
+ | sed -e 's/__/:/' -e 'y/_/,/' | sort -u > $@.tmp
+ if cmp -s $@.tmp $@; then \
+ rm $@.tmp; \
+ else \
+ mv $@.tmp $@; \
+ fi
+
+%-marshal.h: %-marshal.list Makefile
+ $(GLIB_GENMARSHAL) --header --prefix=_$(subst -,_,$*)_marshal $< > $*-marshal.h
+
+%-marshal.c: %-marshal.list Makefile
+ echo "#include \"empathy-gtk-marshal.h\"" > $@ && \
+ $(GLIB_GENMARSHAL) --body --prefix=_$(subst -,_,$*)_marshal $< >> $*-marshal.c
+
+empathy-gtk-enum-types.h: stamp-empathy-gtk-enum-types.h
+ @true
+stamp-empathy-gtk-enum-types.h: Makefile $(libempathy_gtk_headers)
+ (cd $(srcdir) \
+ && glib-mkenums \
+ --fhead "#ifndef __LIBEMPATHY_GTK_ENUM_TYPES_H__\n" \
+ --fhead "#define __LIBEMPATHY_GTK_ENUM_TYPES_H__ 1\n\n" \
+ --fhead "#include <glib-object.h>\n\n" \
+ --fhead "G_BEGIN_DECLS\n\n" \
+ --ftail "G_END_DECLS\n\n" \
+ --ftail "#endif /* __LIBEMPATHY_GTK_ENUM_TYPES_H__ */\n" \
+ --fprod "#include <libempathy-gtk/@filename@>\n" \
+ --eprod "#define EMPATHY_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \
+ --eprod "GType @enum_name@_get_type (void);\n" \
+ $(libempathy_gtk_headers) ) > xgen-gth \
+ && (cmp -s xgen-gth empathy-gtk-enum-type.h || cp xgen-gth empathy-gtk-enum-types.h) \
+ && rm -f xgen-gth \
+ && echo timestamp > $(@F)
+
+empathy-gtk-enum-types.c: Makefile $(libempathy_gtk_headers)
+ (cd $(srcdir) \
+ && glib-mkenums \
+ --fhead "#include <config.h>\n" \
+ --fhead "#include <glib-object.h>\n" \
+ --fhead "#include \"empathy-gtk-enum-types.h\"\n\n" \
+ --fprod "\n/* enumerations from \"@filename@\" */" \
+ --vhead "static const G@Type@Value _@enum_name@_values[] = {" \
+ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+ --vtail " { 0, NULL, NULL }\n};\n\n" \
+ --vtail "GType\n@enum_name@_get_type (void)\n{\n" \
+ --vtail " static GType type = 0;\n\n" \
+ --vtail " if (!type)\n" \
+ --vtail " type = g_@type@_register_static (\"@EnumName@\", _@enum_name@_values);\n\n" \
+ --vtail " return type;\n}\n\n" \
+ $(libempathy_gtk_headers) ) > xgen-gtc \
+ && cp xgen-gtc $(@F) \
+ && rm -f xgen-gtc
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libempathy-gtk.pc
+
+EXTRA_DIST = \
+ $(glade_DATA)
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ stamp-empathy-gtk-enum-types.h
diff --git a/trunk/libempathy-gtk/empathy-account-chooser.c b/trunk/libempathy-gtk/empathy-account-chooser.c
new file mode 100644
index 000000000..13040b0dc
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-chooser.c
@@ -0,0 +1,678 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+#include <libmissioncontrol/mc-account-monitor.h>
+#include <libmissioncontrol/mission-control.h>
+
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-ui-utils.h"
+#include "empathy-account-chooser.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAccountChooser)
+typedef struct {
+ MissionControl *mc;
+ McAccountMonitor *monitor;
+ gboolean set_active_item;
+ gboolean has_all_option;
+ EmpathyAccountChooserFilterFunc filter;
+ gpointer filter_data;
+ gpointer token;
+} EmpathyAccountChooserPriv;
+
+typedef struct {
+ EmpathyAccountChooser *chooser;
+ McAccount *account;
+ gboolean set;
+} SetAccountData;
+
+enum {
+ COL_ACCOUNT_IMAGE,
+ COL_ACCOUNT_TEXT,
+ COL_ACCOUNT_ENABLED, /* Usually tied to connected state */
+ COL_ACCOUNT_POINTER,
+ COL_ACCOUNT_COUNT
+};
+
+static void account_chooser_finalize (GObject *object);
+static void account_chooser_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void account_chooser_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void account_chooser_setup (EmpathyAccountChooser *chooser);
+static void account_chooser_account_created_cb (McAccountMonitor *monitor,
+ const gchar *unique_name,
+ EmpathyAccountChooser *chooser);
+static void account_chooser_account_add_foreach (McAccount *account,
+ EmpathyAccountChooser *chooser);
+static void account_chooser_account_deleted_cb (McAccountMonitor *monitor,
+ const gchar *unique_name,
+ EmpathyAccountChooser *chooser);
+static void account_chooser_account_remove_foreach (McAccount *account,
+ EmpathyAccountChooser *chooser);
+static void account_chooser_update_iter (EmpathyAccountChooser *chooser,
+ GtkTreeIter *iter);
+static void account_chooser_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyAccountChooser *chooser);
+static gboolean account_chooser_separator_func (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ EmpathyAccountChooser *chooser);
+static gboolean account_chooser_set_account_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ SetAccountData *data);
+
+enum {
+ PROP_0,
+ PROP_HAS_ALL_OPTION,
+};
+
+G_DEFINE_TYPE (EmpathyAccountChooser, empathy_account_chooser, GTK_TYPE_COMBO_BOX);
+
+static void
+empathy_account_chooser_class_init (EmpathyAccountChooserClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = account_chooser_finalize;
+ object_class->get_property = account_chooser_get_property;
+ object_class->set_property = account_chooser_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_HAS_ALL_OPTION,
+ g_param_spec_boolean ("has-all-option",
+ "Has All Option",
+ "Have a separate option in the list to mean ALL accounts",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof (EmpathyAccountChooserPriv));
+}
+
+static void
+empathy_account_chooser_init (EmpathyAccountChooser *chooser)
+{
+ EmpathyAccountChooserPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (chooser,
+ EMPATHY_TYPE_ACCOUNT_CHOOSER, EmpathyAccountChooserPriv);
+
+ chooser->priv = priv;
+ priv->set_active_item = FALSE;
+ priv->filter = NULL;
+ priv->filter_data = NULL;
+}
+
+static void
+account_chooser_finalize (GObject *object)
+{
+ EmpathyAccountChooser *chooser;
+ EmpathyAccountChooserPriv *priv;
+
+ chooser = EMPATHY_ACCOUNT_CHOOSER (object);
+ priv = GET_PRIV (object);
+
+ g_signal_handlers_disconnect_by_func (priv->monitor,
+ account_chooser_account_created_cb,
+ chooser);
+ g_signal_handlers_disconnect_by_func (priv->monitor,
+ account_chooser_account_deleted_cb,
+ chooser);
+ empathy_disconnect_account_status_changed (priv->token);
+ g_object_unref (priv->mc);
+ g_object_unref (priv->monitor);
+
+ G_OBJECT_CLASS (empathy_account_chooser_parent_class)->finalize (object);
+}
+
+static void
+account_chooser_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyAccountChooserPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_HAS_ALL_OPTION:
+ g_value_set_boolean (value, priv->has_all_option);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+account_chooser_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyAccountChooserPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_HAS_ALL_OPTION:
+ empathy_account_chooser_set_has_all_option (EMPATHY_ACCOUNT_CHOOSER (object),
+ g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+GtkWidget *
+empathy_account_chooser_new (void)
+{
+ EmpathyAccountChooserPriv *priv;
+ McAccountMonitor *monitor;
+ GtkWidget *chooser;
+
+ monitor = mc_account_monitor_new ();
+ chooser = g_object_new (EMPATHY_TYPE_ACCOUNT_CHOOSER, NULL);
+
+ priv = GET_PRIV (chooser);
+
+ priv->mc = empathy_mission_control_new ();
+ priv->monitor = mc_account_monitor_new ();
+
+ g_signal_connect (priv->monitor, "account-created",
+ G_CALLBACK (account_chooser_account_created_cb),
+ chooser);
+ g_signal_connect (priv->monitor, "account-deleted",
+ G_CALLBACK (account_chooser_account_deleted_cb),
+ chooser);
+ priv->token = empathy_connect_to_account_status_changed (priv->mc,
+ G_CALLBACK (account_chooser_status_changed_cb),
+ chooser, NULL);
+
+ account_chooser_setup (EMPATHY_ACCOUNT_CHOOSER (chooser));
+
+ return chooser;
+}
+
+McAccount *
+empathy_account_chooser_get_account (EmpathyAccountChooser *chooser)
+{
+ EmpathyAccountChooserPriv *priv;
+ McAccount *account;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (chooser), NULL);
+
+ priv = GET_PRIV (chooser);
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (chooser));
+ gtk_combo_box_get_active_iter (GTK_COMBO_BOX (chooser), &iter);
+
+ gtk_tree_model_get (model, &iter, COL_ACCOUNT_POINTER, &account, -1);
+
+ return account;
+}
+
+gboolean
+empathy_account_chooser_set_account (EmpathyAccountChooser *chooser,
+ McAccount *account)
+{
+ GtkComboBox *combobox;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ SetAccountData data;
+
+ g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (chooser), FALSE);
+
+ combobox = GTK_COMBO_BOX (chooser);
+ model = gtk_combo_box_get_model (combobox);
+ gtk_combo_box_get_active_iter (combobox, &iter);
+
+ data.chooser = chooser;
+ data.account = account;
+
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc) account_chooser_set_account_foreach,
+ &data);
+
+ return data.set;
+}
+
+gboolean
+empathy_account_chooser_get_has_all_option (EmpathyAccountChooser *chooser)
+{
+ EmpathyAccountChooserPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (chooser), FALSE);
+
+ priv = GET_PRIV (chooser);
+
+ return priv->has_all_option;
+}
+
+void
+empathy_account_chooser_set_has_all_option (EmpathyAccountChooser *chooser,
+ gboolean has_all_option)
+{
+ EmpathyAccountChooserPriv *priv;
+ GtkComboBox *combobox;
+ GtkListStore *store;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ g_return_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (chooser));
+
+ priv = GET_PRIV (chooser);
+
+ if (priv->has_all_option == has_all_option) {
+ return;
+ }
+
+ combobox = GTK_COMBO_BOX (chooser);
+ model = gtk_combo_box_get_model (combobox);
+ store = GTK_LIST_STORE (model);
+
+ priv->has_all_option = has_all_option;
+
+ /*
+ * The first 2 options are the ALL and separator
+ */
+
+ if (has_all_option) {
+ gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (chooser),
+ (GtkTreeViewRowSeparatorFunc)
+ account_chooser_separator_func,
+ chooser,
+ NULL);
+
+ gtk_list_store_prepend (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_ACCOUNT_TEXT, NULL,
+ COL_ACCOUNT_ENABLED, TRUE,
+ COL_ACCOUNT_POINTER, NULL,
+ -1);
+
+ gtk_list_store_prepend (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_ACCOUNT_TEXT, _("All"),
+ COL_ACCOUNT_ENABLED, TRUE,
+ COL_ACCOUNT_POINTER, NULL,
+ -1);
+ } else {
+ if (gtk_tree_model_get_iter_first (model, &iter)) {
+ if (gtk_list_store_remove (GTK_LIST_STORE (model), &iter)) {
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+ }
+ }
+
+ gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (chooser),
+ (GtkTreeViewRowSeparatorFunc)
+ NULL,
+ NULL,
+ NULL);
+ }
+
+ g_object_notify (G_OBJECT (chooser), "has-all-option");
+}
+
+static void
+account_chooser_setup (EmpathyAccountChooser *chooser)
+{
+ EmpathyAccountChooserPriv *priv;
+ GList *accounts;
+ GtkListStore *store;
+ GtkCellRenderer *renderer;
+ GtkComboBox *combobox;
+
+ priv = GET_PRIV (chooser);
+
+ /* Set up combo box with new store */
+ combobox = GTK_COMBO_BOX (chooser);
+
+ gtk_cell_layout_clear (GTK_CELL_LAYOUT (combobox));
+
+ store = gtk_list_store_new (COL_ACCOUNT_COUNT,
+ G_TYPE_STRING, /* Image */
+ G_TYPE_STRING, /* Name */
+ G_TYPE_BOOLEAN, /* Enabled */
+ MC_TYPE_ACCOUNT);
+
+ gtk_combo_box_set_model (combobox, GTK_TREE_MODEL (store));
+
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, FALSE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
+ "icon-name", COL_ACCOUNT_IMAGE,
+ "sensitive", COL_ACCOUNT_ENABLED,
+ NULL);
+ g_object_set (renderer, "stock-size", GTK_ICON_SIZE_BUTTON, NULL);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
+ "text", COL_ACCOUNT_TEXT,
+ "sensitive", COL_ACCOUNT_ENABLED,
+ NULL);
+
+ /* Populate accounts */
+ accounts = mc_accounts_list ();
+ g_list_foreach (accounts,
+ (GFunc) account_chooser_account_add_foreach,
+ chooser);
+
+ mc_accounts_list_free (accounts);
+ g_object_unref (store);
+}
+
+static void
+account_chooser_account_created_cb (McAccountMonitor *monitor,
+ const gchar *unique_name,
+ EmpathyAccountChooser *chooser)
+{
+ McAccount *account;
+
+ account = mc_account_lookup (unique_name);
+ account_chooser_account_add_foreach (account, chooser);
+ g_object_unref (account);
+}
+
+static void
+account_chooser_account_add_foreach (McAccount *account,
+ EmpathyAccountChooser *chooser)
+{
+ GtkListStore *store;
+ GtkComboBox *combobox;
+ GtkTreeIter iter;
+ gint position;
+
+ combobox = GTK_COMBO_BOX (chooser);
+ store = GTK_LIST_STORE (gtk_combo_box_get_model (combobox));
+
+ position = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL);
+ gtk_list_store_insert_with_values (store, &iter, position,
+ COL_ACCOUNT_POINTER, account,
+ -1);
+ account_chooser_update_iter (chooser, &iter);
+}
+
+static void
+account_chooser_account_deleted_cb (McAccountMonitor *monitor,
+ const gchar *unique_name,
+ EmpathyAccountChooser *chooser)
+{
+ McAccount *account;
+
+ account = mc_account_lookup (unique_name);
+ account_chooser_account_remove_foreach (account, chooser);
+ g_object_unref (account);
+}
+
+typedef struct {
+ McAccount *account;
+ GtkTreeIter *iter;
+ gboolean found;
+} FindAccountData;
+
+static gboolean
+account_chooser_find_account_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+ FindAccountData *data = user_data;
+ McAccount *account;
+
+ gtk_tree_model_get (model, iter, COL_ACCOUNT_POINTER, &account, -1);
+
+ if (empathy_account_equal (account, data->account)) {
+ data->found = TRUE;
+ *(data->iter) = *iter;
+ g_object_unref (account);
+
+ return TRUE;
+ }
+
+ g_object_unref (account);
+
+ return FALSE;
+}
+
+static gboolean
+account_chooser_find_account (EmpathyAccountChooser *chooser,
+ McAccount *account,
+ GtkTreeIter *iter)
+{
+ GtkListStore *store;
+ GtkComboBox *combobox;
+ FindAccountData data;
+
+ combobox = GTK_COMBO_BOX (chooser);
+ store = GTK_LIST_STORE (gtk_combo_box_get_model (combobox));
+
+ data.account = account;
+ data.iter = iter;
+ gtk_tree_model_foreach (GTK_TREE_MODEL (store),
+ account_chooser_find_account_foreach,
+ &data);
+
+ return data.found;
+}
+
+static void
+account_chooser_account_remove_foreach (McAccount *account,
+ EmpathyAccountChooser *chooser)
+{
+ GtkListStore *store;
+ GtkComboBox *combobox;
+ GtkTreeIter iter;
+
+ combobox = GTK_COMBO_BOX (chooser);
+ store = GTK_LIST_STORE (gtk_combo_box_get_model (combobox));
+
+ if (account_chooser_find_account (chooser, account, &iter)) {
+ gtk_list_store_remove (store, &iter);
+ }
+}
+
+static void
+account_chooser_update_iter (EmpathyAccountChooser *chooser,
+ GtkTreeIter *iter)
+{
+ EmpathyAccountChooserPriv *priv;
+ GtkListStore *store;
+ GtkComboBox *combobox;
+ McAccount *account;
+ const gchar *icon_name;
+ gboolean is_enabled = TRUE;
+
+ priv = GET_PRIV (chooser);
+
+ combobox = GTK_COMBO_BOX (chooser);
+ store = GTK_LIST_STORE (gtk_combo_box_get_model (combobox));
+
+ gtk_tree_model_get (GTK_TREE_MODEL (store), iter,
+ COL_ACCOUNT_POINTER, &account,
+ -1);
+
+ icon_name = empathy_icon_name_from_account (account);
+ if (priv->filter) {
+ is_enabled = priv->filter (account, priv->filter_data);
+ }
+
+ gtk_list_store_set (store, iter,
+ COL_ACCOUNT_IMAGE, icon_name,
+ COL_ACCOUNT_TEXT, mc_account_get_display_name (account),
+ COL_ACCOUNT_ENABLED, is_enabled,
+ -1);
+
+ /* set first connected account as active account */
+ if (priv->set_active_item == FALSE && is_enabled) {
+ priv->set_active_item = TRUE;
+ gtk_combo_box_set_active_iter (combobox, iter);
+ }
+
+ g_object_unref (account);
+}
+
+static void
+account_chooser_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyAccountChooser *chooser)
+{
+ McAccount *account;
+ GtkTreeIter iter;
+
+ account = mc_account_lookup (unique_name);
+ if (account_chooser_find_account (chooser, account, &iter)) {
+ account_chooser_update_iter (chooser, &iter);
+ }
+ g_object_unref (account);
+}
+
+static gboolean
+account_chooser_separator_func (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ EmpathyAccountChooser *chooser)
+{
+ EmpathyAccountChooserPriv *priv;
+ gchar *text;
+ gboolean is_separator;
+
+ priv = GET_PRIV (chooser);
+
+ if (!priv->has_all_option) {
+ return FALSE;
+ }
+
+ gtk_tree_model_get (model, iter, COL_ACCOUNT_TEXT, &text, -1);
+ is_separator = text == NULL;
+ g_free (text);
+
+ return is_separator;
+}
+
+static gboolean
+account_chooser_set_account_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ SetAccountData *data)
+{
+ McAccount *account;
+ gboolean equal;
+
+ gtk_tree_model_get (model, iter, COL_ACCOUNT_POINTER, &account, -1);
+
+ /* Special case so we can make it possible to select the All option */
+ if ((data->account == NULL) != (account == NULL)) {
+ equal = FALSE;
+ }
+ else if (data->account == account) {
+ equal = TRUE;
+ } else {
+ equal = empathy_account_equal (data->account, account);
+ }
+
+ if (account) {
+ g_object_unref (account);
+ }
+
+ if (equal) {
+ GtkComboBox *combobox;
+
+ combobox = GTK_COMBO_BOX (data->chooser);
+ gtk_combo_box_set_active_iter (combobox, iter);
+
+ data->set = TRUE;
+ }
+
+ return equal;
+}
+
+static gboolean
+account_chooser_filter_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer chooser)
+{
+ account_chooser_update_iter (chooser, iter);
+ return FALSE;
+}
+
+void
+empathy_account_chooser_set_filter (EmpathyAccountChooser *chooser,
+ EmpathyAccountChooserFilterFunc filter,
+ gpointer user_data)
+{
+ EmpathyAccountChooserPriv *priv;
+ GtkTreeModel *model;
+
+ g_return_if_fail (EMPATHY_IS_ACCOUNT_CHOOSER (chooser));
+
+ priv = GET_PRIV (chooser);
+
+ priv->filter = filter;
+ priv->filter_data = user_data;
+
+ /* Refilter existing data */
+ priv->set_active_item = FALSE;
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (chooser));
+ gtk_tree_model_foreach (model, account_chooser_filter_foreach, chooser);
+}
+
+gboolean
+empathy_account_chooser_filter_is_connected (McAccount *account,
+ gpointer user_data)
+{
+ MissionControl *mc;
+ TpConnectionStatus status;
+
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), FALSE);
+
+ mc = empathy_mission_control_new ();
+ status = mission_control_get_connection_status (mc, account, NULL);
+ g_object_unref (mc);
+
+ return status == TP_CONNECTION_STATUS_CONNECTED;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-account-chooser.h b/trunk/libempathy-gtk/empathy-account-chooser.h
new file mode 100644
index 000000000..c15923bc3
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-chooser.h
@@ -0,0 +1,74 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_ACCOUNT_CHOOSER_H__
+#define __EMPATHY_ACCOUNT_CHOOSER_H__
+
+#include <gtk/gtkcombobox.h>
+
+#include <libmissioncontrol/mc-account.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_ACCOUNT_CHOOSER (empathy_account_chooser_get_type ())
+#define EMPATHY_ACCOUNT_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_ACCOUNT_CHOOSER, EmpathyAccountChooser))
+#define EMPATHY_ACCOUNT_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_ACCOUNT_CHOOSER, EmpathyAccountChooserClass))
+#define EMPATHY_IS_ACCOUNT_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_ACCOUNT_CHOOSER))
+#define EMPATHY_IS_ACCOUNT_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_ACCOUNT_CHOOSER))
+#define EMPATHY_ACCOUNT_CHOOSER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_ACCOUNT_CHOOSER, EmpathyAccountChooserClass))
+
+typedef gboolean (* EmpathyAccountChooserFilterFunc) (McAccount *account,
+ gpointer user_data);
+
+
+typedef struct _EmpathyAccountChooser EmpathyAccountChooser;
+typedef struct _EmpathyAccountChooserClass EmpathyAccountChooserClass;
+
+struct _EmpathyAccountChooser {
+ GtkComboBox parent;
+ gpointer priv;
+};
+
+struct _EmpathyAccountChooserClass {
+ GtkComboBoxClass parent_class;
+};
+
+GType empathy_account_chooser_get_type (void) G_GNUC_CONST;
+GtkWidget * empathy_account_chooser_new (void);
+McAccount * empathy_account_chooser_get_account (EmpathyAccountChooser *chooser);
+gboolean empathy_account_chooser_set_account (EmpathyAccountChooser *chooser,
+ McAccount *account);
+gboolean empathy_account_chooser_get_has_all_option (EmpathyAccountChooser *chooser);
+void empathy_account_chooser_set_has_all_option (EmpathyAccountChooser *chooser,
+ gboolean has_all_option);
+void empathy_account_chooser_set_filter (EmpathyAccountChooser *chooser,
+ EmpathyAccountChooserFilterFunc filter,
+ gpointer user_data);
+gboolean empathy_account_chooser_filter_is_connected(McAccount *account,
+ gpointer user_data);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_ACCOUNT_CHOOSER_H__ */
+
diff --git a/trunk/libempathy-gtk/empathy-account-widget-aim.glade b/trunk/libempathy-gtk/empathy-account-widget-aim.glade
new file mode 100644
index 000000000..9ce1a5672
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-aim.glade
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="account_aim_settings">
+ <property name="visible">True</property>
+ <property name="title">ICQ account settings</property>
+ <property name="resizable">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_aim_settings">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table_common_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label_password">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Pass_word:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_password</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_screenname">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Screen _Name:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_uin</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_forget">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Forget password and clear the entry.</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkImage" id="image834">
+ <property name="visible">True</property>
+ <property name="stock">gtk-clear</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_uin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkExpander" id="expander1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkTable" id="table_advanced_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkSpinButton" id="spinbutton_port">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">5222 0 65556 1 10 10</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_port">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Port:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">spinbutton_port</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_server">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_server">
+ <property name="visible">True</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>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-account-widget-generic.glade b/trunk/libempathy-gtk/empathy-account-widget-generic.glade
new file mode 100644
index 000000000..e0ac01a98
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-generic.glade
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="account_generic_settings">
+ <property name="visible">True</property>
+ <property name="title">generic account settings</property>
+ <property name="resizable">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_generic_settings">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table_common_settings">
+ <property name="visible">True</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkExpander" id="expander1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <child>
+ <widget class="GtkViewport" id="viewport1">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="resize_mode">GTK_RESIZE_QUEUE</property>
+ <child>
+ <widget class="GtkTable" id="table_advanced_settings">
+ <property name="visible">True</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-account-widget-groupwise.glade b/trunk/libempathy-gtk/empathy-account-widget-groupwise.glade
new file mode 100644
index 000000000..a5feb43e9
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-groupwise.glade
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="account_groupwise_settings">
+ <property name="visible">True</property>
+ <property name="title">groupwise account settings</property>
+ <property name="resizable">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_groupwise_settings">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table_common_groupwise_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkEntry" id="entry_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_forget">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Forget password and clear the entry.</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="stock">gtk-clear</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_password">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Pass_word:</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_id">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Login I_D:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_id</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_id">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkExpander" id="expander1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkTable" id="table_advanced_groupwise_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label_port">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Port:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">spinbutton_port</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_server">
+ <property name="visible">True</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>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_server">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="spinbutton_port">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="adjustment">0 0 65536 1 10 10</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-account-widget-icq.glade b/trunk/libempathy-gtk/empathy-account-widget-icq.glade
new file mode 100644
index 000000000..002088f1e
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-icq.glade
@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="account_icq_settings">
+ <property name="visible">True</property>
+ <property name="title">ICQ account settings</property>
+ <property name="resizable">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_icq_settings">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table_common_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label_password">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Pass_word:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_password</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_uin">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">ICQ _UIN:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_uin</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_forget">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Forget password and clear the entry.</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkImage" id="image834">
+ <property name="visible">True</property>
+ <property name="stock">gtk-clear</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_uin">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkExpander" id="expander1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkTable" id="table_advanced_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label_charset">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Charset:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_charset</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="spinbutton_port">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">5222 0 65556 1 10 10</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_server">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_port">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Port:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">spinbutton_port</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_server">
+ <property name="visible">True</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>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_charset">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-account-widget-irc.c b/trunk/libempathy-gtk/empathy-account-widget-irc.c
new file mode 100644
index 000000000..242085ccc
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-irc.c
@@ -0,0 +1,514 @@
+/*
+ * Copyright (C) 2007-2008 Guillaume Desmottes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <gdesmott@gnome.org>
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mc-protocol.h>
+
+#include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-irc-network-manager.h>
+
+#include "empathy-irc-network-dialog.h"
+#include "empathy-account-widget.h"
+#include "empathy-account-widget-irc.h"
+#include "empathy-ui-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT | EMPATHY_DEBUG_IRC
+#include <libempathy/empathy-debug.h>
+
+#define IRC_NETWORKS_FILENAME "irc-networks.xml"
+
+typedef struct {
+ McAccount *account;
+ EmpathyIrcNetworkManager *network_manager;
+
+ GtkWidget *vbox_settings;
+
+ GtkWidget *combobox_network;
+ GtkWidget *button_add_network;
+ GtkWidget *button_network;
+ GtkWidget *button_remove;
+} EmpathyAccountWidgetIrc;
+
+enum {
+ COL_NETWORK_OBJ,
+ COL_NETWORK_NAME,
+};
+
+static void
+account_widget_irc_destroy_cb (GtkWidget *widget,
+ EmpathyAccountWidgetIrc *settings)
+{
+ g_object_unref (settings->network_manager);
+ g_object_unref (settings->account);
+ g_slice_free (EmpathyAccountWidgetIrc, settings);
+}
+
+static void
+unset_server_params (EmpathyAccountWidgetIrc *settings)
+{
+ DEBUG ("Unset server, port and use-ssl");
+ mc_account_unset_param (settings->account, "server");
+ mc_account_unset_param (settings->account, "port");
+ mc_account_unset_param (settings->account, "use-ssl");
+}
+
+static void
+update_server_params (EmpathyAccountWidgetIrc *settings)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ EmpathyIrcNetwork *network;
+ GSList *servers;
+ gchar *charset;
+
+ if (!gtk_combo_box_get_active_iter (
+ GTK_COMBO_BOX (settings->combobox_network), &iter))
+ {
+ unset_server_params (settings);
+ return;
+ }
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (settings->combobox_network));
+ gtk_tree_model_get (model, &iter, COL_NETWORK_OBJ, &network, -1);
+
+ g_assert (network != NULL);
+
+ g_object_get (network, "charset", &charset, NULL);
+ DEBUG ("Setting charset to %s", charset);
+ mc_account_set_param_string (settings->account, "charset", charset);
+ g_free (charset);
+
+ servers = empathy_irc_network_get_servers (network);
+ if (g_slist_length (servers) > 0)
+ {
+ /* set the first server as CM server */
+ EmpathyIrcServer *server = servers->data;
+ gchar *address;
+ guint port;
+ gboolean ssl;
+
+ g_object_get (server,
+ "address", &address,
+ "port", &port,
+ "ssl", &ssl,
+ NULL);
+
+ DEBUG ("Setting server to %s", address);
+ mc_account_set_param_string (settings->account, "server", address);
+ DEBUG ("Setting port to %u", port);
+ mc_account_set_param_int (settings->account, "port", port);
+ DEBUG ("Setting use-ssl to %s", ssl ? "TRUE": "FALSE" );
+ mc_account_set_param_boolean (settings->account, "use-ssl", ssl);
+
+ g_free (address);
+ }
+ else
+ {
+ /* No server. Unset values */
+ unset_server_params (settings);
+ }
+
+ g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
+ g_slist_free (servers);
+ g_object_unref (network);
+}
+
+static void
+irc_network_dialog_destroy_cb (GtkWidget *widget,
+ EmpathyAccountWidgetIrc *settings)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ EmpathyIrcNetwork *network;
+ gchar *name;
+
+ /* name could be changed */
+ gtk_combo_box_get_active_iter (GTK_COMBO_BOX (settings->combobox_network),
+ &iter);
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (settings->combobox_network));
+ gtk_tree_model_get (model, &iter, COL_NETWORK_OBJ, &network, -1);
+
+ g_object_get (network, "name", &name, NULL);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ COL_NETWORK_NAME, name, -1);
+
+ update_server_params (settings);
+
+ g_object_unref (network);
+ g_free (name);
+}
+
+static void
+display_irc_network_dialog (EmpathyAccountWidgetIrc *settings,
+ EmpathyIrcNetwork *network)
+{
+ GtkWindow *window;
+ GtkWidget *dialog;
+
+ window = empathy_get_toplevel_window (settings->vbox_settings);
+ dialog = empathy_irc_network_dialog_show (network, GTK_WIDGET (window));
+ g_signal_connect (dialog, "destroy",
+ G_CALLBACK (irc_network_dialog_destroy_cb), settings);
+}
+
+static void
+account_widget_irc_button_edit_network_clicked_cb (
+ GtkWidget *button,
+ EmpathyAccountWidgetIrc *settings)
+{
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ EmpathyIrcNetwork *network;
+
+ gtk_combo_box_get_active_iter (GTK_COMBO_BOX (settings->combobox_network),
+ &iter);
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (settings->combobox_network));
+ gtk_tree_model_get (model, &iter, COL_NETWORK_OBJ, &network, -1);
+
+ g_assert (network != NULL);
+
+ display_irc_network_dialog (settings, network);
+
+ g_object_unref (network);
+}
+
+static void
+account_widget_irc_button_remove_clicked_cb (GtkWidget *button,
+ EmpathyAccountWidgetIrc *settings)
+{
+ EmpathyIrcNetwork *network;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gchar *name;
+
+ gtk_combo_box_get_active_iter (GTK_COMBO_BOX (settings->combobox_network),
+ &iter);
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (settings->combobox_network));
+ gtk_tree_model_get (model, &iter, COL_NETWORK_OBJ, &network, -1);
+
+ g_assert (network != NULL);
+
+ g_object_get (network, "name", &name, NULL);
+ DEBUG ("Remove network %s", name);
+
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+ empathy_irc_network_manager_remove (settings->network_manager, network);
+
+ /* Select the first network */
+ if (gtk_tree_model_get_iter_first (model, &iter))
+ {
+ gtk_combo_box_set_active_iter (
+ GTK_COMBO_BOX (settings->combobox_network), &iter);
+ }
+
+ g_free (name);
+ g_object_unref (network);
+}
+
+static void
+account_widget_irc_button_add_network_clicked_cb (GtkWidget *button,
+ EmpathyAccountWidgetIrc *settings)
+{
+ EmpathyIrcNetwork *network;
+ GtkTreeModel *model;
+ GtkListStore *store;
+ gchar *name;
+ GtkTreeIter iter;
+
+ network = empathy_irc_network_new (_("New Network"));
+ empathy_irc_network_manager_add (settings->network_manager, network);
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (settings->combobox_network));
+ store = GTK_LIST_STORE (model);
+
+ g_object_get (network, "name", &name, NULL);
+
+ gtk_list_store_insert_with_values (store, &iter, -1,
+ COL_NETWORK_OBJ, network,
+ COL_NETWORK_NAME, name,
+ -1);
+
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (settings->combobox_network),
+ &iter);
+
+ display_irc_network_dialog (settings, network);
+
+ g_free (name);
+ g_object_unref (network);
+}
+
+static void
+account_widget_irc_combobox_network_changed_cb (GtkWidget *combobox,
+ EmpathyAccountWidgetIrc *settings)
+{
+ update_server_params (settings);
+}
+
+static void
+fill_networks_model (EmpathyAccountWidgetIrc *settings,
+ EmpathyIrcNetwork *network_to_select)
+{
+ GSList *networks, *l;
+ GtkTreeModel *model;
+ GtkListStore *store;
+
+ networks = empathy_irc_network_manager_get_networks (
+ settings->network_manager);
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (settings->combobox_network));
+ store = GTK_LIST_STORE (model);
+
+ for (l = networks; l != NULL; l = g_slist_next (l))
+ {
+ gchar *name;
+ EmpathyIrcNetwork *network = l->data;
+ GtkTreeIter iter;
+
+ g_object_get (network, "name", &name, NULL);
+
+ gtk_list_store_insert_with_values (store, &iter, -1,
+ COL_NETWORK_OBJ, network,
+ COL_NETWORK_NAME, name,
+ -1);
+
+ if (network == network_to_select)
+ {
+ gtk_combo_box_set_active_iter (
+ GTK_COMBO_BOX (settings->combobox_network), &iter);
+ }
+
+ g_free (name);
+ g_object_unref (network);
+ }
+
+ if (network_to_select == NULL)
+ {
+ /* Select the first network */
+ GtkTreeIter iter;
+
+ if (gtk_tree_model_get_iter_first (model, &iter))
+ {
+ gtk_combo_box_set_active_iter (
+ GTK_COMBO_BOX (settings->combobox_network), &iter);
+
+ update_server_params (settings);
+ }
+ }
+
+ g_slist_free (networks);
+}
+
+static void
+account_widget_irc_setup (EmpathyAccountWidgetIrc *settings)
+{
+ gchar *nick = NULL;
+ gchar *fullname = NULL;
+ gchar *server = NULL;
+ gint port = 6667;
+ gchar *charset;
+ gboolean ssl = FALSE;
+ EmpathyIrcNetwork *network = NULL;
+
+ mc_account_get_param_string (settings->account, "account", &nick);
+ mc_account_get_param_string (settings->account, "fullname", &fullname);
+ mc_account_get_param_string (settings->account, "server", &server);
+ mc_account_get_param_string (settings->account, "charset", &charset);
+ mc_account_get_param_int (settings->account, "port", &port);
+ mc_account_get_param_boolean (settings->account, "use-ssl", &ssl);
+
+ if (!nick)
+ {
+ nick = g_strdup (g_get_user_name ());
+ mc_account_set_param_string (settings->account, "account", nick);
+ }
+
+ if (!fullname)
+ {
+ fullname = g_strdup (g_get_real_name ());
+ if (!fullname)
+ {
+ fullname = g_strdup (nick);
+ }
+ mc_account_set_param_string (settings->account, "fullname", fullname);
+ }
+
+ if (server != NULL)
+ {
+ GtkListStore *store;
+
+ network = empathy_irc_network_manager_find_network_by_address (
+ settings->network_manager, server);
+
+
+ store = GTK_LIST_STORE (gtk_combo_box_get_model (
+ GTK_COMBO_BOX (settings->combobox_network)));
+
+ if (network != NULL)
+ {
+ gchar *name;
+
+ g_object_set (network, "charset", charset, NULL);
+
+ g_object_get (network, "name", &name, NULL);
+ DEBUG ("Account use network %s", name);
+
+ g_free (name);
+ }
+ else
+ {
+ /* We don't have this network. Let's create it */
+ EmpathyIrcServer *srv;
+ GtkTreeIter iter;
+
+ DEBUG ("Create a network %s", server);
+ network = empathy_irc_network_new (server);
+ srv = empathy_irc_server_new (server, port, ssl);
+
+ empathy_irc_network_append_server (network, srv);
+ empathy_irc_network_manager_add (settings->network_manager, network);
+
+ gtk_list_store_insert_with_values (store, &iter, -1,
+ COL_NETWORK_OBJ, network,
+ COL_NETWORK_NAME, server,
+ -1);
+
+ gtk_combo_box_set_active_iter (
+ GTK_COMBO_BOX (settings->combobox_network), &iter);
+
+ g_object_unref (srv);
+ g_object_unref (network);
+ }
+ }
+
+
+ fill_networks_model (settings, network);
+
+ g_free (nick);
+ g_free (fullname);
+ g_free (server);
+ g_free (charset);
+}
+
+/**
+ * empathy_account_widget_irc_new:
+ * @account: the #McAccount to configure
+ *
+ * Creates a new IRC account widget to configure a given #McAccount
+ *
+ * Returns: The toplevel container of the configuration widget
+ */
+GtkWidget *
+empathy_account_widget_irc_new (McAccount *account)
+{
+ EmpathyAccountWidgetIrc *settings;
+ gchar *dir, *user_file_with_path, *global_file_with_path;
+ GladeXML *glade;
+ GtkListStore *store;
+ GtkCellRenderer *renderer;
+ gchar *filename;
+
+ settings = g_slice_new0 (EmpathyAccountWidgetIrc);
+ settings->account = g_object_ref (account);
+
+ dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+ g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
+ user_file_with_path = g_build_filename (dir, IRC_NETWORKS_FILENAME, NULL);
+ g_free (dir);
+
+ global_file_with_path = g_build_filename (g_getenv ("EMPATHY_SRCDIR"),
+ "libempathy-gtk", IRC_NETWORKS_FILENAME, NULL);
+ if (!g_file_test (global_file_with_path, G_FILE_TEST_EXISTS))
+ {
+ g_free (global_file_with_path);
+ global_file_with_path = g_build_filename (DATADIR, "empathy",
+ IRC_NETWORKS_FILENAME, NULL);
+ }
+
+ settings->network_manager = empathy_irc_network_manager_new (
+ global_file_with_path,
+ user_file_with_path);
+
+ g_free (global_file_with_path);
+ g_free (user_file_with_path);
+
+ filename = empathy_file_lookup ("empathy-account-widget-irc.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "vbox_irc_settings",
+ NULL,
+ "vbox_irc_settings", &settings->vbox_settings,
+ "combobox_network", &settings->combobox_network,
+ "button_network", &settings->button_network,
+ "button_add_network", &settings->button_add_network,
+ "button_remove", &settings->button_remove,
+ NULL);
+ g_free (filename);
+
+ /* Fill the networks combobox */
+ store = gtk_list_store_new (2, G_TYPE_OBJECT, G_TYPE_STRING);
+
+ gtk_cell_layout_clear (GTK_CELL_LAYOUT (settings->combobox_network));
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (settings->combobox_network),
+ renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (settings->combobox_network),
+ renderer,
+ "text", COL_NETWORK_NAME,
+ NULL);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
+ COL_NETWORK_NAME,
+ GTK_SORT_ASCENDING);
+
+ gtk_combo_box_set_model (GTK_COMBO_BOX (settings->combobox_network),
+ GTK_TREE_MODEL (store));
+ g_object_unref (store);
+
+ account_widget_irc_setup (settings);
+
+ empathy_account_widget_handle_params (account, glade,
+ "entry_nick", "account",
+ "entry_fullname", "fullname",
+ "entry_password", "password",
+ "entry_quit_message", "quit-message",
+ NULL);
+
+ empathy_glade_connect (glade, settings,
+ "vbox_irc_settings", "destroy", account_widget_irc_destroy_cb,
+ "button_network", "clicked", account_widget_irc_button_edit_network_clicked_cb,
+ "button_add_network", "clicked", account_widget_irc_button_add_network_clicked_cb,
+ "button_remove", "clicked", account_widget_irc_button_remove_clicked_cb,
+ "combobox_network", "changed", account_widget_irc_combobox_network_changed_cb,
+ NULL);
+
+ g_object_unref (glade);
+
+ return settings->vbox_settings;
+}
diff --git a/trunk/libempathy-gtk/empathy-account-widget-irc.glade b/trunk/libempathy-gtk/empathy-account-widget-irc.glade
new file mode 100644
index 000000000..3e9899f6a
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-irc.glade
@@ -0,0 +1,449 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--Generated with glade3 3.4.1 on Wed Mar 5 15:39:45 2008 -->
+<glade-interface>
+ <widget class="GtkWindow" id="account_irc_settings">
+ <property name="title">irc account settings</property>
+ <property name="resizable">False</property>
+ <child>
+ <widget class="GtkTable" id="vbox_irc_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">5</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkEntry" id="entry_quit_message">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_quit_message">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Quit message:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_fullname">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_password">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Password:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_fullname">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Real name:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_nick">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_nick">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Nickname:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_nick</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox174">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkComboBox" id="combobox_network">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes"></property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_add_network">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Create a new IRC network</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="stock">gtk-add</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_network">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Edit the selected IRC network</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkImage" id="image834">
+ <property name="visible">True</property>
+ <property name="stock">gtk-edit</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_remove">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Remove the selected IRC network</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkImage" id="image835">
+ <property name="visible">True</property>
+ <property name="stock">gtk-remove</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_network">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Network:</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <widget class="GtkDialog" id="irc_network_dialog">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Network</property>
+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+ <property name="icon_name">gtk-edit</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="skip_pager_hint">True</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox10">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkFrame" id="frame14">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment28">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkTable" id="table14">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label_network">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Network:</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_charset">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Charset:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_network">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBox" id="combobox_charset">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_network">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Network&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame15">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment29">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkTable" id="table15">
+ <property name="visible">True</property>
+ <property name="n_rows">1</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow19">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview_servers">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="enable_search">False</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVButtonBox" id="vbuttonbox1">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <property name="layout_style">GTK_BUTTONBOX_START</property>
+ <child>
+ <widget class="GtkButton" id="button_add">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_remove">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-remove</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_up">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-go-up</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_down">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-go-down</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_servers">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Servers&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area10">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button_close">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-7</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-account-widget-irc.h b/trunk/libempathy-gtk/empathy-account-widget-irc.h
new file mode 100644
index 000000000..6ead048eb
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-irc.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2007-2008 Guillaume Desmottes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <gdesmott@gnome.org>
+ */
+
+#ifndef __EMPATHY_ACCOUNT_WIDGET_IRC_H__
+#define __EMPATHY_ACCOUNT_WIDGET_IRC_H__
+
+#include <gtk/gtkwidget.h>
+#include <libmissioncontrol/mc-account.h>
+
+G_BEGIN_DECLS
+
+GtkWidget * empathy_account_widget_irc_new (McAccount *account);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_ACCOUNT_WIDGET_IRC_H__ */
diff --git a/trunk/libempathy-gtk/empathy-account-widget-jabber.glade b/trunk/libempathy-gtk/empathy-account-widget-jabber.glade
new file mode 100644
index 000000000..ac04d4638
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-jabber.glade
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="account_jabber_settings">
+ <property name="visible">True</property>
+ <property name="title">jabber account settings</property>
+ <property name="resizable">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_jabber_settings">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table_common_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkEntry" id="entry_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_id">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_id">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Login I_D:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_id</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_forget">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Forget password and clear the entry.</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkImage" id="image834">
+ <property name="visible">True</property>
+ <property name="stock">gtk-clear</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_password">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Pass_word:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_password</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkExpander" id="expander1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkTable" id="table_advanced_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkEntry" id="entry_resource">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="spinbutton_priority">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">0 -128 127 1 10 10</property>
+ <property name="climb_rate">1</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_ignore_ssl_errors">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Ignore SSL certificate errors</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_priority">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Pri_ority:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">spinbutton_priority</property>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_resource">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Reso_urce:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_resource</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_encryption">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Encryption required (TLS/SSL)</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="right_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame1">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkSpinButton" id="spinbutton_port">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">5222 0 65556 1 10 10</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_server">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_ssl">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Use old SS_L</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_port">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Port:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">spinbutton_port</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_server">
+ <property name="visible">True</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>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Override server settings&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-account-widget-msn.glade b/trunk/libempathy-gtk/empathy-account-widget-msn.glade
new file mode 100644
index 000000000..57a50c791
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-msn.glade
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="account_msn_settings">
+ <property name="visible">True</property>
+ <property name="title">msn account settings</property>
+ <property name="resizable">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_msn_settings">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table_common_msn_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkEntry" id="entry_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_forget">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Forget password and clear the entry.</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="stock">gtk-clear</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_password">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Pass_word:</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_id">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Login I_D:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_id</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_id">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkExpander" id="expander1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkTable" id="table_advanced_msn_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label_port">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Port:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">spinbutton_port</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_server">
+ <property name="visible">True</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>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_server">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="spinbutton_port">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="adjustment">0 0 65536 1 10 10</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-account-widget-salut.glade b/trunk/libempathy-gtk/empathy-account-widget-salut.glade
new file mode 100644
index 000000000..9aeb3edb8
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-salut.glade
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="account_salut_settings">
+ <property name="visible">True</property>
+ <property name="title">salut account settings</property>
+ <property name="resizable">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_salut_settings">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table_common_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkEntry" id="entry_nickname">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_last_name">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_first_name">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_nickname">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Nickname:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_nickname</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_last_name">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Last Name:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_last_name</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_first_name">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_First Name: </property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_first_name</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkExpander" id="expander1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkTable" id="table_advanced_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkEntry" id="entry_published">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_published">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Published Name:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_published</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_jid">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_email">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_jid">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Jabber ID:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_jid</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_email">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Email:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_email</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-account-widget-sip.c b/trunk/libempathy-gtk/empathy-account-widget-sip.c
new file mode 100644
index 000000000..28832e0d7
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-sip.c
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2007-2008 Guillaume Desmottes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <gdesmott@gnome.org>
+ * Frederic Peters <fpeters@0d.be>
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mc-protocol.h>
+
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-account-widget.h"
+#include "empathy-account-widget-sip.h"
+#include "empathy-ui-utils.h"
+
+typedef struct {
+ McAccount *account;
+
+ GtkWidget *vbox_settings;
+
+ GtkWidget *entry_stun_server;
+ GtkWidget *spinbutton_stun_part;
+ GtkWidget *checkbutton_discover_stun;
+} EmpathyAccountWidgetSip;
+
+static void
+account_widget_sip_destroy_cb (GtkWidget *widget,
+ EmpathyAccountWidgetSip *settings)
+{
+ g_object_unref (settings->account);
+ g_slice_free (EmpathyAccountWidgetSip, settings);
+}
+
+static void
+account_widget_sip_discover_stun_toggled_cb (
+ GtkWidget *checkbox,
+ EmpathyAccountWidgetSip *settings)
+{
+ gboolean active;
+
+ active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbox));
+ gtk_widget_set_sensitive(settings->entry_stun_server, !active);
+ gtk_widget_set_sensitive(settings->spinbutton_stun_part, !active);
+}
+
+/**
+ * empathy_account_widget_sip_new:
+ * @account: the #McAccount to configure
+ *
+ * Creates a new SIP account widget to configure a given #McAccount
+ *
+ * Returns: The toplevel container of the configuration widget
+ */
+GtkWidget *
+empathy_account_widget_sip_new (McAccount *account)
+{
+ EmpathyAccountWidgetSip *settings;
+ GladeXML *glade;
+ gchar *filename;
+
+ settings = g_slice_new0 (EmpathyAccountWidgetSip);
+ settings->account = g_object_ref (account);
+
+ filename = empathy_file_lookup ("empathy-account-widget-sip.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "vbox_sip_settings",
+ NULL,
+ "vbox_sip_settings", &settings->vbox_settings,
+ "entry_stun-server", &settings->entry_stun_server,
+ "spinbutton_stun-port", &settings->spinbutton_stun_part,
+ "checkbutton_discover-stun", &settings->checkbutton_discover_stun,
+ NULL);
+ g_free (filename);
+
+ empathy_account_widget_handle_params (account, glade,
+ "entry_userid", "account",
+ "entry_password", "password",
+ "checkbutton_discover-stun", "discover-stun",
+ "entry_stun-server", "stun-server",
+ "spinbutton_stun-port", "stun-port",
+ NULL);
+
+ empathy_account_widget_add_forget_button (account, glade,
+ "button_forget",
+ "entry_password");
+
+ account_widget_sip_discover_stun_toggled_cb (settings->checkbutton_discover_stun,
+ settings);
+
+ empathy_glade_connect (glade, settings,
+ "vbox_sip_settings", "destroy", account_widget_sip_destroy_cb,
+ "checkbutton_discover-stun", "toggled", account_widget_sip_discover_stun_toggled_cb,
+ NULL);
+
+ g_object_unref (glade);
+
+ return settings->vbox_settings;
+}
diff --git a/trunk/libempathy-gtk/empathy-account-widget-sip.glade b/trunk/libempathy-gtk/empathy-account-widget-sip.glade
new file mode 100644
index 000000000..0baf7b594
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-sip.glade
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="account_sip_settings">
+ <property name="resizable">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_sip_settings">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkEntry" id="entry_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_forget">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Forget password and clear the entry.</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkImage" id="image6">
+ <property name="visible">True</property>
+ <property name="stock">gtk-clear</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_userid">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Username:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_password</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_userid">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_password">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Pass_word:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_password</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkExpander" id="expander_advanced">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkTable" id="table_advanced_sip_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_discover-stun">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes" comments="look up the DNS SRV record at the service's domain for the host name of a STUN server.">Discover STUN</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="spinbutton_stun-port">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">0 0 65536 1 10 10</property>
+ <property name="climb_rate">1</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_stun-server">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Stun Server:</property>
+ <property name="mnemonic_widget">entry_stun-server</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_stun-port">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Stun port:</property>
+ <property name="mnemonic_widget">spinbutton_stun-port</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_stun-server">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_expander">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-account-widget-sip.h b/trunk/libempathy-gtk/empathy-account-widget-sip.h
new file mode 100644
index 000000000..7e8e5a216
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-sip.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2007-2008 Guillaume Desmottes
+ *
+ * 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: Frederic Peters <fpeters@0d.be>
+ */
+
+#ifndef __EMPATHY_ACCOUNT_WIDGET_SIP_H__
+#define __EMPATHY_ACCOUNT_WIDGET_SIP_H__
+
+#include <gtk/gtkwidget.h>
+#include <libmissioncontrol/mc-account.h>
+
+G_BEGIN_DECLS
+
+GtkWidget * empathy_account_widget_sip_new (McAccount *account);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_ACCOUNT_WIDGET_SIP_H__ */
diff --git a/trunk/libempathy-gtk/empathy-account-widget-yahoo.glade b/trunk/libempathy-gtk/empathy-account-widget-yahoo.glade
new file mode 100644
index 000000000..ad4df08d1
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget-yahoo.glade
@@ -0,0 +1,315 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="account_yahoo_settings">
+ <property name="visible">True</property>
+ <property name="title">Yahoo! account settings</property>
+ <property name="resizable">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_yahoo_settings">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table_common_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkEntry" id="entry_password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_id">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_id">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Login I_D:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_id</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_forget">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Forget password and clear the entry.</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkImage" id="image834">
+ <property name="visible">True</property>
+ <property name="stock">gtk-clear</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_password">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Pass_word:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_password</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkExpander" id="expander1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkVBox" id="vbox1">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkTable" id="table_advanced_settings">
+ <property name="visible">True</property>
+ <property name="n_rows">7</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_yahoojp">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Use _Yahoo Japan</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="right_attach">2</property>
+ <property name="top_attach">5</property>
+ <property name="bottom_attach">6</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_serverjp">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_serverjp">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">J_apan server:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_serverjp</property>
+ </widget>
+ <packing>
+ <property name="top_attach">6</property>
+ <property name="bottom_attach">7</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkSpinButton" id="spinbutton_port">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="adjustment">5050 1 65556 1 10 10</property>
+ <property name="climb_rate">1</property>
+ <property name="numeric">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_server">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_port">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Port:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">spinbutton_port</property>
+ </widget>
+ <packing>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_server">
+ <property name="visible">True</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>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_charset">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_locale">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_charset">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Charset:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_charset</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_locale">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Room List locale:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_locale</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_ignore_invites">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Ignore conference and chatroom invitations</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Advanced&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-account-widget.c b/trunk/libempathy-gtk/empathy-account-widget.c
new file mode 100644
index 000000000..5116841c1
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget.c
@@ -0,0 +1,730 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ * Martyn Russell <martyn@imendio.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mc-protocol.h>
+
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-account-widget.h"
+#include "empathy-ui-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT
+#include <libempathy/empathy-debug.h>
+
+static gboolean
+account_widget_entry_focus_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ McAccount *account)
+{
+ const gchar *str;
+ const gchar *param_name;
+
+ str = gtk_entry_get_text (GTK_ENTRY (widget));
+ param_name = g_object_get_data (G_OBJECT (widget), "param_name");
+
+ if (G_STR_EMPTY (str)) {
+ gchar *value = NULL;
+
+ mc_account_unset_param (account, param_name);
+ mc_account_get_param_string (account, param_name, &value);
+ DEBUG ("Unset %s and restore to %s", param_name, value);
+ gtk_entry_set_text (GTK_ENTRY (widget), value ? value : "");
+ g_free (value);
+ } else {
+ DEBUG ("Setting %s to %s", param_name,
+ strstr (param_name, "password") ? "***" : str);
+ mc_account_set_param_string (account, param_name, str);
+ }
+
+ return FALSE;
+}
+
+static void
+account_widget_int_changed_cb (GtkWidget *widget,
+ McAccount *account)
+{
+ const gchar *param_name;
+ gint value;
+
+ value = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (widget));
+ param_name = g_object_get_data (G_OBJECT (widget), "param_name");
+
+ if (value == 0) {
+ mc_account_unset_param (account, param_name);
+ mc_account_get_param_int (account, param_name, &value);
+ DEBUG ("Unset %s and restore to %d", param_name, value);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
+ } else {
+ DEBUG ("Setting %s to %d", param_name, value);
+ mc_account_set_param_int (account, param_name, value);
+ }
+}
+
+static void
+account_widget_checkbutton_toggled_cb (GtkWidget *widget,
+ McAccount *account)
+{
+ gboolean value;
+ gboolean default_value;
+ const gchar *param_name;
+
+ value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+ param_name = g_object_get_data (G_OBJECT (widget), "param_name");
+
+ /* FIXME: This is ugly! checkbox don't have a "not-set" value so we
+ * always unset the param and set the value if different from the
+ * default value. */
+ mc_account_unset_param (account, param_name);
+ mc_account_get_param_boolean (account, param_name, &default_value);
+
+ if (default_value == value) {
+ DEBUG ("Unset %s and restore to %d", param_name, default_value);
+ } else {
+ DEBUG ("Setting %s to %d", param_name, value);
+ mc_account_set_param_boolean (account, param_name, value);
+ }
+}
+
+static void
+account_widget_forget_clicked_cb (GtkWidget *button,
+ GtkWidget *entry)
+{
+ McAccount *account;
+ const gchar *param_name;
+
+ param_name = g_object_get_data (G_OBJECT (entry), "param_name");
+ account = g_object_get_data (G_OBJECT (entry), "account");
+
+ DEBUG ("Unset %s", param_name);
+ mc_account_unset_param (account, param_name);
+ gtk_entry_set_text (GTK_ENTRY (entry), "");
+}
+
+static void
+account_widget_password_changed_cb (GtkWidget *entry,
+ GtkWidget *button)
+{
+ const gchar *str;
+
+ str = gtk_entry_get_text (GTK_ENTRY (entry));
+ gtk_widget_set_sensitive (button, !G_STR_EMPTY (str));
+}
+
+static void
+account_widget_jabber_ssl_toggled_cb (GtkWidget *checkbutton_ssl,
+ GtkWidget *spinbutton_port)
+{
+ McAccount *account;
+ gboolean value;
+ gint port = 0;
+
+ value = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbutton_ssl));
+ account = g_object_get_data (G_OBJECT (spinbutton_port), "account");
+ mc_account_get_param_int (account, "port", &port);
+
+ if (value) {
+ if (port == 5222 || port == 0) {
+ port = 5223;
+ }
+ } else {
+ if (port == 5223 || port == 0) {
+ port = 5222;
+ }
+ }
+
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (spinbutton_port), port);
+}
+
+static void
+account_widget_setup_widget (GtkWidget *widget,
+ McAccount *account,
+ const gchar *param_name)
+{
+ g_object_set_data_full (G_OBJECT (widget), "param_name",
+ g_strdup (param_name), g_free);
+ g_object_set_data_full (G_OBJECT (widget), "account",
+ g_object_ref (account), g_object_unref);
+
+ if (GTK_IS_SPIN_BUTTON (widget)) {
+ gint value = 0;
+
+ mc_account_get_param_int (account, param_name, &value);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
+
+ g_signal_connect (widget, "value-changed",
+ G_CALLBACK (account_widget_int_changed_cb),
+ account);
+ }
+ else if (GTK_IS_ENTRY (widget)) {
+ gchar *str = NULL;
+
+ mc_account_get_param_string (account, param_name, &str);
+ gtk_entry_set_text (GTK_ENTRY (widget), str ? str : "");
+ g_free (str);
+
+ if (strstr (param_name, "password")) {
+ gtk_entry_set_visibility (GTK_ENTRY (widget), FALSE);
+ }
+
+ g_signal_connect (widget, "focus-out-event",
+ G_CALLBACK (account_widget_entry_focus_cb),
+ account);
+ }
+ else if (GTK_IS_TOGGLE_BUTTON (widget)) {
+ gboolean value = FALSE;
+
+ mc_account_get_param_boolean (account, param_name, &value);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
+
+ g_signal_connect (widget, "toggled",
+ G_CALLBACK (account_widget_checkbutton_toggled_cb),
+ account);
+ } else {
+ DEBUG ("Unknown type of widget for param %s", param_name);
+ }
+}
+
+static gchar *
+account_widget_generic_format_param_name (const gchar *param_name)
+{
+ gchar *str;
+ gchar *p;
+
+ str = g_strdup (param_name);
+
+ if (str && g_ascii_isalpha (str[0])) {
+ str[0] = g_ascii_toupper (str[0]);
+ }
+
+ while ((p = strchr (str, '-')) != NULL) {
+ if (p[1] != '\0' && g_ascii_isalpha (p[1])) {
+ p[0] = ' ';
+ p[1] = g_ascii_toupper (p[1]);
+ }
+
+ p++;
+ }
+
+ return str;
+}
+
+static void
+accounts_widget_generic_setup (McAccount *account,
+ GtkWidget *table_common_settings,
+ GtkWidget *table_advanced_settings)
+{
+ McProtocol *protocol;
+ McProfile *profile;
+ GSList *params, *l;
+
+ profile = mc_account_get_profile (account);
+ protocol = mc_profile_get_protocol (profile);
+
+ if (!protocol) {
+ /* The CM is not installed, MC shouldn't list them
+ * see SF bug #1688779
+ * FIXME: We should display something asking the user to
+ * install the CM
+ */
+ g_object_unref (profile);
+ return;
+ }
+
+ params = mc_protocol_get_params (protocol);
+
+ for (l = params; l; l = l->next) {
+ McProtocolParam *param;
+ GtkWidget *table_settings;
+ guint n_rows = 0;
+ GtkWidget *widget = NULL;
+ gchar *param_name_formatted;
+
+ param = l->data;
+ if (param->flags & MC_PROTOCOL_PARAM_REQUIRED) {
+ table_settings = table_common_settings;
+ } else {
+ table_settings = table_advanced_settings;
+ }
+ param_name_formatted = account_widget_generic_format_param_name (param->name);
+ g_object_get (table_settings, "n-rows", &n_rows, NULL);
+ gtk_table_resize (GTK_TABLE (table_settings), ++n_rows, 2);
+
+ if (param->signature[0] == 's') {
+ gchar *str;
+
+ str = g_strdup_printf (_("%s:"), param_name_formatted);
+ widget = gtk_label_new (str);
+ gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5);
+ g_free (str);
+
+ gtk_table_attach (GTK_TABLE (table_settings),
+ widget,
+ 0, 1,
+ n_rows - 1, n_rows,
+ GTK_FILL, 0,
+ 0, 0);
+
+ widget = gtk_entry_new ();
+ gtk_table_attach (GTK_TABLE (table_settings),
+ widget,
+ 1, 2,
+ n_rows - 1, n_rows,
+ GTK_FILL | GTK_EXPAND, 0,
+ 0, 0);
+ }
+ /* int types: ynqiuxt. double type is 'd' */
+ else if (param->signature[0] == 'y' ||
+ param->signature[0] == 'n' ||
+ param->signature[0] == 'q' ||
+ param->signature[0] == 'i' ||
+ param->signature[0] == 'u' ||
+ param->signature[0] == 'x' ||
+ param->signature[0] == 't' ||
+ param->signature[0] == 'd') {
+ gchar *str = NULL;
+ gdouble minint = 0;
+ gdouble maxint = 0;
+ gdouble step = 1;
+
+ switch (param->signature[0]) {
+ case 'y': minint = G_MININT8; maxint = G_MAXINT8; break;
+ case 'n': minint = G_MININT16; maxint = G_MAXINT16; break;
+ case 'q': minint = 0; maxint = G_MAXUINT16; break;
+ case 'i': minint = G_MININT32; maxint = G_MAXINT32; break;
+ case 'u': minint = 0; maxint = G_MAXUINT32; break;
+ case 'x': minint = G_MININT64; maxint = G_MAXINT64; break;
+ case 't': minint = 0; maxint = G_MAXUINT64; break;
+ case 'd': minint = G_MININT32; maxint = G_MAXINT32; step = 0.1; break;
+ }
+
+ str = g_strdup_printf (_("%s:"), param_name_formatted);
+ widget = gtk_label_new (str);
+ gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5);
+ g_free (str);
+
+ gtk_table_attach (GTK_TABLE (table_settings),
+ widget,
+ 0, 1,
+ n_rows - 1, n_rows,
+ GTK_FILL, 0,
+ 0, 0);
+
+ widget = gtk_spin_button_new_with_range (minint, maxint, step);
+ gtk_table_attach (GTK_TABLE (table_settings),
+ widget,
+ 1, 2,
+ n_rows - 1, n_rows,
+ GTK_FILL | GTK_EXPAND, 0,
+ 0, 0);
+ }
+ else if (param->signature[0] == 'b') {
+ widget = gtk_check_button_new_with_label (param_name_formatted);
+ gtk_table_attach (GTK_TABLE (table_settings),
+ widget,
+ 0, 2,
+ n_rows - 1, n_rows,
+ GTK_FILL | GTK_EXPAND, 0,
+ 0, 0);
+ } else {
+ DEBUG ("Unknown signature for param %s: %s",
+ param_name_formatted, param->signature);
+ }
+
+ if (widget) {
+ account_widget_setup_widget (widget, account, param->name);
+ }
+
+ g_free (param_name_formatted);
+ }
+
+ g_slist_free (params);
+ g_object_unref (profile);
+ g_object_unref (protocol);
+}
+
+static void
+account_widget_handle_params_valist (McAccount *account,
+ GladeXML *gui,
+ const gchar *first_widget_name,
+ va_list args)
+{
+ GtkWidget *widget;
+ const gchar *widget_name;
+
+ for (widget_name = first_widget_name; widget_name; widget_name = va_arg (args, gchar*)) {
+ const gchar *param_name;
+
+ param_name = va_arg (args, gchar*);
+
+ widget = glade_xml_get_widget (gui, widget_name);
+
+ if (!widget) {
+ g_warning ("Glade is missing widget '%s'.", widget_name);
+ continue;
+ }
+
+ account_widget_setup_widget (widget, account, param_name);
+ }
+}
+
+void
+empathy_account_widget_handle_params (McAccount *account,
+ GladeXML *gui,
+ const gchar *first_widget_name,
+ ...)
+{
+ va_list args;
+
+ g_return_if_fail (MC_IS_ACCOUNT (account));
+
+ va_start (args, first_widget_name);
+ account_widget_handle_params_valist (account, gui,
+ first_widget_name,
+ args);
+ va_end (args);
+}
+
+void
+empathy_account_widget_add_forget_button (McAccount *account,
+ GladeXML *glade,
+ const gchar *button,
+ const gchar *entry)
+{
+ GtkWidget *button_forget;
+ GtkWidget *entry_password;
+ gchar *password = NULL;
+
+ button_forget = glade_xml_get_widget (glade, button);
+ entry_password = glade_xml_get_widget (glade, entry);
+
+ mc_account_get_param_string (account, "password", &password);
+ gtk_widget_set_sensitive (button_forget, !G_STR_EMPTY (password));
+ g_free (password);
+
+ g_signal_connect (button_forget, "clicked",
+ G_CALLBACK (account_widget_forget_clicked_cb),
+ entry_password);
+ g_signal_connect (entry_password, "changed",
+ G_CALLBACK (account_widget_password_changed_cb),
+ button_forget);
+}
+
+GtkWidget *
+empathy_account_widget_generic_new (McAccount *account)
+{
+ GladeXML *glade;
+ GtkWidget *widget;
+ GtkWidget *table_common_settings;
+ GtkWidget *table_advanced_settings;
+ gchar *filename;
+
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+
+ filename = empathy_file_lookup ("empathy-account-widget-generic.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "vbox_generic_settings",
+ NULL,
+ "vbox_generic_settings", &widget,
+ "table_common_settings", &table_common_settings,
+ "table_advanced_settings", &table_advanced_settings,
+ NULL);
+ g_free (filename);
+
+ accounts_widget_generic_setup (account, table_common_settings, table_advanced_settings);
+
+ g_object_unref (glade);
+
+ gtk_widget_show_all (widget);
+
+ return widget;
+}
+
+GtkWidget *
+empathy_account_widget_salut_new (McAccount *account)
+{
+ GladeXML *glade;
+ GtkWidget *widget;
+ gchar *filename;
+
+ filename = empathy_file_lookup ("empathy-account-widget-salut.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "vbox_salut_settings",
+ NULL,
+ "vbox_salut_settings", &widget,
+ NULL);
+ g_free (filename);
+
+ empathy_account_widget_handle_params (account, glade,
+ "entry_published", "published-name",
+ "entry_nickname", "nickname",
+ "entry_first_name", "first-name",
+ "entry_last_name", "last-name",
+ "entry_email", "email",
+ "entry_jid", "jid",
+ NULL);
+
+ g_object_unref (glade);
+
+ gtk_widget_show (widget);
+
+ return widget;
+}
+
+GtkWidget *
+empathy_account_widget_msn_new (McAccount *account)
+{
+ GladeXML *glade;
+ GtkWidget *widget;
+ gchar *filename;
+
+ filename = empathy_file_lookup ("empathy-account-widget-msn.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "vbox_msn_settings",
+ NULL,
+ "vbox_msn_settings", &widget,
+ NULL);
+ g_free (filename);
+
+ empathy_account_widget_handle_params (account, glade,
+ "entry_id", "account",
+ "entry_password", "password",
+ "entry_server", "server",
+ "spinbutton_port", "port",
+ NULL);
+
+ empathy_account_widget_add_forget_button (account, glade,
+ "button_forget",
+ "entry_password");
+
+ g_object_unref (glade);
+
+ gtk_widget_show (widget);
+
+ return widget;
+}
+
+GtkWidget *
+empathy_account_widget_jabber_new (McAccount *account)
+{
+ GladeXML *glade;
+ GtkWidget *widget;
+ GtkWidget *spinbutton_port;
+ GtkWidget *checkbutton_ssl;
+ gchar *filename;
+
+ filename = empathy_file_lookup ("empathy-account-widget-jabber.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "vbox_jabber_settings",
+ NULL,
+ "vbox_jabber_settings", &widget,
+ "spinbutton_port", &spinbutton_port,
+ "checkbutton_ssl", &checkbutton_ssl,
+ NULL);
+ g_free (filename);
+
+ empathy_account_widget_handle_params (account, glade,
+ "entry_id", "account",
+ "entry_password", "password",
+ "entry_resource", "resource",
+ "entry_server", "server",
+ "spinbutton_port", "port",
+ "spinbutton_priority", "priority",
+ "checkbutton_ssl", "old-ssl",
+ "checkbutton_ignore_ssl_errors", "ignore-ssl-errors",
+ "checkbutton_encryption", "require-encryption",
+ NULL);
+
+ empathy_account_widget_add_forget_button (account, glade,
+ "button_forget",
+ "entry_password");
+
+ g_signal_connect (checkbutton_ssl, "toggled",
+ G_CALLBACK (account_widget_jabber_ssl_toggled_cb),
+ spinbutton_port);
+
+ g_object_unref (glade);
+
+ gtk_widget_show (widget);
+
+ return widget;
+}
+
+GtkWidget *
+empathy_account_widget_icq_new (McAccount *account)
+{
+ GladeXML *glade;
+ GtkWidget *widget;
+ GtkWidget *spinbutton_port;
+ gchar *filename;
+
+ filename = empathy_file_lookup ("empathy-account-widget-icq.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "vbox_icq_settings",
+ NULL,
+ "vbox_icq_settings", &widget,
+ "spinbutton_port", &spinbutton_port,
+ NULL);
+ g_free (filename);
+
+ empathy_account_widget_handle_params (account, glade,
+ "entry_uin", "account",
+ "entry_password", "password",
+ "entry_server", "server",
+ "spinbutton_port", "port",
+ "entry_charset", "charset",
+ NULL);
+
+ empathy_account_widget_add_forget_button (account, glade,
+ "button_forget",
+ "entry_password");
+
+ g_object_unref (glade);
+
+ gtk_widget_show (widget);
+
+ return widget;
+}
+
+GtkWidget *
+empathy_account_widget_aim_new (McAccount *account)
+{
+ GladeXML *glade;
+ GtkWidget *widget;
+ GtkWidget *spinbutton_port;
+ gchar *filename;
+
+ filename = empathy_file_lookup ("empathy-account-widget-aim.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "vbox_aim_settings",
+ NULL,
+ "vbox_aim_settings", &widget,
+ "spinbutton_port", &spinbutton_port,
+ NULL);
+ g_free (filename);
+
+ empathy_account_widget_handle_params (account, glade,
+ "entry_screenname", "account",
+ "entry_password", "password",
+ "entry_server", "server",
+ "spinbutton_port", "port",
+ NULL);
+
+ empathy_account_widget_add_forget_button (account, glade,
+ "button_forget",
+ "entry_password");
+
+ g_object_unref (glade);
+
+ gtk_widget_show (widget);
+
+ return widget;
+}
+
+GtkWidget *
+empathy_account_widget_yahoo_new (McAccount *account)
+{
+ GladeXML *glade;
+ GtkWidget *widget;
+ gchar *filename;
+
+ filename = empathy_file_lookup ("empathy-account-widget-yahoo.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "vbox_yahoo_settings",
+ NULL,
+ "vbox_yahoo_settings", &widget,
+ NULL);
+ g_free (filename);
+
+ empathy_account_widget_handle_params (account, glade,
+ "entry_id", "account",
+ "entry_password", "password",
+ "entry_server", "server",
+ "entry_serverjp", "serverjp",
+ "entry_locale", "room-list-locale",
+ "entry_charset", "charset",
+ "spinbutton_port", "port",
+ "checkbutton_yahoojp", "yahoojp",
+ "checkbutton_ignore_invites", "ignore-invites",
+ NULL);
+
+ empathy_account_widget_add_forget_button (account, glade,
+ "button_forget",
+ "entry_password");
+
+ g_object_unref (glade);
+
+ gtk_widget_show (widget);
+
+ return widget;
+}
+
+GtkWidget *
+empathy_account_widget_groupwise_new (McAccount *account)
+{
+ GladeXML *glade;
+ GtkWidget *widget;
+ gchar *filename;
+
+ filename = empathy_file_lookup ("empathy-account-widget-groupwise.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "vbox_groupwise_settings",
+ NULL,
+ "vbox_groupwise_settings", &widget,
+ NULL);
+ g_free (filename);
+
+ empathy_account_widget_handle_params (account, glade,
+ "entry_id", "account",
+ "entry_password", "password",
+ "entry_server", "server",
+ "spinbutton_port", "port",
+ NULL);
+
+ empathy_account_widget_add_forget_button (account, glade,
+ "button_forget",
+ "entry_password");
+
+ g_object_unref (glade);
+
+ gtk_widget_show (widget);
+
+ return widget;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-account-widget.h b/trunk/libempathy-gtk/empathy-account-widget.h
new file mode 100644
index 000000000..52e907d00
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-account-widget.h
@@ -0,0 +1,54 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ * Martyn Russell <martyn@imendio.com>
+ */
+
+#ifndef __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__
+#define __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+#include <libmissioncontrol/mc-account.h>
+
+G_BEGIN_DECLS
+
+void empathy_account_widget_handle_params (McAccount *account,
+ GladeXML *glade,
+ const gchar *first_widget_name,
+ ...);
+void empathy_account_widget_add_forget_button (McAccount *account,
+ GladeXML *glade,
+ const gchar *button,
+ const gchar *entry);
+GtkWidget *empathy_account_widget_generic_new (McAccount *account);
+GtkWidget *empathy_account_widget_salut_new (McAccount *account);
+GtkWidget *empathy_account_widget_msn_new (McAccount *account);
+GtkWidget *empathy_account_widget_jabber_new (McAccount *account);
+GtkWidget *empathy_account_widget_icq_new (McAccount *account);
+GtkWidget *empathy_account_widget_aim_new (McAccount *account);
+GtkWidget *empathy_account_widget_yahoo_new (McAccount *account);
+GtkWidget *empathy_account_widget_groupwise_new (McAccount *account);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_ACCOUNT_WIDGET_GENERIC_H__ */
diff --git a/trunk/libempathy-gtk/empathy-accounts-dialog.c b/trunk/libempathy-gtk/empathy-accounts-dialog.c
new file mode 100644
index 000000000..e48aaab31
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-accounts-dialog.c
@@ -0,0 +1,1092 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include <glib/gi18n.h>
+#include <dbus/dbus-glib.h>
+
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mc-profile.h>
+#include <libmissioncontrol/mission-control.h>
+#include <libmissioncontrol/mc-account-monitor.h>
+#include <telepathy-glib/util.h>
+
+#include <libempathy/empathy-utils.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
+
+#include "empathy-accounts-dialog.h"
+#include "empathy-profile-chooser.h"
+#include "empathy-account-widget.h"
+#include "empathy-account-widget-irc.h"
+#include "empathy-account-widget-sip.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT
+#include <libempathy/empathy-debug.h>
+
+/* Flashing delay for icons (milliseconds). */
+#define FLASH_TIMEOUT 500
+
+typedef struct {
+ GtkWidget *window;
+
+ GtkWidget *alignment_settings;
+
+ GtkWidget *vbox_details;
+ GtkWidget *frame_no_account;
+ GtkWidget *label_no_account;
+ GtkWidget *label_no_account_blurb;
+
+ GtkWidget *treeview;
+
+ GtkWidget *button_add;
+ GtkWidget *button_remove;
+
+ GtkWidget *frame_new_account;
+ GtkWidget *combobox_profile;
+ GtkWidget *hbox_type;
+ GtkWidget *button_create;
+ GtkWidget *button_back;
+
+ GtkWidget *image_type;
+ GtkWidget *label_name;
+ GtkWidget *label_type;
+ GtkWidget *settings_widget;
+
+ gboolean connecting_show;
+ guint connecting_id;
+ gboolean account_changed;
+
+ MissionControl *mc;
+ McAccountMonitor *monitor;
+ gpointer token;
+} EmpathyAccountsDialog;
+
+enum {
+ COL_ENABLED,
+ COL_NAME,
+ COL_STATUS,
+ COL_ACCOUNT_POINTER,
+ COL_COUNT
+};
+
+static void accounts_dialog_setup (EmpathyAccountsDialog *dialog);
+static void accounts_dialog_update_account (EmpathyAccountsDialog *dialog,
+ McAccount *account);
+static void accounts_dialog_model_setup (EmpathyAccountsDialog *dialog);
+static void accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog);
+static void accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog);
+static void accounts_dialog_model_pixbuf_data_func (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ EmpathyAccountsDialog *dialog);
+static McAccount *accounts_dialog_model_get_selected (EmpathyAccountsDialog *dialog);
+static void accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog,
+ McAccount *account);
+static gboolean accounts_dialog_model_remove_selected (EmpathyAccountsDialog *dialog);
+static void accounts_dialog_model_selection_changed (GtkTreeSelection *selection,
+ EmpathyAccountsDialog *dialog);
+static void accounts_dialog_add_account (EmpathyAccountsDialog *dialog,
+ McAccount *account);
+static void accounts_dialog_account_added_cb (McAccountMonitor *monitor,
+ gchar *unique_name,
+ EmpathyAccountsDialog *dialog);
+static void accounts_dialog_account_removed_cb (McAccountMonitor *monitor,
+ gchar *unique_name,
+ EmpathyAccountsDialog *dialog);
+static gboolean accounts_dialog_row_changed_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer user_data);
+static gboolean accounts_dialog_flash_connecting_cb (EmpathyAccountsDialog *dialog);
+static void accounts_dialog_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyAccountsDialog *dialog);
+static void accounts_dialog_button_create_clicked_cb (GtkWidget *button,
+ EmpathyAccountsDialog *dialog);
+static void accounts_dialog_button_back_clicked_cb (GtkWidget *button,
+ EmpathyAccountsDialog *dialog);
+static void accounts_dialog_button_add_clicked_cb (GtkWidget *button,
+ EmpathyAccountsDialog *dialog);
+static void accounts_dialog_remove_response_cb (GtkWidget *dialog,
+ gint response,
+ McAccount *account);
+static void accounts_dialog_button_remove_clicked_cb (GtkWidget *button,
+ EmpathyAccountsDialog *dialog);
+static void accounts_dialog_response_cb (GtkWidget *widget,
+ gint response,
+ EmpathyAccountsDialog *dialog);
+static void accounts_dialog_destroy_cb (GtkWidget *widget,
+ EmpathyAccountsDialog *dialog);
+
+static void
+accounts_dialog_setup (EmpathyAccountsDialog *dialog)
+{
+ GtkTreeView *view;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GList *accounts, *l;
+
+ view = GTK_TREE_VIEW (dialog->treeview);
+ store = GTK_LIST_STORE (gtk_tree_view_get_model (view));
+
+ accounts = mc_accounts_list ();
+
+ for (l = accounts; l; l = l->next) {
+ McAccount *account;
+ const gchar *name;
+ TpConnectionStatus status;
+ gboolean enabled;
+
+ account = l->data;
+
+ name = mc_account_get_display_name (account);
+ if (!name) {
+ continue;
+ }
+
+ status = mission_control_get_connection_status (dialog->mc, account, NULL);
+ enabled = mc_account_is_enabled (account);
+
+ gtk_list_store_insert_with_values (store, &iter,
+ -1,
+ COL_ENABLED, enabled,
+ COL_NAME, name,
+ COL_STATUS, status,
+ COL_ACCOUNT_POINTER, account,
+ -1);
+
+ accounts_dialog_status_changed_cb (dialog->mc,
+ status,
+ MC_PRESENCE_UNSET,
+ TP_CONNECTION_STATUS_REASON_NONE_SPECIFIED,
+ mc_account_get_unique_name (account),
+ dialog);
+
+ g_object_unref (account);
+ }
+
+ g_list_free (accounts);
+}
+
+static void
+accounts_dialog_update_account (EmpathyAccountsDialog *dialog,
+ McAccount *account)
+{
+ if (dialog->settings_widget) {
+ gtk_widget_destroy (dialog->settings_widget);
+ dialog->settings_widget = NULL;
+ }
+
+ if (!account) {
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GString *string;
+ gchar *str;
+
+ gtk_widget_show (dialog->frame_no_account);
+ gtk_widget_hide (dialog->vbox_details);
+
+ gtk_widget_set_sensitive (dialog->button_remove, FALSE);
+
+ view = GTK_TREE_VIEW (dialog->treeview);
+ model = gtk_tree_view_get_model (view);
+
+ if (empathy_profile_chooser_n_profiles (dialog->combobox_profile) > 0) {
+ string = g_string_new (_("To add a new account, you can click on the "
+ "'Add' button and a new entry will be created "
+ "for you to start configuring."));
+ } else {
+ string = g_string_new (_("To add a new account, you first have to "
+ "install a backend for each protocol "
+ "you want to use."));
+ }
+
+ if (gtk_tree_model_iter_n_children (model, NULL) > 0) {
+ gtk_label_set_markup (GTK_LABEL (dialog->label_no_account),
+ _("<b>No Account Selected</b>"));
+ g_string_append (string, _("\n\n"
+ "If you do not want to add an account, simply "
+ "click on the account you want to configure in "
+ "the list on the left."));
+ } else {
+ gtk_label_set_markup (GTK_LABEL (dialog->label_no_account),
+ _("<b>No Accounts Configured</b>"));
+ }
+
+ str = g_string_free (string, FALSE);
+ gtk_label_set_markup (GTK_LABEL (dialog->label_no_account_blurb),
+ str);
+ g_free (str);
+ } else {
+ McProfile *profile;
+ const gchar *config_ui;
+
+ gtk_widget_hide (dialog->frame_no_account);
+ gtk_widget_show (dialog->vbox_details);
+
+ profile = mc_account_get_profile (account);
+ config_ui = mc_profile_get_configuration_ui (profile);
+ g_object_unref (profile);
+
+ if (!tp_strdiff (config_ui, "jabber")) {
+ dialog->settings_widget =
+ empathy_account_widget_jabber_new (account);
+ }
+ else if (!tp_strdiff (config_ui, "msn")) {
+ dialog ->settings_widget =
+ empathy_account_widget_msn_new (account);
+ }
+ else if (!tp_strdiff (config_ui, "local-xmpp")) {
+ dialog->settings_widget =
+ empathy_account_widget_salut_new (account);
+ }
+ else if (!tp_strdiff (config_ui, "irc")) {
+ dialog->settings_widget =
+ empathy_account_widget_irc_new (account);
+ }
+ else if (!tp_strdiff(config_ui, "icq")) {
+ dialog->settings_widget =
+ empathy_account_widget_icq_new (account);
+ }
+ else if (!tp_strdiff(config_ui, "aim")) {
+ dialog->settings_widget =
+ empathy_account_widget_aim_new (account);
+ }
+ else if (!tp_strdiff (config_ui, "yahoo")) {
+ dialog->settings_widget =
+ empathy_account_widget_yahoo_new (account);
+ }
+ else if (!tp_strdiff (config_ui, "sofiasip")) {
+ dialog->settings_widget =
+ empathy_account_widget_sip_new (account);
+ }
+ else if (!tp_strdiff (config_ui, "groupwise")) {
+ dialog->settings_widget =
+ empathy_account_widget_groupwise_new (account);
+ }
+ else {
+ dialog->settings_widget =
+ empathy_account_widget_generic_new (account);
+ }
+ }
+
+ if (dialog->settings_widget) {
+ gtk_container_add (GTK_CONTAINER (dialog->alignment_settings),
+ dialog->settings_widget);
+ }
+
+ if (account) {
+ McProfile *profile;
+ gchar *text;
+
+ profile = mc_account_get_profile (account);
+ gtk_image_set_from_icon_name (GTK_IMAGE (dialog->image_type),
+ mc_profile_get_icon_name (profile),
+ GTK_ICON_SIZE_DIALOG);
+ gtk_widget_set_tooltip_text (dialog->image_type,
+ mc_profile_get_display_name (profile));
+
+ text = g_markup_printf_escaped ("<big><b>%s</b></big>",
+ mc_account_get_display_name (account));
+ gtk_label_set_markup (GTK_LABEL (dialog->label_name), text);
+ g_free (text);
+ }
+}
+
+static void
+accounts_dialog_model_setup (EmpathyAccountsDialog *dialog)
+{
+ GtkListStore *store;
+ GtkTreeSelection *selection;
+
+ store = gtk_list_store_new (COL_COUNT,
+ G_TYPE_BOOLEAN, /* enabled */
+ G_TYPE_STRING, /* name */
+ G_TYPE_UINT, /* status */
+ MC_TYPE_ACCOUNT); /* account */
+
+ gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->treeview),
+ GTK_TREE_MODEL (store));
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->treeview));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (accounts_dialog_model_selection_changed),
+ dialog);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
+ COL_NAME, GTK_SORT_ASCENDING);
+
+ accounts_dialog_model_add_columns (dialog);
+
+ g_object_unref (store);
+}
+
+static void
+accounts_dialog_name_edited_cb (GtkCellRendererText *renderer,
+ gchar *path,
+ gchar *new_text,
+ EmpathyAccountsDialog *dialog)
+{
+ McAccount *account;
+ GtkTreeModel *model;
+ GtkTreePath *treepath;
+ GtkTreeIter iter;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
+ treepath = gtk_tree_path_new_from_string (path);
+ gtk_tree_model_get_iter (model, &iter, treepath);
+ gtk_tree_model_get (model, &iter,
+ COL_ACCOUNT_POINTER, &account,
+ -1);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ COL_NAME, new_text,
+ -1);
+ gtk_tree_path_free (treepath);
+
+ mc_account_set_display_name (account, new_text);
+ g_object_unref (account);
+}
+
+static void
+accounts_dialog_enable_toggled_cb (GtkCellRendererToggle *cell_renderer,
+ gchar *path,
+ EmpathyAccountsDialog *dialog)
+{
+ McAccount *account;
+ GtkTreeModel *model;
+ GtkTreePath *treepath;
+ GtkTreeIter iter;
+ gboolean enabled;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
+ treepath = gtk_tree_path_new_from_string (path);
+ gtk_tree_model_get_iter (model, &iter, treepath);
+ gtk_tree_model_get (model, &iter,
+ COL_ACCOUNT_POINTER, &account,
+ -1);
+ gtk_tree_path_free (treepath);
+
+ enabled = mc_account_is_enabled (account);
+ mc_account_set_enabled (account, !enabled);
+
+ DEBUG ("%s account %s", enabled ? "Disabled" : "Enable",
+ mc_account_get_display_name(account));
+
+ g_object_unref (account);
+}
+
+static void
+accounts_dialog_model_add_columns (EmpathyAccountsDialog *dialog)
+{
+ GtkTreeView *view;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *cell;
+
+ view = GTK_TREE_VIEW (dialog->treeview);
+ gtk_tree_view_set_headers_visible (view, TRUE);
+
+ /* Enabled column */
+ cell = gtk_cell_renderer_toggle_new ();
+ gtk_tree_view_insert_column_with_attributes (view, -1,
+ _("Enabled"),
+ cell,
+ "active", COL_ENABLED,
+ NULL);
+ g_signal_connect (cell, "toggled",
+ G_CALLBACK (accounts_dialog_enable_toggled_cb),
+ dialog);
+
+ /* Account column */
+ column = gtk_tree_view_column_new ();
+ gtk_tree_view_column_set_title (column, _("Accounts"));
+ gtk_tree_view_column_set_expand (column, TRUE);
+ gtk_tree_view_append_column (view, column);
+
+ /* Icon renderer */
+ cell = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, cell, FALSE);
+ gtk_tree_view_column_set_cell_data_func (column, cell,
+ (GtkTreeCellDataFunc)
+ accounts_dialog_model_pixbuf_data_func,
+ dialog,
+ NULL);
+
+ /* Name renderer */
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ "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",
+ G_CALLBACK (accounts_dialog_name_edited_cb),
+ dialog);
+}
+
+static void
+accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+
+ /* select first */
+ view = GTK_TREE_VIEW (dialog->treeview);
+ model = gtk_tree_view_get_model (view);
+
+ if (gtk_tree_model_get_iter_first (model, &iter)) {
+ selection = gtk_tree_view_get_selection (view);
+ gtk_tree_selection_select_iter (selection, &iter);
+ } else {
+ accounts_dialog_update_account (dialog, NULL);
+ }
+}
+
+static void
+accounts_dialog_model_pixbuf_data_func (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ EmpathyAccountsDialog *dialog)
+{
+ McAccount *account;
+ const gchar *icon_name;
+ GdkPixbuf *pixbuf;
+ TpConnectionStatus status;
+
+ gtk_tree_model_get (model, iter,
+ COL_STATUS, &status,
+ COL_ACCOUNT_POINTER, &account,
+ -1);
+
+ icon_name = empathy_icon_name_from_account (account);
+ pixbuf = empathy_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON);
+
+ if (pixbuf) {
+ if (status == TP_CONNECTION_STATUS_DISCONNECTED ||
+ (status == TP_CONNECTION_STATUS_CONNECTING &&
+ !dialog->connecting_show)) {
+ GdkPixbuf *modded_pixbuf;
+
+ 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);
+ pixbuf = modded_pixbuf;
+ }
+ }
+
+ g_object_set (cell,
+ "visible", TRUE,
+ "pixbuf", pixbuf,
+ NULL);
+
+ g_object_unref (account);
+ if (pixbuf) {
+ g_object_unref (pixbuf);
+ }
+}
+
+static gboolean
+accounts_dialog_get_account_iter (EmpathyAccountsDialog *dialog,
+ McAccount *account,
+ GtkTreeIter *iter)
+{
+ GtkTreeView *view;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ gboolean ok;
+
+ /* Update the status in the model */
+ view = GTK_TREE_VIEW (dialog->treeview);
+ selection = gtk_tree_view_get_selection (view);
+ model = gtk_tree_view_get_model (view);
+
+ for (ok = gtk_tree_model_get_iter_first (model, iter);
+ ok;
+ ok = gtk_tree_model_iter_next (model, iter)) {
+ McAccount *this_account;
+ gboolean equal;
+
+ gtk_tree_model_get (model, iter,
+ COL_ACCOUNT_POINTER, &this_account,
+ -1);
+
+ equal = empathy_account_equal (this_account, account);
+ g_object_unref (this_account);
+
+ if (equal) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static McAccount *
+accounts_dialog_model_get_selected (EmpathyAccountsDialog *dialog)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ McAccount *account;
+
+ view = GTK_TREE_VIEW (dialog->treeview);
+ selection = gtk_tree_view_get_selection (view);
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ return NULL;
+ }
+
+ gtk_tree_model_get (model, &iter, COL_ACCOUNT_POINTER, &account, -1);
+
+ return account;
+}
+
+static void
+accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog,
+ McAccount *account)
+{
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->treeview));
+ if (accounts_dialog_get_account_iter (dialog, account, &iter)) {
+ gtk_tree_selection_select_iter (selection, &iter);
+ }
+}
+
+static gboolean
+accounts_dialog_model_remove_selected (EmpathyAccountsDialog *dialog)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+
+ view = GTK_TREE_VIEW (dialog->treeview);
+ selection = gtk_tree_view_get_selection (view);
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ return FALSE;
+ }
+
+ return gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+}
+
+static void
+accounts_dialog_model_selection_changed (GtkTreeSelection *selection,
+ EmpathyAccountsDialog *dialog)
+{
+ McAccount *account;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean is_selection;
+
+ is_selection = gtk_tree_selection_get_selected (selection, &model, &iter);
+
+ gtk_widget_set_sensitive (dialog->button_add, TRUE);
+ gtk_widget_set_sensitive (dialog->button_remove, is_selection);
+
+ account = accounts_dialog_model_get_selected (dialog);
+ accounts_dialog_update_account (dialog, account);
+
+ if (account) {
+ g_object_unref (account);
+ }
+
+ /* insure new account frame is hidden when a row is selected*/
+ gtk_widget_hide (dialog->frame_new_account);
+}
+
+static void
+accounts_dialog_add_account (EmpathyAccountsDialog *dialog,
+ McAccount *account)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ TpConnectionStatus status;
+ const gchar *name;
+ gboolean enabled;
+
+ if (accounts_dialog_get_account_iter (dialog, account, &iter)) {
+ return;
+ }
+
+ status = mission_control_get_connection_status (dialog->mc, account, NULL);
+ name = mc_account_get_display_name (account);
+ enabled = mc_account_is_enabled (account);
+
+ g_return_if_fail (name != NULL);
+
+ DEBUG ("Adding new account: %s", name);
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
+ gtk_list_store_insert_with_values (GTK_LIST_STORE (model), &iter,
+ -1,
+ COL_ENABLED, enabled,
+ COL_NAME, name,
+ COL_STATUS, status,
+ COL_ACCOUNT_POINTER, account,
+ -1);
+}
+
+static void
+accounts_dialog_account_added_cb (McAccountMonitor *monitor,
+ gchar *unique_name,
+ EmpathyAccountsDialog *dialog)
+{
+ McAccount *account;
+
+ account = mc_account_lookup (unique_name);
+ accounts_dialog_add_account (dialog, account);
+ g_object_unref (account);
+}
+
+static void
+accounts_dialog_account_removed_cb (McAccountMonitor *monitor,
+ gchar *unique_name,
+ EmpathyAccountsDialog *dialog)
+{
+ McAccount *account;
+
+ account = mc_account_lookup (unique_name);
+
+ accounts_dialog_model_set_selected (dialog, account);
+ accounts_dialog_model_remove_selected (dialog);
+
+ g_object_unref (account);
+}
+
+static gboolean
+accounts_dialog_row_changed_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer user_data)
+{
+ gtk_tree_model_row_changed (model, path, iter);
+
+ return FALSE;
+}
+
+static gboolean
+accounts_dialog_flash_connecting_cb (EmpathyAccountsDialog *dialog)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+
+ dialog->connecting_show = !dialog->connecting_show;
+
+ view = GTK_TREE_VIEW (dialog->treeview);
+ model = gtk_tree_view_get_model (view);
+
+ gtk_tree_model_foreach (model, accounts_dialog_row_changed_foreach, NULL);
+
+ return TRUE;
+}
+
+static void
+accounts_dialog_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyAccountsDialog *dialog)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ McAccount *account;
+ GList *accounts, *l;
+ gboolean found = FALSE;
+
+ /* Update the status in the model */
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
+ account = mc_account_lookup (unique_name);
+
+ DEBUG ("Status changed for account %s: status=%d presence=%d",
+ unique_name, status, presence);
+
+ if (accounts_dialog_get_account_iter (dialog, account, &iter)) {
+ GtkTreePath *path;
+
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ COL_STATUS, status,
+ -1);
+
+ path = gtk_tree_model_get_path (model, &iter);
+ gtk_tree_model_row_changed (model, path, &iter);
+ gtk_tree_path_free (path);
+ }
+ g_object_unref (account);
+
+ /* Check if there is still accounts in CONNECTING state */
+ accounts = mc_accounts_list ();
+ for (l = accounts; l; l = l->next) {
+ McAccount *this_account;
+ TpConnectionStatus status;
+
+ this_account = l->data;
+
+ status = mission_control_get_connection_status (mc, this_account, NULL);
+ if (status == TP_CONNECTION_STATUS_CONNECTING) {
+ found = TRUE;
+ break;
+ }
+
+ g_object_unref (this_account);
+ }
+ g_list_free (accounts);
+
+ if (!found && dialog->connecting_id) {
+ g_source_remove (dialog->connecting_id);
+ dialog->connecting_id = 0;
+ }
+ if (found && !dialog->connecting_id) {
+ dialog->connecting_id = g_timeout_add (FLASH_TIMEOUT,
+ (GSourceFunc) accounts_dialog_flash_connecting_cb,
+ dialog);
+ }
+}
+
+static void
+accounts_dialog_account_enabled_cb (McAccountMonitor *monitor,
+ gchar *unique_name,
+ EmpathyAccountsDialog *dialog)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ McAccount *account;
+ gboolean enabled;
+
+ /* Update the status in the model */
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview));
+ account = mc_account_lookup (unique_name);
+ enabled = mc_account_is_enabled (account);
+
+ DEBUG ("Account %s is now %s",
+ mc_account_get_display_name (account),
+ enabled ? "enabled" : "disabled");
+
+ if (accounts_dialog_get_account_iter (dialog, account, &iter)) {
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ COL_ENABLED, enabled,
+ -1);
+ }
+
+ g_object_unref (account);
+}
+
+static void
+accounts_dialog_button_create_clicked_cb (GtkWidget *button,
+ EmpathyAccountsDialog *dialog)
+{
+ McProfile *profile;
+ McAccount *account;
+ const gchar *str;
+
+ /* Update widgets */
+ gtk_widget_show (dialog->vbox_details);
+ gtk_widget_hide (dialog->frame_no_account);
+ gtk_widget_hide (dialog->frame_new_account);
+
+ profile = empathy_profile_chooser_get_selected (dialog->combobox_profile);
+
+ /* Create account */
+ account = mc_account_create (profile);
+
+ str = mc_account_get_unique_name (account);
+ mc_account_set_display_name (account, str);
+
+ accounts_dialog_add_account (dialog, account);
+ accounts_dialog_model_set_selected (dialog, account);
+
+ g_object_unref (account);
+ g_object_unref (profile);
+}
+
+static void
+accounts_dialog_button_back_clicked_cb (GtkWidget *button,
+ EmpathyAccountsDialog *dialog)
+{
+ McAccount *account;
+
+ gtk_widget_hide (dialog->vbox_details);
+ gtk_widget_hide (dialog->frame_no_account);
+ gtk_widget_hide (dialog->frame_new_account);
+
+ gtk_widget_set_sensitive (dialog->button_add, TRUE);
+
+ account = accounts_dialog_model_get_selected (dialog);
+ accounts_dialog_update_account (dialog, account);
+}
+
+static void
+accounts_dialog_button_add_clicked_cb (GtkWidget *button,
+ EmpathyAccountsDialog *dialog)
+{
+ GtkTreeView *view;
+ GtkTreeSelection *selection;
+
+ view = GTK_TREE_VIEW (dialog->treeview);
+ selection = gtk_tree_view_get_selection (view);
+ gtk_tree_selection_unselect_all (selection);
+
+ gtk_widget_set_sensitive (dialog->button_add, FALSE);
+ gtk_widget_hide (dialog->vbox_details);
+ gtk_widget_hide (dialog->frame_no_account);
+ gtk_widget_show (dialog->frame_new_account);
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combobox_profile), 0);
+ gtk_widget_grab_focus (dialog->combobox_profile);
+}
+
+static void
+accounts_dialog_remove_response_cb (GtkWidget *dialog,
+ gint response,
+ McAccount *account)
+{
+ if (response == GTK_RESPONSE_YES) {
+ mc_account_delete (account);
+ }
+
+ gtk_widget_destroy (dialog);
+}
+
+static void
+accounts_dialog_button_remove_clicked_cb (GtkWidget *button,
+ EmpathyAccountsDialog *dialog)
+{
+ McAccount *account;
+ GtkWidget *message_dialog;
+
+ account = accounts_dialog_model_get_selected (dialog);
+
+ if (!mc_account_is_complete (account)) {
+ accounts_dialog_model_remove_selected (dialog);
+ return;
+ }
+ message_dialog = gtk_message_dialog_new
+ (GTK_WINDOW (dialog->window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ _("You are about to remove your %s account!\n"
+ "Are you sure you want to proceed?"),
+ mc_account_get_display_name (account));
+
+ gtk_message_dialog_format_secondary_text
+ (GTK_MESSAGE_DIALOG (message_dialog),
+ _("Any associated conversations and chat rooms will NOT be "
+ "removed if you decide to proceed.\n"
+ "\n"
+ "Should you decide to add the account back at a later time, "
+ "they will still be available."));
+
+ gtk_dialog_add_button (GTK_DIALOG (message_dialog),
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_NO);
+ gtk_dialog_add_button (GTK_DIALOG (message_dialog),
+ GTK_STOCK_REMOVE,
+ GTK_RESPONSE_YES);
+
+ g_signal_connect (message_dialog, "response",
+ G_CALLBACK (accounts_dialog_remove_response_cb),
+ account);
+
+ gtk_widget_show (message_dialog);
+}
+
+static void
+accounts_dialog_response_cb (GtkWidget *widget,
+ gint response,
+ EmpathyAccountsDialog *dialog)
+{
+ gtk_widget_destroy (widget);
+}
+
+static void
+accounts_dialog_destroy_cb (GtkWidget *widget,
+ EmpathyAccountsDialog *dialog)
+{
+ GList *accounts, *l;
+
+ /* Disconnect signals */
+ g_signal_handlers_disconnect_by_func (dialog->monitor,
+ accounts_dialog_account_added_cb,
+ dialog);
+ g_signal_handlers_disconnect_by_func (dialog->monitor,
+ accounts_dialog_account_removed_cb,
+ dialog);
+ g_signal_handlers_disconnect_by_func (dialog->monitor,
+ accounts_dialog_account_enabled_cb,
+ dialog);
+ empathy_disconnect_account_status_changed (dialog->token);
+
+ /* Delete incomplete accounts */
+ accounts = mc_accounts_list ();
+ for (l = accounts; l; l = l->next) {
+ McAccount *account;
+
+ account = l->data;
+ if (!mc_account_is_complete (account)) {
+ /* FIXME: Warn the user the account is not complete
+ * and is going to be removed. */
+ mc_account_delete (account);
+ }
+
+ g_object_unref (account);
+ }
+ g_list_free (accounts);
+
+ if (dialog->connecting_id) {
+ g_source_remove (dialog->connecting_id);
+ }
+
+ g_object_unref (dialog->mc);
+ g_object_unref (dialog->monitor);
+
+ g_free (dialog);
+}
+
+GtkWidget *
+empathy_accounts_dialog_show (GtkWindow *parent)
+{
+ static EmpathyAccountsDialog *dialog = NULL;
+ GladeXML *glade;
+ gchar *filename;
+ GtkWidget *bbox;
+ GtkWidget *button_close;
+
+ if (dialog) {
+ gtk_window_present (GTK_WINDOW (dialog->window));
+ return dialog->window;
+ }
+
+ dialog = g_new0 (EmpathyAccountsDialog, 1);
+
+ filename = empathy_file_lookup ("empathy-accounts-dialog.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "accounts_dialog",
+ NULL,
+ "accounts_dialog", &dialog->window,
+ "vbox_details", &dialog->vbox_details,
+ "frame_no_account", &dialog->frame_no_account,
+ "label_no_account", &dialog->label_no_account,
+ "label_no_account_blurb", &dialog->label_no_account_blurb,
+ "alignment_settings", &dialog->alignment_settings,
+ "dialog-action_area", &bbox,
+ "treeview", &dialog->treeview,
+ "frame_new_account", &dialog->frame_new_account,
+ "hbox_type", &dialog->hbox_type,
+ "button_create", &dialog->button_create,
+ "button_back", &dialog->button_back,
+ "image_type", &dialog->image_type,
+ "label_name", &dialog->label_name,
+ "button_add", &dialog->button_add,
+ "button_remove", &dialog->button_remove,
+ "button_close", &button_close,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ dialog,
+ "accounts_dialog", "destroy", accounts_dialog_destroy_cb,
+ "accounts_dialog", "response", accounts_dialog_response_cb,
+ "button_create", "clicked", accounts_dialog_button_create_clicked_cb,
+ "button_back", "clicked", accounts_dialog_button_back_clicked_cb,
+ "button_add", "clicked", accounts_dialog_button_add_clicked_cb,
+ "button_remove", "clicked", accounts_dialog_button_remove_clicked_cb,
+ NULL);
+
+ g_object_add_weak_pointer (G_OBJECT (dialog->window), (gpointer) &dialog);
+
+ g_object_unref (glade);
+
+ /* Create profile chooser */
+ dialog->combobox_profile = empathy_profile_chooser_new ();
+ gtk_box_pack_end (GTK_BOX (dialog->hbox_type),
+ dialog->combobox_profile,
+ TRUE, TRUE, 0);
+ gtk_widget_show (dialog->combobox_profile);
+ if (empathy_profile_chooser_n_profiles (dialog->combobox_profile) <= 0) {
+ gtk_widget_set_sensitive (dialog->button_add, FALSE);
+ }
+
+ /* Set up signalling */
+ dialog->mc = empathy_mission_control_new ();
+ dialog->monitor = mc_account_monitor_new ();
+
+ g_signal_connect (dialog->monitor, "account-created",
+ G_CALLBACK (accounts_dialog_account_added_cb),
+ dialog);
+ g_signal_connect (dialog->monitor, "account-deleted",
+ G_CALLBACK (accounts_dialog_account_removed_cb),
+ dialog);
+ g_signal_connect (dialog->monitor, "account-enabled",
+ G_CALLBACK (accounts_dialog_account_enabled_cb),
+ dialog);
+ g_signal_connect (dialog->monitor, "account-disabled",
+ G_CALLBACK (accounts_dialog_account_enabled_cb),
+ dialog);
+ dialog->token = empathy_connect_to_account_status_changed (dialog->mc,
+ G_CALLBACK (accounts_dialog_status_changed_cb),
+ dialog, NULL);
+
+ accounts_dialog_model_setup (dialog);
+ accounts_dialog_setup (dialog);
+ accounts_dialog_model_select_first (dialog);
+
+ if (parent) {
+ gtk_window_set_transient_for (GTK_WINDOW (dialog->window),
+ GTK_WINDOW (parent));
+ }
+
+ gtk_widget_show (dialog->window);
+
+ return dialog->window;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-accounts-dialog.glade b/trunk/libempathy-gtk/empathy-accounts-dialog.glade
new file mode 100644
index 000000000..9ed29b8da
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-accounts-dialog.glade
@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkDialog" id="accounts_dialog">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Accounts</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox3">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkHBox" id="hbox146">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="spacing">18</property>
+ <child>
+ <widget class="GtkVBox" id="vbox195">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow17">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview">
+ <property name="width_request">250</property>
+ <property name="height_request">200</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="enable_search">False</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox148">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <widget class="GtkButton" id="button_add">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-add</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_remove">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-remove</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox214">
+ <property name="width_request">415</property>
+ <property name="visible">True</property>
+ <property name="spacing">18</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_details">
+ <property name="visible">True</property>
+ <property name="spacing">18</property>
+ <child>
+ <widget class="GtkHBox" id="hbox183">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label_name">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">&lt;big&gt;&lt;b&gt;Gmail&lt;/b&gt;&lt;/big&gt;</property>
+ <property name="use_markup">True</property>
+ <property name="selectable">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image_type">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ <property name="stock">gtk-cut</property>
+ <property name="icon_size">6</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment_settings">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">20</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label599">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Settings&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame_new_account">
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment29">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">20</property>
+ <child>
+ <widget class="GtkVBox" id="vbox216">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <widget class="GtkHBox" id="hbox_type">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label645">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Type:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox181">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkButton" id="button_create">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="response_id">0</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="stock">gtk-new</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Cr_eate</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_back">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-go-back</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label643">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;New Account&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame_no_account">
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment21">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkLabel" id="label_no_account_blurb">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">To add a new account, you can click on the 'Add' button and a new entry will be created for you to started configuring.
+
+If you do not want to add an account, simply click on the account you want to configure in the list on the left.</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_no_account">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;No Account Selected&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button_close">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-accounts-dialog.h b/trunk/libempathy-gtk/empathy-accounts-dialog.h
new file mode 100644
index 000000000..d76a4dd12
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-accounts-dialog.h
@@ -0,0 +1,36 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_ACCOUNTS_DIALOG_H__
+#define __EMPATHY_ACCOUNTS_DIALOG_H__
+
+#include <gtk/gtkwidget.h>
+
+G_BEGIN_DECLS
+
+GtkWidget *empathy_accounts_dialog_show (GtkWindow *parent);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_ACCOUNTS_DIALOG_H__ */
diff --git a/trunk/libempathy-gtk/empathy-avatar-chooser.c b/trunk/libempathy-gtk/empathy-avatar-chooser.c
new file mode 100644
index 000000000..b0142d72d
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-avatar-chooser.c
@@ -0,0 +1,577 @@
+/* -*- 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.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * 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 library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Based on Novell's e-image-chooser.
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gio/gio.h>
+
+#include <libempathy/empathy-utils.h>
+#include "empathy-avatar-chooser.h"
+#include "empathy-conf.h"
+#include "empathy-ui-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+#define AVATAR_SIZE_SAVE 96
+#define AVATAR_SIZE_VIEW 64
+#define DEFAULT_DIR DATADIR"/pixmaps/faces"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAvatarChooser)
+typedef struct {
+ gchar *image_data;
+ gsize image_data_size;
+} EmpathyAvatarChooserPriv;
+
+static void avatar_chooser_finalize (GObject *object);
+static void avatar_chooser_set_image_from_data (EmpathyAvatarChooser *chooser,
+ gchar *data,
+ gsize size);
+static gboolean avatar_chooser_drag_motion_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time,
+ EmpathyAvatarChooser *chooser);
+static void avatar_chooser_drag_leave_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ guint time,
+ EmpathyAvatarChooser *chooser);
+static gboolean avatar_chooser_drag_drop_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time,
+ EmpathyAvatarChooser *chooser);
+static void avatar_chooser_drag_data_received_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ EmpathyAvatarChooser *chooser);
+static void avatar_chooser_clicked_cb (GtkWidget *button,
+ EmpathyAvatarChooser *chooser);
+
+enum {
+ CHANGED,
+ LAST_SIGNAL
+};
+
+static guint signals [LAST_SIGNAL];
+
+G_DEFINE_TYPE (EmpathyAvatarChooser, empathy_avatar_chooser, GTK_TYPE_BUTTON);
+
+/*
+ * Drag and drop stuff
+ */
+#define URI_LIST_TYPE "text/uri-list"
+
+enum DndTargetType {
+ DND_TARGET_TYPE_URI_LIST
+};
+
+static const GtkTargetEntry drop_types[] = {
+ { URI_LIST_TYPE, 0, DND_TARGET_TYPE_URI_LIST },
+};
+
+static void
+empathy_avatar_chooser_class_init (EmpathyAvatarChooserClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = avatar_chooser_finalize;
+
+ signals[CHANGED] =
+ g_signal_new ("changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_type_class_add_private (object_class, sizeof (EmpathyAvatarChooserPriv));
+}
+
+static void
+empathy_avatar_chooser_init (EmpathyAvatarChooser *chooser)
+{
+ EmpathyAvatarChooserPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (chooser,
+ EMPATHY_TYPE_AVATAR_CHOOSER, EmpathyAvatarChooserPriv);
+
+ chooser->priv = priv;
+ gtk_drag_dest_set (GTK_WIDGET (chooser),
+ GTK_DEST_DEFAULT_ALL,
+ drop_types,
+ G_N_ELEMENTS (drop_types),
+ GDK_ACTION_COPY);
+
+ g_signal_connect (chooser, "drag-motion",
+ G_CALLBACK (avatar_chooser_drag_motion_cb),
+ chooser);
+ g_signal_connect (chooser, "drag-leave",
+ G_CALLBACK (avatar_chooser_drag_leave_cb),
+ chooser);
+ g_signal_connect (chooser, "drag-drop",
+ G_CALLBACK (avatar_chooser_drag_drop_cb),
+ chooser);
+ g_signal_connect (chooser, "drag-data-received",
+ G_CALLBACK (avatar_chooser_drag_data_received_cb),
+ chooser);
+ g_signal_connect (chooser, "clicked",
+ G_CALLBACK (avatar_chooser_clicked_cb),
+ chooser);
+
+ empathy_avatar_chooser_set (chooser, NULL);
+}
+
+static void
+avatar_chooser_finalize (GObject *object)
+{
+ EmpathyAvatarChooserPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ g_free (priv->image_data);
+
+ G_OBJECT_CLASS (empathy_avatar_chooser_parent_class)->finalize (object);
+}
+
+static void
+avatar_chooser_set_pixbuf (EmpathyAvatarChooser *chooser,
+ GdkPixbuf *pixbuf)
+{
+ EmpathyAvatarChooserPriv *priv = GET_PRIV (chooser);
+ GtkWidget *image;
+ GdkPixbuf *pixbuf_view = NULL;
+ GdkPixbuf *pixbuf_save = NULL;
+ GError *error = NULL;
+
+ g_free (priv->image_data);
+ priv->image_data = NULL;
+ priv->image_data_size = 0;
+
+ if (pixbuf) {
+ pixbuf_view = empathy_pixbuf_scale_down_if_necessary (pixbuf, AVATAR_SIZE_VIEW);
+ pixbuf_save = empathy_pixbuf_scale_down_if_necessary (pixbuf, AVATAR_SIZE_SAVE);
+
+ if (!gdk_pixbuf_save_to_buffer (pixbuf_save,
+ &priv->image_data,
+ &priv->image_data_size,
+ "png",
+ &error, NULL)) {
+ DEBUG ("Failed to save pixbuf: %s",
+ error ? error->message : "No error given");
+ g_clear_error (&error);
+ }
+ image = gtk_image_new_from_pixbuf (pixbuf_view);
+
+ g_object_unref (pixbuf_save);
+ g_object_unref (pixbuf_view);
+ } else {
+ image = gtk_image_new_from_icon_name ("stock_person",
+ GTK_ICON_SIZE_DIALOG);
+ }
+
+ gtk_button_set_image (GTK_BUTTON (chooser), image);
+ g_signal_emit (chooser, signals[CHANGED], 0);
+}
+
+static void
+avatar_chooser_set_image_from_file (EmpathyAvatarChooser *chooser,
+ const gchar *filename)
+{
+ GdkPixbuf *pixbuf;
+ GError *error = NULL;
+
+ if (!(pixbuf = gdk_pixbuf_new_from_file (filename, &error))) {
+ DEBUG ("Failed to load pixbuf from file: %s",
+ error ? error->message : "No error given");
+ g_clear_error (&error);
+ }
+
+ avatar_chooser_set_pixbuf (chooser, pixbuf);
+ if (pixbuf) {
+ g_object_unref (pixbuf);
+ }
+}
+
+static void
+avatar_chooser_set_image_from_data (EmpathyAvatarChooser *chooser,
+ gchar *data,
+ gsize size)
+{
+ GdkPixbuf *pixbuf;
+
+ pixbuf = empathy_pixbuf_from_data (data, size);
+ avatar_chooser_set_pixbuf (chooser, pixbuf);
+ if (pixbuf) {
+ g_object_unref (pixbuf);
+ }
+}
+
+static gboolean
+avatar_chooser_drag_motion_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time,
+ EmpathyAvatarChooser *chooser)
+{
+ EmpathyAvatarChooserPriv *priv;
+ GList *p;
+
+ priv = GET_PRIV (chooser);
+
+ for (p = context->targets; p != NULL; p = p->next) {
+ gchar *possible_type;
+
+ possible_type = gdk_atom_name (GDK_POINTER_TO_ATOM (p->data));
+
+ if (!strcmp (possible_type, URI_LIST_TYPE)) {
+ g_free (possible_type);
+ gdk_drag_status (context, GDK_ACTION_COPY, time);
+
+ return TRUE;
+ }
+
+ g_free (possible_type);
+ }
+
+ return FALSE;
+}
+
+static void
+avatar_chooser_drag_leave_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ guint time,
+ EmpathyAvatarChooser *chooser)
+{
+}
+
+static gboolean
+avatar_chooser_drag_drop_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time,
+ EmpathyAvatarChooser *chooser)
+{
+ EmpathyAvatarChooserPriv *priv;
+ GList *p;
+
+ priv = GET_PRIV (chooser);
+
+ if (context->targets == NULL) {
+ return FALSE;
+ }
+
+ for (p = context->targets; p != NULL; p = p->next) {
+ char *possible_type;
+
+ possible_type = gdk_atom_name (GDK_POINTER_TO_ATOM (p->data));
+ if (!strcmp (possible_type, URI_LIST_TYPE)) {
+ g_free (possible_type);
+ gtk_drag_get_data (widget, context,
+ GDK_POINTER_TO_ATOM (p->data),
+ time);
+
+ return TRUE;
+ }
+
+ g_free (possible_type);
+ }
+
+ return FALSE;
+}
+
+static void
+avatar_chooser_drag_data_received_cb (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time,
+ EmpathyAvatarChooser *chooser)
+{
+ gchar *target_type;
+ gboolean handled = FALSE;
+
+ target_type = gdk_atom_name (selection_data->target);
+ if (!strcmp (target_type, URI_LIST_TYPE)) {
+ GFile *file;
+ GFileInputStream *input_stream;
+ gchar *nl;
+ gchar *data = NULL;
+
+ nl = strstr (selection_data->data, "\r\n");
+ if (nl) {
+ gchar *uri;
+
+ uri = g_strndup (selection_data->data,
+ nl - (gchar*) selection_data->data);
+
+ file = g_file_new_for_uri (uri);
+ g_free (uri);
+ } else {
+ file = g_file_new_for_uri (selection_data->data);
+ }
+
+ input_stream = g_file_read (file, NULL, NULL);
+
+ if (input_stream != NULL) {
+ GFileInfo *info;
+
+ info = g_file_query_info (file,
+ G_FILE_ATTRIBUTE_STANDARD_SIZE,
+ 0, NULL, NULL);
+ if (info != NULL) {
+ goffset size;
+ gssize bytes_read;
+
+ size = g_file_info_get_size (info);
+ data = g_malloc (size);
+
+ bytes_read = g_input_stream_read (G_INPUT_STREAM (input_stream),
+ data, size,
+ NULL, NULL);
+ if (bytes_read != -1) {
+ avatar_chooser_set_image_from_data (chooser,
+ data,
+ (gsize) bytes_read);
+ handled = TRUE;
+ }
+
+ g_free (data);
+ g_object_unref (info);
+ }
+
+ g_object_unref (input_stream);
+ }
+
+ g_object_unref (file);
+ }
+
+ gtk_drag_finish (context, handled, FALSE, time);
+}
+
+static void
+avatar_chooser_update_preview_cb (GtkFileChooser *file_chooser,
+ EmpathyAvatarChooser *chooser)
+{
+ gchar *filename;
+
+ filename = gtk_file_chooser_get_preview_filename (file_chooser);
+
+ if (filename) {
+ GtkWidget *image;
+ GdkPixbuf *pixbuf = NULL;
+ GdkPixbuf *scaled_pixbuf;
+
+ pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
+
+ image = gtk_file_chooser_get_preview_widget (file_chooser);
+
+ if (pixbuf) {
+ scaled_pixbuf = empathy_pixbuf_scale_down_if_necessary (pixbuf, AVATAR_SIZE_SAVE);
+ gtk_image_set_from_pixbuf (GTK_IMAGE (image), scaled_pixbuf);
+ g_object_unref (scaled_pixbuf);
+ g_object_unref (pixbuf);
+ } else {
+ gtk_image_set_from_stock (GTK_IMAGE (image),
+ "gtk-dialog-question",
+ GTK_ICON_SIZE_DIALOG);
+ }
+ }
+
+ gtk_file_chooser_set_preview_widget_active (file_chooser, TRUE);
+}
+
+static void
+avatar_chooser_response_cb (GtkWidget *widget,
+ gint response,
+ EmpathyAvatarChooser *chooser)
+{
+ if (response == GTK_RESPONSE_OK) {
+ gchar *filename;
+ gchar *path;
+
+ filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget));
+ avatar_chooser_set_image_from_file (chooser, filename);
+ g_free (filename);
+
+ path = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (widget));
+ if (path) {
+ empathy_conf_set_string (empathy_conf_get (),
+ EMPATHY_PREFS_UI_AVATAR_DIRECTORY,
+ path);
+ g_free (path);
+ }
+ }
+ else if (response == GTK_RESPONSE_NO) {
+ avatar_chooser_set_image_from_data (chooser, NULL, 0);
+ }
+
+ gtk_widget_destroy (widget);
+}
+
+static void
+avatar_chooser_clicked_cb (GtkWidget *button,
+ EmpathyAvatarChooser *chooser)
+{
+ GtkFileChooser *chooser_dialog;
+ GtkWidget *image;
+ gchar *saved_dir = NULL;
+ const gchar *default_dir = DEFAULT_DIR;
+ const gchar *pics_dir;
+ GtkFileFilter *filter;
+
+ chooser_dialog = GTK_FILE_CHOOSER (
+ gtk_file_chooser_dialog_new (_("Select Your Avatar Image"),
+ empathy_get_toplevel_window (GTK_WIDGET (chooser)),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ _("No Image"),
+ GTK_RESPONSE_NO,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN,
+ GTK_RESPONSE_OK,
+ NULL));
+
+ /* Get special dirs */
+ empathy_conf_get_string (empathy_conf_get (),
+ EMPATHY_PREFS_UI_AVATAR_DIRECTORY,
+ &saved_dir);
+ if (saved_dir && !g_file_test (saved_dir, G_FILE_TEST_IS_DIR)) {
+ g_free (saved_dir);
+ saved_dir = NULL;
+ }
+ if (!g_file_test (default_dir, G_FILE_TEST_IS_DIR)) {
+ default_dir = NULL;
+ }
+ pics_dir = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES);
+ if (pics_dir && !g_file_test (pics_dir, G_FILE_TEST_IS_DIR)) {
+ pics_dir = NULL;
+ }
+
+ /* Set current dir to the last one or to DEFAULT_DIR or to home */
+ if (saved_dir) {
+ gtk_file_chooser_set_current_folder (chooser_dialog, saved_dir);
+ }
+ else if (pics_dir) {
+ gtk_file_chooser_set_current_folder (chooser_dialog, pics_dir);
+ }
+ else if (default_dir) {
+ gtk_file_chooser_set_current_folder (chooser_dialog, default_dir);
+ } else {
+ gtk_file_chooser_set_current_folder (chooser_dialog, g_get_home_dir ());
+ }
+
+ /* Add shortcuts to special dirs */
+ if (saved_dir) {
+ gtk_file_chooser_add_shortcut_folder (chooser_dialog, saved_dir, NULL);
+ }
+ else if (pics_dir) {
+ gtk_file_chooser_add_shortcut_folder (chooser_dialog, pics_dir, NULL);
+ }
+ if (default_dir) {
+ gtk_file_chooser_add_shortcut_folder (chooser_dialog, default_dir, NULL);
+ }
+
+ /* Setup preview image */
+ image = gtk_image_new ();
+ gtk_file_chooser_set_preview_widget (chooser_dialog, image);
+ gtk_widget_set_size_request (image, AVATAR_SIZE_SAVE, AVATAR_SIZE_SAVE);
+ gtk_widget_show (image);
+ gtk_file_chooser_set_use_preview_label (chooser_dialog, FALSE);
+ g_signal_connect (chooser_dialog, "update-preview",
+ G_CALLBACK (avatar_chooser_update_preview_cb),
+ chooser);
+
+ /* Setup filers */
+ filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("Images"));
+ gtk_file_filter_add_pixbuf_formats (filter);
+ gtk_file_chooser_add_filter (chooser_dialog, filter);
+ filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, _("All Files"));
+ gtk_file_filter_add_pattern(filter, "*");
+ gtk_file_chooser_add_filter (chooser_dialog, filter);
+
+ /* Setup response */
+ gtk_dialog_set_default_response (GTK_DIALOG (chooser_dialog), GTK_RESPONSE_OK);
+ g_signal_connect (chooser_dialog, "response",
+ G_CALLBACK (avatar_chooser_response_cb),
+ chooser);
+
+ gtk_widget_show (GTK_WIDGET (chooser_dialog));
+ g_free (saved_dir);
+}
+
+GtkWidget *
+empathy_avatar_chooser_new (void)
+{
+ return g_object_new (EMPATHY_TYPE_AVATAR_CHOOSER, NULL);
+}
+
+void
+empathy_avatar_chooser_set (EmpathyAvatarChooser *chooser,
+ EmpathyAvatar *avatar)
+{
+ g_return_if_fail (EMPATHY_IS_AVATAR_CHOOSER (chooser));
+
+ avatar_chooser_set_image_from_data (chooser,
+ avatar ? avatar->data : NULL,
+ avatar ? avatar->len : 0);
+}
+
+void
+empathy_avatar_chooser_get_image_data (EmpathyAvatarChooser *chooser,
+ const gchar **data,
+ gsize *data_size,
+ const gchar **mime_type)
+{
+ EmpathyAvatarChooserPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_AVATAR_CHOOSER (chooser));
+
+ priv = GET_PRIV (chooser);
+
+ if (data) {
+ *data = priv->image_data;
+ }
+ if (data_size) {
+ *data_size = priv->image_data_size;
+ }
+ if (mime_type) {
+ *mime_type = "png";
+ }
+}
+
diff --git a/trunk/libempathy-gtk/empathy-avatar-chooser.h b/trunk/libempathy-gtk/empathy-avatar-chooser.h
new file mode 100644
index 000000000..7db880df7
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-avatar-chooser.h
@@ -0,0 +1,60 @@
+/* -*- 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.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * 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 library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Based on Novell's e-image-chooser.
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_AVATAR_CHOOSER_H__
+#define __EMPATHY_AVATAR_CHOOSER_H__
+
+#include <gtk/gtkbutton.h>
+
+#include <libempathy/empathy-avatar.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_AVATAR_CHOOSER (empathy_avatar_chooser_get_type ())
+#define EMPATHY_AVATAR_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_AVATAR_CHOOSER, EmpathyAvatarChooser))
+#define EMPATHY_AVATAR_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_AVATAR_CHOOSER, EmpathyAvatarChooserClass))
+#define EMPATHY_IS_AVATAR_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_AVATAR_CHOOSER))
+#define EMPATHY_IS_AVATAR_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EMPATHY_TYPE_AVATAR_CHOOSER))
+
+typedef struct _EmpathyAvatarChooser EmpathyAvatarChooser;
+typedef struct _EmpathyAvatarChooserClass EmpathyAvatarChooserClass;
+
+struct _EmpathyAvatarChooser {
+ GtkButton parent;
+ gpointer priv;
+};
+
+struct _EmpathyAvatarChooserClass {
+ GtkButtonClass parent_class;
+};
+
+GType empathy_avatar_chooser_get_type (void);
+GtkWidget *empathy_avatar_chooser_new (void);
+void empathy_avatar_chooser_set (EmpathyAvatarChooser *chooser,
+ EmpathyAvatar *avatar);
+void empathy_avatar_chooser_get_image_data (EmpathyAvatarChooser *chooser,
+ const gchar **data,
+ gsize *data_size,
+ const gchar **mime_type);
+
+#endif /* __EMPATHY_AVATAR_CHOOSER_H__ */
diff --git a/trunk/libempathy-gtk/empathy-avatar-image.c b/trunk/libempathy-gtk/empathy-avatar-image.c
new file mode 100644
index 000000000..7dd93aad9
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-avatar-image.c
@@ -0,0 +1,302 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+#include <gdk/gdkkeysyms.h>
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+
+#include <libempathy/empathy-utils.h>
+#include "empathy-avatar-image.h"
+#include "empathy-ui-utils.h"
+
+#define MAX_SMALL 64
+#define MAX_LARGE 400
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyAvatarImage)
+typedef struct {
+ GtkWidget *image;
+ GtkWidget *popup;
+ GdkPixbuf *pixbuf;
+} EmpathyAvatarImagePriv;
+
+static void avatar_image_finalize (GObject *object);
+static void avatar_image_add_filter (EmpathyAvatarImage *avatar_image);
+static void avatar_image_remove_filter (EmpathyAvatarImage *avatar_image);
+static gboolean avatar_image_button_press_event (GtkWidget *widget,
+ GdkEventButton *event);
+static gboolean avatar_image_button_release_event (GtkWidget *widget,
+ GdkEventButton *event);
+
+G_DEFINE_TYPE (EmpathyAvatarImage, empathy_avatar_image, GTK_TYPE_EVENT_BOX);
+
+static void
+empathy_avatar_image_class_init (EmpathyAvatarImageClass *klass)
+{
+ GObjectClass *object_class;
+ GtkWidgetClass *widget_class;
+
+ object_class = G_OBJECT_CLASS (klass);
+ widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->finalize = avatar_image_finalize;
+
+ widget_class->button_press_event = avatar_image_button_press_event;
+ widget_class->button_release_event = avatar_image_button_release_event;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyAvatarImagePriv));
+}
+
+static void
+empathy_avatar_image_init (EmpathyAvatarImage *avatar_image)
+{
+ EmpathyAvatarImagePriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (avatar_image,
+ EMPATHY_TYPE_AVATAR_IMAGE, EmpathyAvatarImagePriv);
+
+ avatar_image->priv = priv;
+ priv->image = gtk_image_new ();
+ gtk_container_add (GTK_CONTAINER (avatar_image), priv->image);
+ empathy_avatar_image_set (avatar_image, NULL);
+ gtk_widget_show (priv->image);
+
+ avatar_image_add_filter (avatar_image);
+}
+
+static void
+avatar_image_finalize (GObject *object)
+{
+ EmpathyAvatarImagePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ avatar_image_remove_filter (EMPATHY_AVATAR_IMAGE (object));
+
+ if (priv->popup) {
+ gtk_widget_destroy (priv->popup);
+ }
+
+ if (priv->pixbuf) {
+ g_object_unref (priv->pixbuf);
+ }
+
+ G_OBJECT_CLASS (empathy_avatar_image_parent_class)->finalize (object);
+}
+
+static GdkFilterReturn
+avatar_image_filter_func (GdkXEvent *gdkxevent,
+ GdkEvent *event,
+ gpointer data)
+{
+ XEvent *xevent = gdkxevent;
+ Atom atom;
+ EmpathyAvatarImagePriv *priv;
+
+ priv = GET_PRIV (data);
+
+ switch (xevent->type) {
+ case PropertyNotify:
+ atom = gdk_x11_get_xatom_by_name ("_NET_CURRENT_DESKTOP");
+ if (xevent->xproperty.atom == atom) {
+ if (priv->popup) {
+ gtk_widget_destroy (priv->popup);
+ priv->popup = NULL;
+ }
+ }
+ break;
+ }
+
+ return GDK_FILTER_CONTINUE;
+}
+
+static void
+avatar_image_add_filter (EmpathyAvatarImage *avatar_image)
+{
+ Window window;
+ GdkWindow *gdkwindow;
+ gint mask;
+
+ mask = PropertyChangeMask;
+
+ window = GDK_ROOT_WINDOW ();
+ gdkwindow = gdk_xid_table_lookup (window);
+
+ gdk_error_trap_push ();
+ if (gdkwindow) {
+ XWindowAttributes attrs;
+ XGetWindowAttributes (gdk_display, window, &attrs);
+ mask |= attrs.your_event_mask;
+ }
+
+ XSelectInput (gdk_display, window, mask);
+
+ gdk_error_trap_pop ();
+
+ gdk_window_add_filter (NULL, avatar_image_filter_func, avatar_image);
+}
+
+static void
+avatar_image_remove_filter (EmpathyAvatarImage *avatar_image)
+{
+ gdk_window_remove_filter (NULL, avatar_image_filter_func, avatar_image);
+}
+
+static gboolean
+avatar_image_button_press_event (GtkWidget *widget, GdkEventButton *event)
+{
+ EmpathyAvatarImagePriv *priv;
+ GtkWidget *popup;
+ GtkWidget *frame;
+ GtkWidget *image;
+ gint x, y;
+ gint popup_width, popup_height;
+ gint width, height;
+ GdkPixbuf *pixbuf;
+
+ priv = GET_PRIV (widget);
+
+ if (priv->popup) {
+ gtk_widget_destroy (priv->popup);
+ priv->popup = NULL;
+ }
+
+ if (event->button != 1 || event->type != GDK_BUTTON_PRESS || !priv->pixbuf) {
+ return FALSE;
+ }
+
+ popup_width = gdk_pixbuf_get_width (priv->pixbuf);
+ popup_height = gdk_pixbuf_get_height (priv->pixbuf);
+
+ width = priv->image->allocation.width;
+ height = priv->image->allocation.height;
+
+ /* Don't show a popup if the popup is smaller then the currently avatar
+ * image.
+ */
+ if (popup_height <= height && popup_width <= width) {
+ return TRUE;
+ }
+
+ pixbuf = empathy_pixbuf_scale_down_if_necessary (priv->pixbuf, MAX_LARGE);
+ popup_width = gdk_pixbuf_get_width (pixbuf);
+ popup_height = gdk_pixbuf_get_height (pixbuf);
+
+ popup = gtk_window_new (GTK_WINDOW_POPUP);
+
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
+
+ gtk_container_add (GTK_CONTAINER (popup), frame);
+
+ image = gtk_image_new ();
+ gtk_container_add (GTK_CONTAINER (frame), image);
+
+ gtk_image_set_from_pixbuf (GTK_IMAGE (image), pixbuf);
+ g_object_unref (pixbuf);
+
+ gdk_window_get_origin (priv->image->window, &x, &y);
+
+ x = x - (popup_width - width) / 2;
+ y = y - (popup_height - height) / 2;
+
+ gtk_window_move (GTK_WINDOW (popup), x, y);
+
+ priv->popup = popup;
+
+ gtk_widget_show_all (popup);
+
+ return TRUE;
+}
+
+static gboolean
+avatar_image_button_release_event (GtkWidget *widget, GdkEventButton *event)
+{
+ EmpathyAvatarImagePriv *priv;
+
+ priv = GET_PRIV (widget);
+
+ if (event->button != 1 || event->type != GDK_BUTTON_RELEASE) {
+ return FALSE;
+ }
+
+ if (!priv->popup) {
+ return TRUE;
+ }
+
+ gtk_widget_destroy (priv->popup);
+ priv->popup = NULL;
+
+ return TRUE;
+}
+
+GtkWidget *
+empathy_avatar_image_new (void)
+{
+ EmpathyAvatarImage *avatar_image;
+
+ avatar_image = g_object_new (EMPATHY_TYPE_AVATAR_IMAGE, NULL);
+
+ return GTK_WIDGET (avatar_image);
+}
+
+void
+empathy_avatar_image_set (EmpathyAvatarImage *avatar_image,
+ EmpathyAvatar *avatar)
+{
+ EmpathyAvatarImagePriv *priv = GET_PRIV (avatar_image);
+ GdkPixbuf *scaled_pixbuf;
+
+ g_return_if_fail (EMPATHY_IS_AVATAR_IMAGE (avatar_image));
+
+ if (priv->pixbuf) {
+ g_object_unref (priv->pixbuf);
+ priv->pixbuf = NULL;
+ }
+
+ if (avatar) {
+ priv->pixbuf = empathy_pixbuf_from_data (avatar->data, avatar->len);
+ }
+
+ if (!priv->pixbuf) {
+ gtk_image_set_from_icon_name (GTK_IMAGE (priv->image),
+ "stock_person",
+ GTK_ICON_SIZE_DIALOG);
+ return;
+ }
+
+ scaled_pixbuf = empathy_pixbuf_scale_down_if_necessary (priv->pixbuf, MAX_SMALL);
+ gtk_image_set_from_pixbuf (GTK_IMAGE (priv->image), scaled_pixbuf);
+
+ if (scaled_pixbuf != priv->pixbuf) {
+ gtk_widget_set_tooltip_text (GTK_WIDGET (avatar_image),
+ _("Click to enlarge"));
+ } else {
+ gtk_widget_set_tooltip_text (GTK_WIDGET (avatar_image),
+ NULL);
+ }
+
+ g_object_unref (scaled_pixbuf);
+}
+
diff --git a/trunk/libempathy-gtk/empathy-avatar-image.h b/trunk/libempathy-gtk/empathy-avatar-image.h
new file mode 100644
index 000000000..bd83e4bb8
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-avatar-image.h
@@ -0,0 +1,59 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_AVATAR_IMAGE_H__
+#define __EMPATHY_AVATAR_IMAGE_H__
+
+#include <gtk/gtkeventbox.h>
+
+#include <libempathy/empathy-avatar.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_AVATAR_IMAGE (empathy_avatar_image_get_type ())
+#define EMPATHY_AVATAR_IMAGE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_AVATAR_IMAGE, EmpathyAvatarImage))
+#define EMPATHY_AVATAR_IMAGE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_AVATAR_IMAGE, EmpathyAvatarImageClass))
+#define EMPATHY_IS_AVATAR_IMAGE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_AVATAR_IMAGE))
+#define EMPATHY_IS_AVATAR_IMAGE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_AVATAR_IMAGE))
+#define EMPATHY_AVATAR_IMAGE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_AVATAR_IMAGE, EmpathyAvatarImageClass))
+
+typedef struct _EmpathyAvatarImage EmpathyAvatarImage;
+typedef struct _EmpathyAvatarImageClass EmpathyAvatarImageClass;
+
+struct _EmpathyAvatarImage {
+ GtkEventBox parent;
+ gpointer priv;
+};
+
+struct _EmpathyAvatarImageClass {
+ GtkEventBoxClass parent_class;
+};
+
+GType empathy_avatar_image_get_type (void) G_GNUC_CONST;
+GtkWidget * empathy_avatar_image_new (void);
+void empathy_avatar_image_set (EmpathyAvatarImage *avatar_image,
+ EmpathyAvatar *avatar);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_AVATAR_IMAGE_H__ */
diff --git a/trunk/libempathy-gtk/empathy-cell-renderer-activatable.c b/trunk/libempathy-gtk/empathy-cell-renderer-activatable.c
new file mode 100644
index 000000000..fc218e88b
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-cell-renderer-activatable.c
@@ -0,0 +1,117 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Raphael Slinckx <raphael@slinckx.net>
+ * 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: Raphael Slinckx <raphael@slinckx.net>
+ */
+
+#include <gtk/gtktreeview.h>
+
+#include "empathy-cell-renderer-activatable.h"
+
+static void empathy_cell_renderer_activatable_init (EmpathyCellRendererActivatable *cell);
+static void empathy_cell_renderer_activatable_class_init (EmpathyCellRendererActivatableClass *klass);
+static gboolean cell_renderer_activatable_activate (GtkCellRenderer *cell,
+ GdkEvent *event,
+ GtkWidget *widget,
+ const gchar *path,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GtkCellRendererState flags);
+
+enum {
+ PATH_ACTIVATED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE (EmpathyCellRendererActivatable, empathy_cell_renderer_activatable, GTK_TYPE_CELL_RENDERER_PIXBUF)
+
+static void
+empathy_cell_renderer_activatable_init (EmpathyCellRendererActivatable *cell)
+{
+ g_object_set (cell,
+ "xpad", 0,
+ "ypad", 0,
+ "mode", GTK_CELL_RENDERER_MODE_ACTIVATABLE,
+ "follow-state", TRUE,
+ NULL);
+}
+
+static void
+empathy_cell_renderer_activatable_class_init (EmpathyCellRendererActivatableClass *klass)
+{
+ GtkCellRendererClass *cell_class;
+
+ cell_class = GTK_CELL_RENDERER_CLASS (klass);
+ cell_class->activate = cell_renderer_activatable_activate;
+
+ signals[PATH_ACTIVATED] =
+ g_signal_new ("path-activated",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE,
+ 1, G_TYPE_STRING);
+}
+
+GtkCellRenderer *
+empathy_cell_renderer_activatable_new (void)
+{
+ return g_object_new (EMPATHY_TYPE_CELL_RENDERER_ACTIVATABLE, NULL);
+}
+
+static gboolean
+cell_renderer_activatable_activate (GtkCellRenderer *cell,
+ GdkEvent *event,
+ GtkWidget *widget,
+ const gchar *path_string,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GtkCellRendererState flags)
+{
+ EmpathyCellRendererActivatable *activatable;
+ gint ex, ey, bx, by, bw, bh;
+
+ activatable = EMPATHY_CELL_RENDERER_ACTIVATABLE (cell);
+
+ if (!GTK_IS_TREE_VIEW (widget) || event == NULL ||
+ event->type != GDK_BUTTON_PRESS) {
+ return FALSE;
+ }
+
+ ex = (gint) ((GdkEventButton *) event)->x;
+ ey = (gint) ((GdkEventButton *) event)->y;
+ bx = background_area->x;
+ by = background_area->y;
+ bw = background_area->width;
+ bh = background_area->height;
+
+ if (ex < bx || ex > (bx+bw) || ey < by || ey > (by+bh)){
+ /* Click wasn't on the icon */
+ return FALSE;
+ }
+
+ g_signal_emit (activatable, signals[PATH_ACTIVATED], 0, path_string);
+
+ return TRUE;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-cell-renderer-activatable.h b/trunk/libempathy-gtk/empathy-cell-renderer-activatable.h
new file mode 100644
index 000000000..5962c200f
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-cell-renderer-activatable.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Raphael Slinckx <raphael@slinckx.net>
+ * 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: Raphael Slinckx <raphael@slinckx.net>
+ */
+
+#ifndef __EMPATHY_CELL_RENDERER_ACTIVATABLE_H__
+#define __EMPATHY_CELL_RENDERER_ACTIVATABLE_H__
+
+#include <gtk/gtkcellrendererpixbuf.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CELL_RENDERER_ACTIVATABLE (empathy_cell_renderer_activatable_get_type ())
+#define EMPATHY_CELL_RENDERER_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_CELL_RENDERER_ACTIVATABLE, EmpathyCellRendererActivatable))
+#define EMPATHY_CELL_RENDERER_ACTIVATABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_CELL_RENDERER_ACTIVATABLE, EmpathyCellRendererActivatableClass))
+#define EMPATHY_IS_CELL_RENDERER_ACTIVATABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_CELL_RENDERER_ACTIVATABLE))
+#define EMPATHY_IS_CELL_RENDERER_ACTIVATABLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_CELL_RENDERER_ACTIVATABLE))
+#define EMPATHY_CELL_RENDERER_ACTIVATABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CELL_RENDERER_ACTIVATABLE, EmpathyCellRendererActivatableClass))
+
+typedef struct _EmpathyCellRendererActivatable EmpathyCellRendererActivatable;
+typedef struct _EmpathyCellRendererActivatableClass EmpathyCellRendererActivatableClass;
+
+struct _EmpathyCellRendererActivatable {
+ GtkCellRendererPixbuf parent;
+};
+
+struct _EmpathyCellRendererActivatableClass {
+ GtkCellRendererPixbufClass parent_class;
+};
+
+GType empathy_cell_renderer_activatable_get_type (void) G_GNUC_CONST;
+GtkCellRenderer *empathy_cell_renderer_activatable_new (void);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CELL_RENDERER_ACTIVATABLE_H__ */
+
diff --git a/trunk/libempathy-gtk/empathy-cell-renderer-expander.c b/trunk/libempathy-gtk/empathy-cell-renderer-expander.c
new file mode 100644
index 000000000..fc9189d2d
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-cell-renderer-expander.c
@@ -0,0 +1,478 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2006-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Kristian Rietveld <kris@imendio.com>
+ */
+
+/* To do:
+ * - should probably cancel animation if model changes
+ * - need to handle case where node-in-animation is removed
+ * - it only handles a single animation at a time; but I guess users
+ * aren't fast enough to trigger two or more animations at once anyway :P
+ * (could guard for this by just cancelling the "old" animation, and
+ * start the new one).
+ */
+
+#include <gtk/gtktreeview.h>
+
+#include <libempathy/empathy-utils.h>
+#include "empathy-cell-renderer-expander.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyCellRendererExpander)
+typedef struct {
+ GtkExpanderStyle expander_style;
+ gint expander_size;
+
+ GtkTreeView *animation_view;
+ GtkTreeRowReference *animation_node;
+ GtkExpanderStyle animation_style;
+ guint animation_timeout;
+ GdkRectangle animation_area;
+
+ guint activatable : 1;
+ guint animation_expanding : 1;
+} EmpathyCellRendererExpanderPriv;
+
+enum {
+ PROP_0,
+ PROP_EXPANDER_STYLE,
+ PROP_EXPANDER_SIZE,
+ PROP_ACTIVATABLE
+};
+
+static void empathy_cell_renderer_expander_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void empathy_cell_renderer_expander_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void empathy_cell_renderer_expander_finalize (GObject *object);
+static void empathy_cell_renderer_expander_get_size (GtkCellRenderer *cell,
+ GtkWidget *widget,
+ GdkRectangle *cell_area,
+ gint *x_offset,
+ gint *y_offset,
+ gint *width,
+ gint *height);
+static void empathy_cell_renderer_expander_render (GtkCellRenderer *cell,
+ GdkWindow *window,
+ GtkWidget *widget,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GdkRectangle *expose_area,
+ GtkCellRendererState flags);
+static gboolean empathy_cell_renderer_expander_activate (GtkCellRenderer *cell,
+ GdkEvent *event,
+ GtkWidget *widget,
+ const gchar *path,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GtkCellRendererState flags);
+
+G_DEFINE_TYPE (EmpathyCellRendererExpander, empathy_cell_renderer_expander, GTK_TYPE_CELL_RENDERER)
+
+static void
+empathy_cell_renderer_expander_init (EmpathyCellRendererExpander *expander)
+{
+ EmpathyCellRendererExpanderPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (expander,
+ EMPATHY_TYPE_CELL_RENDERER_EXPANDER, EmpathyCellRendererExpanderPriv);
+
+ expander->priv = priv;
+ priv->expander_style = GTK_EXPANDER_COLLAPSED;
+ priv->expander_size = 12;
+ priv->activatable = TRUE;
+ priv->animation_node = NULL;
+
+ GTK_CELL_RENDERER (expander)->xpad = 2;
+ GTK_CELL_RENDERER (expander)->ypad = 2;
+ GTK_CELL_RENDERER (expander)->mode = GTK_CELL_RENDERER_MODE_ACTIVATABLE;
+}
+
+static void
+empathy_cell_renderer_expander_class_init (EmpathyCellRendererExpanderClass *klass)
+{
+ GObjectClass *object_class;
+ GtkCellRendererClass *cell_class;
+
+ object_class = G_OBJECT_CLASS (klass);
+ cell_class = GTK_CELL_RENDERER_CLASS (klass);
+
+ object_class->finalize = empathy_cell_renderer_expander_finalize;
+
+ object_class->get_property = empathy_cell_renderer_expander_get_property;
+ object_class->set_property = empathy_cell_renderer_expander_set_property;
+
+ cell_class->get_size = empathy_cell_renderer_expander_get_size;
+ cell_class->render = empathy_cell_renderer_expander_render;
+ cell_class->activate = empathy_cell_renderer_expander_activate;
+
+ g_object_class_install_property (object_class,
+ PROP_EXPANDER_STYLE,
+ g_param_spec_enum ("expander-style",
+ "Expander Style",
+ "Style to use when painting the expander",
+ GTK_TYPE_EXPANDER_STYLE,
+ GTK_EXPANDER_COLLAPSED,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_EXPANDER_SIZE,
+ g_param_spec_int ("expander-size",
+ "Expander Size",
+ "The size of the expander",
+ 0,
+ G_MAXINT,
+ 12,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_ACTIVATABLE,
+ g_param_spec_boolean ("activatable",
+ "Activatable",
+ "The expander can be activated",
+ TRUE,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof (EmpathyCellRendererExpanderPriv));
+}
+
+static void
+empathy_cell_renderer_expander_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyCellRendererExpander *expander;
+ EmpathyCellRendererExpanderPriv *priv;
+
+ expander = EMPATHY_CELL_RENDERER_EXPANDER (object);
+ priv = GET_PRIV (expander);
+
+ switch (param_id) {
+ case PROP_EXPANDER_STYLE:
+ g_value_set_enum (value, priv->expander_style);
+ break;
+
+ case PROP_EXPANDER_SIZE:
+ g_value_set_int (value, priv->expander_size);
+ break;
+
+ case PROP_ACTIVATABLE:
+ g_value_set_boolean (value, priv->activatable);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+empathy_cell_renderer_expander_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyCellRendererExpander *expander;
+ EmpathyCellRendererExpanderPriv *priv;
+
+ expander = EMPATHY_CELL_RENDERER_EXPANDER (object);
+ priv = GET_PRIV (expander);
+
+ switch (param_id) {
+ case PROP_EXPANDER_STYLE:
+ priv->expander_style = g_value_get_enum (value);
+ break;
+
+ case PROP_EXPANDER_SIZE:
+ priv->expander_size = g_value_get_int (value);
+ break;
+
+ case PROP_ACTIVATABLE:
+ priv->activatable = g_value_get_boolean (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+empathy_cell_renderer_expander_finalize (GObject *object)
+{
+ EmpathyCellRendererExpanderPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ if (priv->animation_timeout) {
+ g_source_remove (priv->animation_timeout);
+ priv->animation_timeout = 0;
+ }
+
+ if (priv->animation_node) {
+ gtk_tree_row_reference_free (priv->animation_node);
+ }
+
+ (* G_OBJECT_CLASS (empathy_cell_renderer_expander_parent_class)->finalize) (object);
+}
+
+GtkCellRenderer *
+empathy_cell_renderer_expander_new (void)
+{
+ return g_object_new (EMPATHY_TYPE_CELL_RENDERER_EXPANDER, NULL);
+}
+
+static void
+empathy_cell_renderer_expander_get_size (GtkCellRenderer *cell,
+ GtkWidget *widget,
+ GdkRectangle *cell_area,
+ gint *x_offset,
+ gint *y_offset,
+ gint *width,
+ gint *height)
+{
+ EmpathyCellRendererExpander *expander;
+ EmpathyCellRendererExpanderPriv *priv;
+
+ expander = (EmpathyCellRendererExpander*) cell;
+ priv = GET_PRIV (expander);
+
+ if (cell_area) {
+ if (x_offset) {
+ *x_offset = cell->xalign * (cell_area->width - (priv->expander_size + (2 * cell->xpad)));
+ *x_offset = MAX (*x_offset, 0);
+ }
+
+ if (y_offset) {
+ *y_offset = cell->yalign * (cell_area->height - (priv->expander_size + (2 * cell->ypad)));
+ *y_offset = MAX (*y_offset, 0);
+ }
+ } else {
+ if (x_offset)
+ *x_offset = 0;
+
+ if (y_offset)
+ *y_offset = 0;
+ }
+
+ if (width)
+ *width = cell->xpad * 2 + priv->expander_size;
+
+ if (height)
+ *height = cell->ypad * 2 + priv->expander_size;
+}
+
+static void
+empathy_cell_renderer_expander_render (GtkCellRenderer *cell,
+ GdkWindow *window,
+ GtkWidget *widget,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GdkRectangle *expose_area,
+ GtkCellRendererState flags)
+{
+ EmpathyCellRendererExpander *expander;
+ EmpathyCellRendererExpanderPriv *priv;
+ GtkExpanderStyle expander_style;
+ gint x_offset, y_offset;
+
+ expander = (EmpathyCellRendererExpander*) cell;
+ priv = GET_PRIV (expander);
+
+ if (priv->animation_node) {
+ GtkTreePath *path;
+ GdkRectangle rect;
+
+ /* Not sure if I like this ... */
+ path = gtk_tree_row_reference_get_path (priv->animation_node);
+ gtk_tree_view_get_background_area (priv->animation_view, path,
+ NULL, &rect);
+ gtk_tree_path_free (path);
+
+ if (background_area->y == rect.y)
+ expander_style = priv->animation_style;
+ else
+ expander_style = priv->expander_style;
+ } else
+ expander_style = priv->expander_style;
+
+ empathy_cell_renderer_expander_get_size (cell, widget, cell_area,
+ &x_offset, &y_offset,
+ NULL, NULL);
+
+ gtk_paint_expander (widget->style,
+ window,
+ GTK_STATE_NORMAL,
+ expose_area,
+ widget,
+ "treeview",
+ cell_area->x + x_offset + cell->xpad + priv->expander_size / 2,
+ cell_area->y + y_offset + cell->ypad + priv->expander_size / 2,
+ expander_style);
+}
+
+static void
+invalidate_node (GtkTreeView *tree_view,
+ GtkTreePath *path)
+{
+ GdkWindow *bin_window;
+ GdkRectangle rect;
+
+ bin_window = gtk_tree_view_get_bin_window (tree_view);
+
+ gtk_tree_view_get_background_area (tree_view, path, NULL, &rect);
+
+ rect.x = 0;
+ rect.width = GTK_WIDGET (tree_view)->allocation.width;
+
+ gdk_window_invalidate_rect (bin_window, &rect, TRUE);
+}
+
+static gboolean
+do_animation (EmpathyCellRendererExpander *expander)
+{
+ EmpathyCellRendererExpanderPriv *priv;
+ GtkTreePath *path;
+ gboolean done = FALSE;
+
+ priv = GET_PRIV (expander);
+
+ if (priv->animation_expanding) {
+ if (priv->animation_style == GTK_EXPANDER_SEMI_COLLAPSED)
+ priv->animation_style = GTK_EXPANDER_SEMI_EXPANDED;
+ else if (priv->animation_style == GTK_EXPANDER_SEMI_EXPANDED) {
+ priv->animation_style = GTK_EXPANDER_EXPANDED;
+ done = TRUE;
+ }
+ } else {
+ if (priv->animation_style == GTK_EXPANDER_SEMI_EXPANDED)
+ priv->animation_style = GTK_EXPANDER_SEMI_COLLAPSED;
+ else if (priv->animation_style == GTK_EXPANDER_SEMI_COLLAPSED) {
+ priv->animation_style = GTK_EXPANDER_COLLAPSED;
+ done = TRUE;
+ }
+ }
+
+ path = gtk_tree_row_reference_get_path (priv->animation_node);
+ invalidate_node (priv->animation_view, path);
+ gtk_tree_path_free (path);
+
+ if (done) {
+ gtk_tree_row_reference_free (priv->animation_node);
+ priv->animation_node = NULL;
+ priv->animation_timeout = 0;
+ }
+
+ return !done;
+}
+
+static gboolean
+animation_timeout (gpointer data)
+{
+ gboolean retval;
+
+ GDK_THREADS_ENTER ();
+
+ retval = do_animation (data);
+
+ GDK_THREADS_LEAVE ();
+
+ return retval;
+}
+
+static void
+empathy_cell_renderer_expander_start_animation (EmpathyCellRendererExpander *expander,
+ GtkTreeView *tree_view,
+ GtkTreePath *path,
+ gboolean expanding,
+ GdkRectangle *background_area)
+{
+ EmpathyCellRendererExpanderPriv *priv;
+
+ priv = GET_PRIV (expander);
+
+ if (expanding) {
+ priv->animation_style = GTK_EXPANDER_SEMI_COLLAPSED;
+ } else {
+ priv->animation_style = GTK_EXPANDER_SEMI_EXPANDED;
+ }
+
+ invalidate_node (tree_view, path);
+
+ priv->animation_expanding = expanding;
+ priv->animation_view = tree_view;
+ priv->animation_node = gtk_tree_row_reference_new (gtk_tree_view_get_model (tree_view), path);
+ priv->animation_timeout = g_timeout_add (50, animation_timeout, expander);
+}
+
+static gboolean
+empathy_cell_renderer_expander_activate (GtkCellRenderer *cell,
+ GdkEvent *event,
+ GtkWidget *widget,
+ const gchar *path_string,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GtkCellRendererState flags)
+{
+ EmpathyCellRendererExpander *expander;
+ EmpathyCellRendererExpanderPriv *priv;
+ GtkTreePath *path;
+ gboolean animate;
+ gboolean expanding;
+
+ expander = EMPATHY_CELL_RENDERER_EXPANDER (cell);
+ priv = GET_PRIV (cell);
+
+ if (!GTK_IS_TREE_VIEW (widget) || !priv->activatable)
+ return FALSE;
+
+ path = gtk_tree_path_new_from_string (path_string);
+
+ if (gtk_tree_path_get_depth (path) > 1) {
+ gtk_tree_path_free (path);
+ return TRUE;
+ }
+
+ g_object_get (gtk_widget_get_settings (GTK_WIDGET (widget)),
+ "gtk-enable-animations", &animate,
+ NULL);
+
+ if (gtk_tree_view_row_expanded (GTK_TREE_VIEW (widget), path)) {
+ gtk_tree_view_collapse_row (GTK_TREE_VIEW (widget), path);
+ expanding = FALSE;
+ } else {
+ gtk_tree_view_expand_row (GTK_TREE_VIEW (widget), path, FALSE);
+ expanding = TRUE;
+ }
+
+ if (animate) {
+ empathy_cell_renderer_expander_start_animation (expander,
+ GTK_TREE_VIEW (widget),
+ path,
+ expanding,
+ background_area);
+ }
+
+ gtk_tree_path_free (path);
+
+ return TRUE;
+}
diff --git a/trunk/libempathy-gtk/empathy-cell-renderer-expander.h b/trunk/libempathy-gtk/empathy-cell-renderer-expander.h
new file mode 100644
index 000000000..d052612bf
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-cell-renderer-expander.h
@@ -0,0 +1,60 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2006-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Kristian Rietveld <kris@imendio.com>
+ */
+
+#ifndef __EMPATHY_CELL_RENDERER_EXPANDER_H__
+#define __EMPATHY_CELL_RENDERER_EXPANDER_H__
+
+#include <gtk/gtkcellrenderer.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CELL_RENDERER_EXPANDER (empathy_cell_renderer_expander_get_type ())
+#define EMPATHY_CELL_RENDERER_EXPANDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EMPATHY_TYPE_CELL_RENDERER_EXPANDER, EmpathyCellRendererExpander))
+#define EMPATHY_CELL_RENDERER_EXPANDER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EMPATHY_TYPE_CELL_RENDERER_EXPANDER, EmpathyCellRendererExpanderClass))
+#define EMPATHY_IS_CELL_RENDERER_EXPANDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EMPATHY_TYPE_CELL_RENDERER_EXPANDER))
+#define EMPATHY_IS_CELL_RENDERER_EXPANDER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EMPATHY_TYPE_CELL_RENDERER_EXPANDER))
+#define EMPATHY_CELL_RENDERER_EXPANDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_CELL_RENDERER_EXPANDER, EmpathyCellRendererExpanderClass))
+
+typedef struct _EmpathyCellRendererExpander EmpathyCellRendererExpander;
+typedef struct _EmpathyCellRendererExpanderClass EmpathyCellRendererExpanderClass;
+
+struct _EmpathyCellRendererExpander {
+ GtkCellRenderer parent;
+ gpointer priv;
+};
+
+struct _EmpathyCellRendererExpanderClass {
+ GtkCellRendererClass parent_class;
+
+ /* Padding for future expansion */
+ void (*_gtk_reserved1) (void);
+ void (*_gtk_reserved2) (void);
+ void (*_gtk_reserved3) (void);
+ void (*_gtk_reserved4) (void);
+};
+
+GType empathy_cell_renderer_expander_get_type (void) G_GNUC_CONST;
+GtkCellRenderer *empathy_cell_renderer_expander_new (void);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CELL_RENDERER_EXPANDER_H__ */
diff --git a/trunk/libempathy-gtk/empathy-cell-renderer-text.c b/trunk/libempathy-gtk/empathy-cell-renderer-text.c
new file mode 100644
index 000000000..c31a013aa
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-cell-renderer-text.c
@@ -0,0 +1,366 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <libempathy/empathy-utils.h>
+#include "empathy-cell-renderer-text.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyCellRendererText)
+typedef struct {
+ gchar *name;
+ gchar *status;
+ gboolean is_group;
+
+ gboolean is_valid;
+ gboolean is_selected;
+
+ gboolean show_status;
+} EmpathyCellRendererTextPriv;
+
+static void cell_renderer_text_finalize (GObject *object);
+static void cell_renderer_text_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void cell_renderer_text_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void cell_renderer_text_get_size (GtkCellRenderer *cell,
+ GtkWidget *widget,
+ GdkRectangle *cell_area,
+ gint *x_offset,
+ gint *y_offset,
+ gint *width,
+ gint *height);
+static void cell_renderer_text_render (GtkCellRenderer *cell,
+ GdkDrawable *window,
+ GtkWidget *widget,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GdkRectangle *expose_area,
+ GtkCellRendererState flags);
+static void cell_renderer_text_update_text (EmpathyCellRendererText *cell,
+ GtkWidget *widget,
+ gboolean selected);
+
+/* Properties */
+enum {
+ PROP_0,
+ PROP_NAME,
+ PROP_STATUS,
+ PROP_IS_GROUP,
+ PROP_SHOW_STATUS,
+};
+
+G_DEFINE_TYPE (EmpathyCellRendererText, empathy_cell_renderer_text, GTK_TYPE_CELL_RENDERER_TEXT);
+
+static void
+empathy_cell_renderer_text_class_init (EmpathyCellRendererTextClass *klass)
+{
+ GObjectClass *object_class;
+ GtkCellRendererClass *cell_class;
+
+ object_class = G_OBJECT_CLASS (klass);
+ cell_class = GTK_CELL_RENDERER_CLASS (klass);
+
+ object_class->finalize = cell_renderer_text_finalize;
+
+ object_class->get_property = cell_renderer_text_get_property;
+ object_class->set_property = cell_renderer_text_set_property;
+
+ cell_class->get_size = cell_renderer_text_get_size;
+ cell_class->render = cell_renderer_text_render;
+
+ g_object_class_install_property (object_class,
+ PROP_NAME,
+ g_param_spec_string ("name",
+ "Name",
+ "Contact name",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_STATUS,
+ g_param_spec_string ("status",
+ "Status",
+ "Contact status string",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_IS_GROUP,
+ g_param_spec_boolean ("is_group",
+ "Is group",
+ "Whether this cell is a group",
+ FALSE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_SHOW_STATUS,
+ g_param_spec_boolean ("show-status",
+ "Show status",
+ "Whether to show the status line",
+ TRUE,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof (EmpathyCellRendererTextPriv));
+}
+
+static void
+empathy_cell_renderer_text_init (EmpathyCellRendererText *cell)
+{
+ EmpathyCellRendererTextPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (cell,
+ EMPATHY_TYPE_CELL_RENDERER_TEXT, EmpathyCellRendererTextPriv);
+
+ cell->priv = priv;
+ g_object_set (cell,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ NULL);
+
+ priv->name = g_strdup ("");
+ priv->status = g_strdup ("");
+ priv->show_status = TRUE;
+}
+
+static void
+cell_renderer_text_finalize (GObject *object)
+{
+ EmpathyCellRendererText *cell;
+ EmpathyCellRendererTextPriv *priv;
+
+ cell = EMPATHY_CELL_RENDERER_TEXT (object);
+ priv = GET_PRIV (cell);
+
+ g_free (priv->name);
+ g_free (priv->status);
+
+ (G_OBJECT_CLASS (empathy_cell_renderer_text_parent_class)->finalize) (object);
+}
+
+static void
+cell_renderer_text_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyCellRendererText *cell;
+ EmpathyCellRendererTextPriv *priv;
+
+ cell = EMPATHY_CELL_RENDERER_TEXT (object);
+ priv = GET_PRIV (cell);
+
+ switch (param_id) {
+ case PROP_NAME:
+ g_value_set_string (value, priv->name);
+ break;
+ case PROP_STATUS:
+ g_value_set_string (value, priv->status);
+ break;
+ case PROP_IS_GROUP:
+ g_value_set_boolean (value, priv->is_group);
+ break;
+ case PROP_SHOW_STATUS:
+ g_value_set_boolean (value, priv->show_status);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+cell_renderer_text_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyCellRendererText *cell;
+ EmpathyCellRendererTextPriv *priv;
+ const gchar *str;
+
+ cell = EMPATHY_CELL_RENDERER_TEXT (object);
+ priv = GET_PRIV (cell);
+
+ switch (param_id) {
+ case PROP_NAME:
+ g_free (priv->name);
+ str = g_value_get_string (value);
+ priv->name = g_strdup (str ? str : "");
+ g_strdelimit (priv->name, "\n\r\t", ' ');
+ priv->is_valid = FALSE;
+ break;
+ case PROP_STATUS:
+ g_free (priv->status);
+ str = g_value_get_string (value);
+ priv->status = g_strdup (str ? str : "");
+ g_strdelimit (priv->status, "\n\r\t", ' ');
+ priv->is_valid = FALSE;
+ break;
+ case PROP_IS_GROUP:
+ priv->is_group = g_value_get_boolean (value);
+ priv->is_valid = FALSE;
+ break;
+ case PROP_SHOW_STATUS:
+ priv->show_status = g_value_get_boolean (value);
+ priv->is_valid = FALSE;
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+cell_renderer_text_get_size (GtkCellRenderer *cell,
+ GtkWidget *widget,
+ GdkRectangle *cell_area,
+ gint *x_offset,
+ gint *y_offset,
+ gint *width,
+ gint *height)
+{
+ EmpathyCellRendererText *celltext;
+ EmpathyCellRendererTextPriv *priv;
+
+ celltext = EMPATHY_CELL_RENDERER_TEXT (cell);
+ priv = GET_PRIV (cell);
+
+ /* Only update if not already valid so we get the right size. */
+ cell_renderer_text_update_text (celltext, widget, priv->is_selected);
+
+ (GTK_CELL_RENDERER_CLASS (empathy_cell_renderer_text_parent_class)->get_size) (cell, widget,
+ cell_area,
+ x_offset, y_offset,
+ width, height);
+}
+
+static void
+cell_renderer_text_render (GtkCellRenderer *cell,
+ GdkWindow *window,
+ GtkWidget *widget,
+ GdkRectangle *background_area,
+ GdkRectangle *cell_area,
+ GdkRectangle *expose_area,
+ GtkCellRendererState flags)
+{
+ EmpathyCellRendererText *celltext;
+
+ celltext = EMPATHY_CELL_RENDERER_TEXT (cell);
+
+ cell_renderer_text_update_text (celltext,
+ widget,
+ (flags & GTK_CELL_RENDERER_SELECTED));
+
+ (GTK_CELL_RENDERER_CLASS (empathy_cell_renderer_text_parent_class)->render) (
+ cell, window,
+ widget,
+ background_area,
+ cell_area,
+ expose_area, flags);
+}
+
+static void
+cell_renderer_text_update_text (EmpathyCellRendererText *cell,
+ GtkWidget *widget,
+ gboolean selected)
+{
+ EmpathyCellRendererTextPriv *priv;
+ PangoAttrList *attr_list;
+ PangoAttribute *attr_color, *attr_style, *attr_size;
+ GtkStyle *style;
+ gchar *str;
+
+ priv = GET_PRIV (cell);
+
+ if (priv->is_valid && priv->is_selected == selected) {
+ return;
+ }
+
+ if (priv->is_group) {
+ g_object_set (cell,
+ "visible", TRUE,
+ "weight", PANGO_WEIGHT_BOLD,
+ "text", priv->name,
+ "attributes", NULL,
+ "xpad", 1,
+ "ypad", 1,
+ NULL);
+
+ priv->is_selected = selected;
+ priv->is_valid = TRUE;
+ return;
+ }
+
+ style = gtk_widget_get_style (widget);
+
+ attr_list = pango_attr_list_new ();
+
+ attr_style = pango_attr_style_new (PANGO_STYLE_ITALIC);
+ attr_style->start_index = strlen (priv->name) + 1;
+ attr_style->end_index = -1;
+ pango_attr_list_insert (attr_list, attr_style);
+
+ if (!selected) {
+ GdkColor color;
+
+ color = style->text_aa[GTK_STATE_NORMAL];
+
+ attr_color = pango_attr_foreground_new (color.red, color.green, color.blue);
+ attr_color->start_index = attr_style->start_index;
+ attr_color->end_index = -1;
+ pango_attr_list_insert (attr_list, attr_color);
+ }
+
+ attr_size = pango_attr_size_new (pango_font_description_get_size (style->font_desc) / 1.2);
+
+ attr_size->start_index = attr_style->start_index;
+ attr_size->end_index = -1;
+ pango_attr_list_insert (attr_list, attr_size);
+
+ if (!priv->status || !priv->status[0] || !priv->show_status) {
+ str = g_strdup (priv->name);
+ } else {
+ str = g_strdup_printf ("%s\n%s", priv->name, priv->status);
+ }
+
+ g_object_set (cell,
+ "visible", TRUE,
+ "weight", PANGO_WEIGHT_NORMAL,
+ "text", str,
+ "attributes", attr_list,
+ "xpad", 0,
+ "ypad", 1,
+ NULL);
+
+ g_free (str);
+ pango_attr_list_unref (attr_list);
+
+ priv->is_selected = selected;
+ priv->is_valid = TRUE;
+}
+
+GtkCellRenderer *
+empathy_cell_renderer_text_new (void)
+{
+ return g_object_new (EMPATHY_TYPE_CELL_RENDERER_TEXT, NULL);
+}
diff --git a/trunk/libempathy-gtk/empathy-cell-renderer-text.h b/trunk/libempathy-gtk/empathy-cell-renderer-text.h
new file mode 100644
index 000000000..7de8b2d08
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-cell-renderer-text.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ */
+
+#ifndef __EMPATHY_CELL_RENDERER_TEXT_H__
+#define __EMPATHY_CELL_RENDERER_TEXT_H__
+
+#include <gtk/gtkcellrenderertext.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CELL_RENDERER_TEXT (empathy_cell_renderer_text_get_type ())
+#define EMPATHY_CELL_RENDERER_TEXT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CELL_RENDERER_TEXT, EmpathyCellRendererText))
+#define EMPATHY_CELL_RENDERER_TEXT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_CELL_RENDERER_TEXT, EmpathyCellRendererTextClass))
+#define EMPATHY_IS_CELL_RENDERER_TEXT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CELL_RENDERER_TEXT))
+#define EMPATHY_IS_CELL_RENDERER_TEXT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CELL_RENDERER_TEXT))
+#define EMPATHY_CELL_RENDERER_TEXT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CELL_RENDERER_TEXT, EmpathyCellRendererTextClass))
+
+typedef struct _EmpathyCellRendererText EmpathyCellRendererText;
+typedef struct _EmpathyCellRendererTextClass EmpathyCellRendererTextClass;
+
+struct _EmpathyCellRendererText {
+ GtkCellRendererText parent;
+ gpointer priv;
+};
+
+struct _EmpathyCellRendererTextClass {
+ GtkCellRendererTextClass parent_class;
+};
+
+GType empathy_cell_renderer_text_get_type (void) G_GNUC_CONST;
+GtkCellRenderer * empathy_cell_renderer_text_new (void);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CELL_RENDERER_TEXT_H__ */
diff --git a/trunk/libempathy-gtk/empathy-chat-view.c b/trunk/libempathy-gtk/empathy-chat-view.c
new file mode 100644
index 000000000..2131cecb4
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-chat-view.c
@@ -0,0 +1,1468 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2002-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <string.h>
+#include <time.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkimage.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtkimagemenuitem.h>
+#include <gtk/gtkstock.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtksizegroup.h>
+#include <glade/glade.h>
+
+#include <telepathy-glib/util.h>
+#include <libmissioncontrol/mc-account.h>
+
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-chat-view.h"
+#include "empathy-chat.h"
+#include "empathy-conf.h"
+#include "empathy-theme-manager.h"
+#include "empathy-ui-utils.h"
+#include "empathy-smiley-manager.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_CHAT
+#include <libempathy/empathy-debug.h>
+
+/* Number of seconds between timestamps when using normal mode, 5 minutes. */
+#define TIMESTAMP_INTERVAL 300
+
+#define MAX_LINES 800
+#define MAX_SCROLL_TIME 0.4 /* seconds */
+#define SCROLL_DELAY 33 /* milliseconds */
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyChatView)
+typedef struct {
+ GtkTextBuffer *buffer;
+
+ EmpathyTheme *theme;
+
+ time_t last_timestamp;
+
+ gboolean allow_scrolling;
+ guint scroll_timeout;
+ GTimer *scroll_time;
+
+ GtkTextMark *find_mark_previous;
+ GtkTextMark *find_mark_next;
+ gboolean find_wrapped;
+ gboolean find_last_direction;
+
+ /* This is for the group chat so we know if the "other" last contact
+ * changed, so we know whether to insert a header or not.
+ */
+ EmpathyContact *last_contact;
+
+ guint notify_system_fonts_id;
+ guint notify_show_avatars_id;
+} EmpathyChatViewPriv;
+
+static void chat_view_finalize (GObject *object);
+static gboolean chat_view_drag_motion (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time);
+static void chat_view_size_allocate (GtkWidget *widget,
+ GtkAllocation *alloc);
+static void chat_view_setup_tags (EmpathyChatView *view);
+static void chat_view_system_font_update (EmpathyChatView *view);
+static void chat_view_notify_system_font_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data);
+static void chat_view_notify_show_avatars_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data);
+static void chat_view_populate_popup (EmpathyChatView *view,
+ GtkMenu *menu,
+ gpointer user_data);
+static gboolean chat_view_event_cb (EmpathyChatView *view,
+ GdkEventMotion *event,
+ GtkTextTag *tag);
+static gboolean chat_view_url_event_cb (GtkTextTag *tag,
+ GObject *object,
+ GdkEvent *event,
+ GtkTextIter *iter,
+ GtkTextBuffer *buffer);
+static void chat_view_open_address_cb (GtkMenuItem *menuitem,
+ const gchar *url);
+static void chat_view_copy_address_cb (GtkMenuItem *menuitem,
+ const gchar *url);
+static void chat_view_clear_view_cb (GtkMenuItem *menuitem,
+ EmpathyChatView *view);
+static gboolean chat_view_is_scrolled_down (EmpathyChatView *view);
+static void chat_view_theme_changed_cb (EmpathyThemeManager *manager,
+ EmpathyChatView *view);
+static void chat_view_theme_notify_cb (EmpathyTheme *theme,
+ GParamSpec *param,
+ EmpathyChatView *view);
+
+G_DEFINE_TYPE (EmpathyChatView, empathy_chat_view, GTK_TYPE_TEXT_VIEW);
+
+static void
+empathy_chat_view_class_init (EmpathyChatViewClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->finalize = chat_view_finalize;
+ widget_class->size_allocate = chat_view_size_allocate;
+ widget_class->drag_motion = chat_view_drag_motion;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyChatViewPriv));
+}
+
+static void
+empathy_chat_view_init (EmpathyChatView *view)
+{
+ gboolean show_avatars;
+ EmpathyChatViewPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (view,
+ EMPATHY_TYPE_CHAT_VIEW, EmpathyChatViewPriv);
+
+ view->priv = priv;
+ priv->buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+ priv->last_timestamp = 0;
+ priv->allow_scrolling = TRUE;
+
+ g_object_set (view,
+ "wrap-mode", GTK_WRAP_WORD_CHAR,
+ "editable", FALSE,
+ "cursor-visible", FALSE,
+ NULL);
+
+ priv->notify_system_fonts_id =
+ empathy_conf_notify_add (empathy_conf_get (),
+ "/desktop/gnome/interface/document_font_name",
+ chat_view_notify_system_font_cb,
+ view);
+ chat_view_system_font_update (view);
+
+ priv->notify_show_avatars_id =
+ empathy_conf_notify_add (empathy_conf_get (),
+ EMPATHY_PREFS_UI_SHOW_AVATARS,
+ chat_view_notify_show_avatars_cb,
+ view);
+
+ chat_view_setup_tags (view);
+
+ empathy_theme_manager_apply_saved (empathy_theme_manager_get (), view);
+
+ show_avatars = FALSE;
+ empathy_conf_get_bool (empathy_conf_get (),
+ EMPATHY_PREFS_UI_SHOW_AVATARS,
+ &show_avatars);
+
+ empathy_theme_set_show_avatars (priv->theme, show_avatars);
+
+ g_signal_connect (view,
+ "populate-popup",
+ G_CALLBACK (chat_view_populate_popup),
+ NULL);
+
+ g_signal_connect_object (empathy_theme_manager_get (),
+ "theme-changed",
+ G_CALLBACK (chat_view_theme_changed_cb),
+ view,
+ 0);
+}
+
+static void
+chat_view_finalize (GObject *object)
+{
+ EmpathyChatView *view;
+ EmpathyChatViewPriv *priv;
+
+ view = EMPATHY_CHAT_VIEW (object);
+ priv = GET_PRIV (view);
+
+ DEBUG ("finalize: %p", object);
+
+ empathy_conf_notify_remove (empathy_conf_get (), priv->notify_system_fonts_id);
+ empathy_conf_notify_remove (empathy_conf_get (), priv->notify_show_avatars_id);
+
+ if (priv->last_contact) {
+ g_object_unref (priv->last_contact);
+ }
+ if (priv->scroll_time) {
+ g_timer_destroy (priv->scroll_time);
+ }
+ if (priv->scroll_timeout) {
+ g_source_remove (priv->scroll_timeout);
+ }
+
+ if (priv->theme) {
+ g_signal_handlers_disconnect_by_func (priv->theme,
+ chat_view_theme_notify_cb,
+ view);
+ g_object_unref (priv->theme);
+ }
+
+ G_OBJECT_CLASS (empathy_chat_view_parent_class)->finalize (object);
+}
+
+static gboolean
+chat_view_drag_motion (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time)
+{
+ /* Don't handle drag motion, since we don't want the view to scroll as
+ * the result of dragging something across it.
+ */
+
+ return FALSE;
+}
+
+static void
+chat_view_size_allocate (GtkWidget *widget,
+ GtkAllocation *alloc)
+{
+ gboolean down;
+
+ down = chat_view_is_scrolled_down (EMPATHY_CHAT_VIEW (widget));
+
+ GTK_WIDGET_CLASS (empathy_chat_view_parent_class)->size_allocate (widget, alloc);
+
+ if (down) {
+ GtkAdjustment *adj;
+
+ adj = GTK_TEXT_VIEW (widget)->vadjustment;
+ gtk_adjustment_set_value (adj, adj->upper - adj->page_size);
+ }
+}
+
+static void
+chat_view_setup_tags (EmpathyChatView *view)
+{
+ EmpathyChatViewPriv *priv;
+ GtkTextTag *tag;
+
+ priv = GET_PRIV (view);
+
+ gtk_text_buffer_create_tag (priv->buffer,
+ "cut",
+ NULL);
+
+ /* FIXME: Move to the theme and come up with something that looks a bit
+ * nicer.
+ */
+ gtk_text_buffer_create_tag (priv->buffer,
+ "highlight",
+ "background", "yellow",
+ NULL);
+
+ tag = gtk_text_buffer_create_tag (priv->buffer,
+ "link",
+ NULL);
+
+ g_signal_connect (tag,
+ "event",
+ G_CALLBACK (chat_view_url_event_cb),
+ priv->buffer);
+
+ g_signal_connect (view,
+ "motion-notify-event",
+ G_CALLBACK (chat_view_event_cb),
+ tag);
+}
+
+static void
+chat_view_system_font_update (EmpathyChatView *view)
+{
+ PangoFontDescription *font_description = NULL;
+ gchar *font_name;
+
+ if (empathy_conf_get_string (empathy_conf_get (),
+ "/desktop/gnome/interface/document_font_name",
+ &font_name) && font_name) {
+ font_description = pango_font_description_from_string (font_name);
+ g_free (font_name);
+ } else {
+ font_description = NULL;
+ }
+
+ gtk_widget_modify_font (GTK_WIDGET (view), font_description);
+
+ if (font_description) {
+ pango_font_description_free (font_description);
+ }
+}
+
+static void
+chat_view_notify_system_font_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ EmpathyChatView *view;
+ EmpathyChatViewPriv *priv;
+ gboolean show_avatars = FALSE;
+
+ view = user_data;
+ priv = GET_PRIV (view);
+
+ chat_view_system_font_update (view);
+
+ /* Ugly, again, to adjust the vertical position of the nick... Will fix
+ * this when reworking the theme manager so that view register
+ * themselves with it instead of the other way around.
+ */
+ empathy_conf_get_bool (conf,
+ EMPATHY_PREFS_UI_SHOW_AVATARS,
+ &show_avatars);
+
+ empathy_theme_set_show_avatars (priv->theme, show_avatars);
+}
+
+static void
+chat_view_notify_show_avatars_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ EmpathyChatView *view;
+ EmpathyChatViewPriv *priv;
+ gboolean show_avatars = FALSE;
+
+ view = user_data;
+ priv = GET_PRIV (view);
+
+ empathy_conf_get_bool (conf, key, &show_avatars);
+
+ empathy_theme_set_show_avatars (priv->theme, show_avatars);
+}
+
+static void
+chat_view_populate_popup (EmpathyChatView *view,
+ GtkMenu *menu,
+ gpointer user_data)
+{
+ EmpathyChatViewPriv *priv;
+ GtkTextTagTable *table;
+ GtkTextTag *tag;
+ gint x, y;
+ GtkTextIter iter, start, end;
+ GtkWidget *item;
+ gchar *str = NULL;
+
+ priv = GET_PRIV (view);
+
+ /* Clear menu item */
+ if (gtk_text_buffer_get_char_count (priv->buffer) > 0) {
+ item = gtk_menu_item_new ();
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+
+ item = gtk_image_menu_item_new_from_stock (GTK_STOCK_CLEAR, NULL);
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+
+ g_signal_connect (item,
+ "activate",
+ G_CALLBACK (chat_view_clear_view_cb),
+ view);
+ }
+
+ /* Link context menu items */
+ table = gtk_text_buffer_get_tag_table (priv->buffer);
+ tag = gtk_text_tag_table_lookup (table, "link");
+
+ gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y);
+
+ gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (view),
+ GTK_TEXT_WINDOW_WIDGET,
+ x, y,
+ &x, &y);
+
+ gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (view), &iter, x, y);
+
+ start = end = iter;
+
+ if (gtk_text_iter_backward_to_tag_toggle (&start, tag) &&
+ gtk_text_iter_forward_to_tag_toggle (&end, tag)) {
+ str = gtk_text_buffer_get_text (priv->buffer,
+ &start, &end, FALSE);
+ }
+
+ if (G_STR_EMPTY (str)) {
+ g_free (str);
+ return;
+ }
+
+ /* NOTE: Set data just to get the string freed when not needed. */
+ g_object_set_data_full (G_OBJECT (menu),
+ "url", str,
+ (GDestroyNotify) g_free);
+
+ item = gtk_menu_item_new ();
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+
+ item = gtk_menu_item_new_with_mnemonic (_("_Copy Link Address"));
+ g_signal_connect (item,
+ "activate",
+ G_CALLBACK (chat_view_copy_address_cb),
+ str);
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+
+ item = gtk_menu_item_new_with_mnemonic (_("_Open Link"));
+ g_signal_connect (item,
+ "activate",
+ G_CALLBACK (chat_view_open_address_cb),
+ str);
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+}
+
+static gboolean
+chat_view_event_cb (EmpathyChatView *view,
+ GdkEventMotion *event,
+ GtkTextTag *tag)
+{
+ static GdkCursor *hand = NULL;
+ static GdkCursor *beam = NULL;
+ GtkTextWindowType type;
+ GtkTextIter iter;
+ GdkWindow *win;
+ gint x, y, buf_x, buf_y;
+
+ type = gtk_text_view_get_window_type (GTK_TEXT_VIEW (view),
+ event->window);
+
+ if (type != GTK_TEXT_WINDOW_TEXT) {
+ return FALSE;
+ }
+
+ /* Get where the pointer really is. */
+ win = gtk_text_view_get_window (GTK_TEXT_VIEW (view), type);
+ if (!win) {
+ return FALSE;
+ }
+
+ gdk_window_get_pointer (win, &x, &y, NULL);
+
+ /* Get the iter where the cursor is at */
+ gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (view), type,
+ x, y,
+ &buf_x, &buf_y);
+
+ gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (view),
+ &iter,
+ buf_x, buf_y);
+
+ if (gtk_text_iter_has_tag (&iter, tag)) {
+ if (!hand) {
+ hand = gdk_cursor_new (GDK_HAND2);
+ beam = gdk_cursor_new (GDK_XTERM);
+ }
+ gdk_window_set_cursor (win, hand);
+ } else {
+ if (!beam) {
+ beam = gdk_cursor_new (GDK_XTERM);
+ }
+ gdk_window_set_cursor (win, beam);
+ }
+
+ return FALSE;
+}
+
+static gboolean
+chat_view_url_event_cb (GtkTextTag *tag,
+ GObject *object,
+ GdkEvent *event,
+ GtkTextIter *iter,
+ GtkTextBuffer *buffer)
+{
+ GtkTextIter start, end;
+ gchar *str;
+
+ /* If the link is being selected, don't do anything. */
+ gtk_text_buffer_get_selection_bounds (buffer, &start, &end);
+ if (gtk_text_iter_get_offset (&start) != gtk_text_iter_get_offset (&end)) {
+ return FALSE;
+ }
+
+ if (event->type == GDK_BUTTON_RELEASE && event->button.button == 1) {
+ start = end = *iter;
+
+ if (gtk_text_iter_backward_to_tag_toggle (&start, tag) &&
+ gtk_text_iter_forward_to_tag_toggle (&end, tag)) {
+ str = gtk_text_buffer_get_text (buffer,
+ &start,
+ &end,
+ FALSE);
+
+ empathy_url_show (str);
+ g_free (str);
+ }
+ }
+
+ return FALSE;
+}
+
+static void
+chat_view_open_address_cb (GtkMenuItem *menuitem, const gchar *url)
+{
+ empathy_url_show (url);
+}
+
+static void
+chat_view_copy_address_cb (GtkMenuItem *menuitem, const gchar *url)
+{
+ GtkClipboard *clipboard;
+
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+ gtk_clipboard_set_text (clipboard, url, -1);
+
+ clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY);
+ gtk_clipboard_set_text (clipboard, url, -1);
+}
+
+static void
+chat_view_clear_view_cb (GtkMenuItem *menuitem, EmpathyChatView *view)
+{
+ empathy_chat_view_clear (view);
+}
+
+static gboolean
+chat_view_is_scrolled_down (EmpathyChatView *view)
+{
+ GtkWidget *sw;
+
+ sw = gtk_widget_get_parent (GTK_WIDGET (view));
+ if (GTK_IS_SCROLLED_WINDOW (sw)) {
+ GtkAdjustment *vadj;
+
+ vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (sw));
+
+ if (vadj->value + vadj->page_size / 2 < vadj->upper - vadj->page_size) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+static void
+chat_view_maybe_trim_buffer (EmpathyChatView *view)
+{
+ EmpathyChatViewPriv *priv;
+ GtkTextIter top, bottom;
+ gint line;
+ gint remove;
+ GtkTextTagTable *table;
+ GtkTextTag *tag;
+
+ priv = GET_PRIV (view);
+
+ gtk_text_buffer_get_end_iter (priv->buffer, &bottom);
+ line = gtk_text_iter_get_line (&bottom);
+ if (line < MAX_LINES) {
+ return;
+ }
+
+ remove = line - MAX_LINES;
+ gtk_text_buffer_get_start_iter (priv->buffer, &top);
+
+ bottom = top;
+ if (!gtk_text_iter_forward_lines (&bottom, remove)) {
+ return;
+ }
+
+ /* Track backwords to a place where we can safely cut, we don't do it in
+ * the middle of a tag.
+ */
+ table = gtk_text_buffer_get_tag_table (priv->buffer);
+ tag = gtk_text_tag_table_lookup (table, "cut");
+ if (!tag) {
+ return;
+ }
+
+ if (!gtk_text_iter_forward_to_tag_toggle (&bottom, tag)) {
+ return;
+ }
+
+ if (!gtk_text_iter_equal (&top, &bottom)) {
+ gtk_text_buffer_delete (priv->buffer, &top, &bottom);
+ }
+}
+
+static void
+chat_view_theme_changed_cb (EmpathyThemeManager *manager,
+ EmpathyChatView *view)
+{
+ EmpathyChatViewPriv *priv;
+ gboolean show_avatars = FALSE;
+
+ priv = GET_PRIV (view);
+
+ empathy_theme_manager_apply_saved (manager, view);
+
+ /* Needed for now to update the "rise" property of the names to get it
+ * vertically centered.
+ */
+ empathy_conf_get_bool (empathy_conf_get (),
+ EMPATHY_PREFS_UI_SHOW_AVATARS,
+ &show_avatars);
+ empathy_theme_set_show_avatars (priv->theme, show_avatars);
+}
+
+/* Pads a pixbuf to the specified size, by centering it in a larger transparent
+ * pixbuf. Returns a new ref.
+ */
+static GdkPixbuf *
+chat_view_pad_to_size (GdkPixbuf *pixbuf,
+ gint width,
+ gint height,
+ gint extra_padding_right)
+{
+ gint src_width, src_height;
+ GdkPixbuf *padded;
+ gint x_offset, y_offset;
+
+ src_width = gdk_pixbuf_get_width (pixbuf);
+ src_height = gdk_pixbuf_get_height (pixbuf);
+
+ x_offset = (width - src_width) / 2;
+ y_offset = (height - src_height) / 2;
+
+ padded = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (pixbuf),
+ TRUE, /* alpha */
+ gdk_pixbuf_get_bits_per_sample (pixbuf),
+ width + extra_padding_right,
+ height);
+
+ gdk_pixbuf_fill (padded, 0);
+
+ gdk_pixbuf_copy_area (pixbuf,
+ 0, /* source coords */
+ 0,
+ src_width,
+ src_height,
+ padded,
+ x_offset, /* dest coords */
+ y_offset);
+
+ return padded;
+}
+
+typedef struct {
+ GdkPixbuf *pixbuf;
+ gchar *token;
+} AvatarData;
+
+static void
+chat_view_avatar_cache_data_free (gpointer ptr)
+{
+ AvatarData *data = ptr;
+
+ g_object_unref (data->pixbuf);
+ g_free (data->token);
+ g_slice_free (AvatarData, data);
+}
+
+GdkPixbuf *
+empathy_chat_view_get_avatar_pixbuf_with_cache (EmpathyContact *contact)
+{
+ AvatarData *data;
+ EmpathyAvatar *avatar;
+ GdkPixbuf *tmp_pixbuf;
+ GdkPixbuf *pixbuf = NULL;
+
+ /* Check if avatar is in cache and if it's up to date */
+ avatar = empathy_contact_get_avatar (contact);
+ data = g_object_get_data (G_OBJECT (contact), "chat-view-avatar-cache");
+ if (data) {
+ if (avatar && !tp_strdiff (avatar->token, data->token)) {
+ /* We have the avatar in cache */
+ return data->pixbuf;
+ }
+ }
+
+ /* Avatar not in cache, create pixbuf */
+ tmp_pixbuf = empathy_pixbuf_avatar_from_contact_scaled (contact, 32, 32);
+ if (tmp_pixbuf) {
+ pixbuf = chat_view_pad_to_size (tmp_pixbuf, 32, 32, 6);
+ g_object_unref (tmp_pixbuf);
+ }
+ if (!pixbuf) {
+ return NULL;
+ }
+
+ /* Insert new pixbuf in cache */
+ data = g_slice_new0 (AvatarData);
+ data->token = g_strdup (avatar->token);
+ data->pixbuf = pixbuf;
+
+ g_object_set_data_full (G_OBJECT (contact), "chat-view-avatar-cache",
+ data, chat_view_avatar_cache_data_free);
+
+ return data->pixbuf;
+}
+
+EmpathyChatView *
+empathy_chat_view_new (void)
+{
+ return g_object_new (EMPATHY_TYPE_CHAT_VIEW, NULL);
+}
+
+/* Code stolen from pidgin/gtkimhtml.c */
+static gboolean
+chat_view_scroll_cb (EmpathyChatView *view)
+{
+ EmpathyChatViewPriv *priv;
+ GtkAdjustment *adj;
+ gdouble max_val;
+
+ priv = GET_PRIV (view);
+ adj = GTK_TEXT_VIEW (view)->vadjustment;
+ max_val = adj->upper - adj->page_size;
+
+ g_return_val_if_fail (priv->scroll_time != NULL, FALSE);
+
+ if (g_timer_elapsed (priv->scroll_time, NULL) > MAX_SCROLL_TIME) {
+ /* time's up. jump to the end and kill the timer */
+ gtk_adjustment_set_value (adj, max_val);
+ g_timer_destroy (priv->scroll_time);
+ priv->scroll_time = NULL;
+ priv->scroll_timeout = 0;
+ return FALSE;
+ }
+
+ /* scroll by 1/3rd the remaining distance */
+ gtk_adjustment_set_value (adj, gtk_adjustment_get_value (adj) + ((max_val - gtk_adjustment_get_value (adj)) / 3));
+ return TRUE;
+}
+
+void
+empathy_chat_view_scroll_down (EmpathyChatView *view)
+{
+ EmpathyChatViewPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+
+ priv = GET_PRIV (view);
+
+ if (!priv->allow_scrolling) {
+ return;
+ }
+
+ DEBUG ("Scrolling down");
+
+ if (priv->scroll_time) {
+ g_timer_reset (priv->scroll_time);
+ } else {
+ priv->scroll_time = g_timer_new();
+ }
+ if (!priv->scroll_timeout) {
+ priv->scroll_timeout = g_timeout_add (SCROLL_DELAY,
+ (GSourceFunc) chat_view_scroll_cb,
+ view);
+ }
+}
+
+void
+empathy_chat_view_append_message (EmpathyChatView *view,
+ EmpathyMessage *msg)
+{
+ EmpathyChatViewPriv *priv = GET_PRIV (view);
+ gboolean bottom;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+ g_return_if_fail (EMPATHY_IS_MESSAGE (msg));
+
+ if (!empathy_message_get_body (msg)) {
+ return;
+ }
+
+ bottom = chat_view_is_scrolled_down (view);
+
+ chat_view_maybe_trim_buffer (view);
+
+ empathy_theme_append_message (priv->theme, view, msg);
+
+ if (bottom) {
+ empathy_chat_view_scroll_down (view);
+ }
+
+ if (priv->last_contact) {
+ g_object_unref (priv->last_contact);
+ }
+ priv->last_contact = g_object_ref (empathy_message_get_sender (msg));
+}
+
+void
+empathy_chat_view_append_event (EmpathyChatView *view,
+ const gchar *str)
+{
+ EmpathyChatViewPriv *priv;
+ gboolean bottom;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+ g_return_if_fail (!G_STR_EMPTY (str));
+
+ priv = GET_PRIV (view);
+
+ bottom = chat_view_is_scrolled_down (view);
+
+ chat_view_maybe_trim_buffer (view);
+
+ empathy_theme_append_event (priv->theme, view, str);
+
+ if (bottom) {
+ empathy_chat_view_scroll_down (view);
+ }
+
+ if (priv->last_contact) {
+ g_object_unref (priv->last_contact);
+ priv->last_contact = NULL;
+ }
+}
+
+void
+empathy_chat_view_append_button (EmpathyChatView *view,
+ const gchar *message,
+ GtkWidget *button1,
+ GtkWidget *button2)
+{
+ EmpathyChatViewPriv *priv;
+ GtkTextChildAnchor *anchor;
+ GtkTextIter iter;
+ gboolean bottom;
+ const gchar *tag;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+ g_return_if_fail (button1 != NULL);
+
+ priv = GET_PRIV (view);
+
+ tag = "invite";
+
+ bottom = chat_view_is_scrolled_down (view);
+
+ empathy_theme_append_timestamp (priv->theme, view, NULL, TRUE, TRUE);
+
+ if (message) {
+ empathy_theme_append_text (priv->theme, view, message, tag, NULL);
+ }
+
+ gtk_text_buffer_get_end_iter (priv->buffer, &iter);
+
+ anchor = gtk_text_buffer_create_child_anchor (priv->buffer, &iter);
+ gtk_text_view_add_child_at_anchor (GTK_TEXT_VIEW (view), button1, anchor);
+ gtk_widget_show (button1);
+
+ gtk_text_buffer_insert_with_tags_by_name (priv->buffer,
+ &iter,
+ " ",
+ 1,
+ tag,
+ NULL);
+
+ if (button2) {
+ gtk_text_buffer_get_end_iter (priv->buffer, &iter);
+
+ anchor = gtk_text_buffer_create_child_anchor (priv->buffer, &iter);
+ gtk_text_view_add_child_at_anchor (GTK_TEXT_VIEW (view), button2, anchor);
+ gtk_widget_show (button2);
+
+ gtk_text_buffer_insert_with_tags_by_name (priv->buffer,
+ &iter,
+ " ",
+ 1,
+ tag,
+ NULL);
+ }
+
+ gtk_text_buffer_get_end_iter (priv->buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name (priv->buffer,
+ &iter,
+ "\n\n",
+ 2,
+ tag,
+ NULL);
+
+ if (bottom) {
+ empathy_chat_view_scroll_down (view);
+ }
+
+ if (priv->last_contact) {
+ g_object_unref (priv->last_contact);
+ priv->last_contact = NULL;
+ }
+}
+
+void
+empathy_chat_view_scroll (EmpathyChatView *view,
+ gboolean allow_scrolling)
+{
+ EmpathyChatViewPriv *priv = GET_PRIV (view);
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+
+ DEBUG ("Scrolling %s", allow_scrolling ? "enabled" : "disabled");
+
+ priv->allow_scrolling = allow_scrolling;
+ if (allow_scrolling) {
+ empathy_chat_view_scroll_down (view);
+ }
+}
+
+gboolean
+empathy_chat_view_get_selection_bounds (EmpathyChatView *view,
+ GtkTextIter *start,
+ GtkTextIter *end)
+{
+ GtkTextBuffer *buffer;
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT_VIEW (view), FALSE);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ return gtk_text_buffer_get_selection_bounds (buffer, start, end);
+}
+
+void
+empathy_chat_view_clear (EmpathyChatView *view)
+{
+ GtkTextBuffer *buffer;
+ EmpathyChatViewPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+ gtk_text_buffer_set_text (buffer, "", -1);
+
+ /* We set these back to the initial values so we get
+ * timestamps when clearing the window to know when
+ * conversations start.
+ */
+ priv = GET_PRIV (view);
+
+ priv->last_timestamp = 0;
+}
+
+gboolean
+empathy_chat_view_find_previous (EmpathyChatView *view,
+ const gchar *search_criteria,
+ gboolean new_search)
+{
+ EmpathyChatViewPriv *priv;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter_at_mark;
+ GtkTextIter iter_match_start;
+ GtkTextIter iter_match_end;
+ gboolean found;
+ gboolean from_start = FALSE;
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT_VIEW (view), FALSE);
+ g_return_val_if_fail (search_criteria != NULL, FALSE);
+
+ priv = GET_PRIV (view);
+
+ buffer = priv->buffer;
+
+ if (G_STR_EMPTY (search_criteria)) {
+ if (priv->find_mark_previous) {
+ gtk_text_buffer_get_start_iter (buffer, &iter_at_mark);
+
+ gtk_text_buffer_move_mark (buffer,
+ priv->find_mark_previous,
+ &iter_at_mark);
+ gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (view),
+ priv->find_mark_previous,
+ 0.0,
+ TRUE,
+ 0.0,
+ 0.0);
+ gtk_text_buffer_select_range (buffer,
+ &iter_at_mark,
+ &iter_at_mark);
+ }
+
+ return FALSE;
+ }
+
+ if (new_search) {
+ from_start = TRUE;
+ }
+
+ if (priv->find_mark_previous) {
+ gtk_text_buffer_get_iter_at_mark (buffer,
+ &iter_at_mark,
+ priv->find_mark_previous);
+ } else {
+ gtk_text_buffer_get_end_iter (buffer, &iter_at_mark);
+ from_start = TRUE;
+ }
+
+ priv->find_last_direction = FALSE;
+
+ found = empathy_text_iter_backward_search (&iter_at_mark,
+ search_criteria,
+ &iter_match_start,
+ &iter_match_end,
+ NULL);
+
+ if (!found) {
+ gboolean result = FALSE;
+
+ if (from_start) {
+ return result;
+ }
+
+ /* Here we wrap around. */
+ if (!new_search && !priv->find_wrapped) {
+ priv->find_wrapped = TRUE;
+ result = empathy_chat_view_find_previous (view,
+ search_criteria,
+ FALSE);
+ priv->find_wrapped = FALSE;
+ }
+
+ return result;
+ }
+
+ /* Set new mark and show on screen */
+ if (!priv->find_mark_previous) {
+ priv->find_mark_previous = gtk_text_buffer_create_mark (buffer, NULL,
+ &iter_match_start,
+ TRUE);
+ } else {
+ gtk_text_buffer_move_mark (buffer,
+ priv->find_mark_previous,
+ &iter_match_start);
+ }
+
+ if (!priv->find_mark_next) {
+ priv->find_mark_next = gtk_text_buffer_create_mark (buffer, NULL,
+ &iter_match_end,
+ TRUE);
+ } else {
+ gtk_text_buffer_move_mark (buffer,
+ priv->find_mark_next,
+ &iter_match_end);
+ }
+
+ gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (view),
+ priv->find_mark_previous,
+ 0.0,
+ TRUE,
+ 0.5,
+ 0.5);
+
+ gtk_text_buffer_move_mark_by_name (buffer, "selection_bound", &iter_match_start);
+ gtk_text_buffer_move_mark_by_name (buffer, "insert", &iter_match_end);
+
+ return TRUE;
+}
+
+gboolean
+empathy_chat_view_find_next (EmpathyChatView *view,
+ const gchar *search_criteria,
+ gboolean new_search)
+{
+ EmpathyChatViewPriv *priv;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter_at_mark;
+ GtkTextIter iter_match_start;
+ GtkTextIter iter_match_end;
+ gboolean found;
+ gboolean from_start = FALSE;
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT_VIEW (view), FALSE);
+ g_return_val_if_fail (search_criteria != NULL, FALSE);
+
+ priv = GET_PRIV (view);
+
+ buffer = priv->buffer;
+
+ if (G_STR_EMPTY (search_criteria)) {
+ if (priv->find_mark_next) {
+ gtk_text_buffer_get_start_iter (buffer, &iter_at_mark);
+
+ gtk_text_buffer_move_mark (buffer,
+ priv->find_mark_next,
+ &iter_at_mark);
+ gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (view),
+ priv->find_mark_next,
+ 0.0,
+ TRUE,
+ 0.0,
+ 0.0);
+ gtk_text_buffer_select_range (buffer,
+ &iter_at_mark,
+ &iter_at_mark);
+ }
+
+ return FALSE;
+ }
+
+ if (new_search) {
+ from_start = TRUE;
+ }
+
+ if (priv->find_mark_next) {
+ gtk_text_buffer_get_iter_at_mark (buffer,
+ &iter_at_mark,
+ priv->find_mark_next);
+ } else {
+ gtk_text_buffer_get_start_iter (buffer, &iter_at_mark);
+ from_start = TRUE;
+ }
+
+ priv->find_last_direction = TRUE;
+
+ found = empathy_text_iter_forward_search (&iter_at_mark,
+ search_criteria,
+ &iter_match_start,
+ &iter_match_end,
+ NULL);
+
+ if (!found) {
+ gboolean result = FALSE;
+
+ if (from_start) {
+ return result;
+ }
+
+ /* Here we wrap around. */
+ if (!new_search && !priv->find_wrapped) {
+ priv->find_wrapped = TRUE;
+ result = empathy_chat_view_find_next (view,
+ search_criteria,
+ FALSE);
+ priv->find_wrapped = FALSE;
+ }
+
+ return result;
+ }
+
+ /* Set new mark and show on screen */
+ if (!priv->find_mark_next) {
+ priv->find_mark_next = gtk_text_buffer_create_mark (buffer, NULL,
+ &iter_match_end,
+ TRUE);
+ } else {
+ gtk_text_buffer_move_mark (buffer,
+ priv->find_mark_next,
+ &iter_match_end);
+ }
+
+ if (!priv->find_mark_previous) {
+ priv->find_mark_previous = gtk_text_buffer_create_mark (buffer, NULL,
+ &iter_match_start,
+ TRUE);
+ } else {
+ gtk_text_buffer_move_mark (buffer,
+ priv->find_mark_previous,
+ &iter_match_start);
+ }
+
+ gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (view),
+ priv->find_mark_next,
+ 0.0,
+ TRUE,
+ 0.5,
+ 0.5);
+
+ gtk_text_buffer_move_mark_by_name (buffer, "selection_bound", &iter_match_start);
+ gtk_text_buffer_move_mark_by_name (buffer, "insert", &iter_match_end);
+
+ return TRUE;
+}
+
+
+void
+empathy_chat_view_find_abilities (EmpathyChatView *view,
+ const gchar *search_criteria,
+ gboolean *can_do_previous,
+ gboolean *can_do_next)
+{
+ EmpathyChatViewPriv *priv;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter_at_mark;
+ GtkTextIter iter_match_start;
+ GtkTextIter iter_match_end;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+ g_return_if_fail (search_criteria != NULL);
+ g_return_if_fail (can_do_previous != NULL && can_do_next != NULL);
+
+ priv = GET_PRIV (view);
+
+ buffer = priv->buffer;
+
+ if (can_do_previous) {
+ if (priv->find_mark_previous) {
+ gtk_text_buffer_get_iter_at_mark (buffer,
+ &iter_at_mark,
+ priv->find_mark_previous);
+ } else {
+ gtk_text_buffer_get_start_iter (buffer, &iter_at_mark);
+ }
+
+ *can_do_previous = empathy_text_iter_backward_search (&iter_at_mark,
+ search_criteria,
+ &iter_match_start,
+ &iter_match_end,
+ NULL);
+ }
+
+ if (can_do_next) {
+ if (priv->find_mark_next) {
+ gtk_text_buffer_get_iter_at_mark (buffer,
+ &iter_at_mark,
+ priv->find_mark_next);
+ } else {
+ gtk_text_buffer_get_start_iter (buffer, &iter_at_mark);
+ }
+
+ *can_do_next = empathy_text_iter_forward_search (&iter_at_mark,
+ search_criteria,
+ &iter_match_start,
+ &iter_match_end,
+ NULL);
+ }
+}
+
+void
+empathy_chat_view_highlight (EmpathyChatView *view,
+ const gchar *text)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ GtkTextIter iter_start;
+ GtkTextIter iter_end;
+ GtkTextIter iter_match_start;
+ GtkTextIter iter_match_end;
+ gboolean found;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ gtk_text_buffer_get_start_iter (buffer, &iter);
+
+ gtk_text_buffer_get_bounds (buffer, &iter_start, &iter_end);
+ gtk_text_buffer_remove_tag_by_name (buffer, "highlight",
+ &iter_start,
+ &iter_end);
+
+ if (G_STR_EMPTY (text)) {
+ return;
+ }
+
+ while (1) {
+ found = empathy_text_iter_forward_search (&iter,
+ text,
+ &iter_match_start,
+ &iter_match_end,
+ NULL);
+
+ if (!found) {
+ break;
+ }
+
+ gtk_text_buffer_apply_tag_by_name (buffer, "highlight",
+ &iter_match_start,
+ &iter_match_end);
+
+ iter = iter_match_end;
+ gtk_text_iter_forward_char (&iter);
+ }
+}
+
+void
+empathy_chat_view_copy_clipboard (EmpathyChatView *view)
+{
+ GtkTextBuffer *buffer;
+ GtkClipboard *clipboard;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+
+ gtk_text_buffer_copy_clipboard (buffer, clipboard);
+}
+
+EmpathyTheme *
+empathy_chat_view_get_theme (EmpathyChatView *view)
+{
+ EmpathyChatViewPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT_VIEW (view), NULL);
+
+ priv = GET_PRIV (view);
+
+ return priv->theme;
+}
+
+static void
+chat_view_theme_notify_cb (EmpathyTheme *theme,
+ GParamSpec *param,
+ EmpathyChatView *view)
+{
+ empathy_theme_update_view (theme, view);
+}
+
+void
+empathy_chat_view_set_theme (EmpathyChatView *view, EmpathyTheme *theme)
+{
+ EmpathyChatViewPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+ g_return_if_fail (EMPATHY_IS_THEME (theme));
+
+ priv = GET_PRIV (view);
+
+ if (priv->theme) {
+ g_signal_handlers_disconnect_by_func (priv->theme,
+ chat_view_theme_notify_cb,
+ view);
+ g_object_unref (priv->theme);
+ }
+
+ priv->theme = g_object_ref (theme);
+
+ empathy_theme_update_view (theme, view);
+ g_signal_connect (priv->theme, "notify",
+ G_CALLBACK (chat_view_theme_notify_cb),
+ view);
+
+ /* FIXME: Redraw all messages using the new theme */
+}
+
+void
+empathy_chat_view_set_margin (EmpathyChatView *view,
+ gint margin)
+{
+ EmpathyChatViewPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+
+ priv = GET_PRIV (view);
+
+ g_object_set (view,
+ "left-margin", margin,
+ "right-margin", margin,
+ NULL);
+}
+
+GtkWidget *
+empathy_chat_view_get_smiley_menu (GCallback callback,
+ gpointer user_data)
+{
+ EmpathySmileyManager *smiley_manager;
+ GSList *smileys, *l;
+ GtkWidget *menu;
+ gint x = 0;
+ gint y = 0;
+
+ g_return_val_if_fail (callback != NULL, NULL);
+
+ menu = gtk_menu_new ();
+
+ smiley_manager = empathy_smiley_manager_new ();
+ smileys = empathy_smiley_manager_get_all (smiley_manager);
+ for (l = smileys; l; l = l->next) {
+ EmpathySmiley *smiley;
+ GtkWidget *item;
+ GtkWidget *image;
+
+ smiley = l->data;
+ image = gtk_image_new_from_pixbuf (smiley->pixbuf);
+
+ item = gtk_image_menu_item_new_with_label ("");
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+
+ gtk_menu_attach (GTK_MENU (menu), item,
+ x, x + 1, y, y + 1);
+
+ gtk_widget_set_tooltip_text (item, smiley->str);
+
+ g_object_set_data (G_OBJECT (item), "smiley_text", smiley->str);
+ g_signal_connect (item, "activate", callback, user_data);
+
+ if (x > 3) {
+ y++;
+ x = 0;
+ } else {
+ x++;
+ }
+ }
+ g_object_unref (smiley_manager);
+
+ gtk_widget_show_all (menu);
+
+ return menu;
+}
+
+time_t
+empathy_chat_view_get_last_timestamp (EmpathyChatView *view)
+{
+ EmpathyChatViewPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT_VIEW (view), 0);
+
+ priv = GET_PRIV (view);
+
+ return priv->last_timestamp;
+}
+
+void
+empathy_chat_view_set_last_timestamp (EmpathyChatView *view,
+ time_t timestamp)
+{
+ EmpathyChatViewPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+
+ priv = GET_PRIV (view);
+
+ priv->last_timestamp = timestamp;
+}
+
+EmpathyContact *
+empathy_chat_view_get_last_contact (EmpathyChatView *view)
+{
+ EmpathyChatViewPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT_VIEW (view), NULL);
+
+ priv = GET_PRIV (view);
+
+ return priv->last_contact;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-chat-view.h b/trunk/libempathy-gtk/empathy-chat-view.h
new file mode 100644
index 000000000..0c54abdc7
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-chat-view.h
@@ -0,0 +1,101 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2002-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ */
+
+#ifndef __EMPATHY_CHAT_VIEW_H__
+#define __EMPATHY_CHAT_VIEW_H__
+
+#include <gtk/gtktextview.h>
+
+#include <libempathy/empathy-contact.h>
+#include <libempathy/empathy-message.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CHAT_VIEW (empathy_chat_view_get_type ())
+#define EMPATHY_CHAT_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CHAT_VIEW, EmpathyChatView))
+#define EMPATHY_CHAT_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_CHAT_VIEW, EmpathyChatViewClass))
+#define EMPATHY_IS_CHAT_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CHAT_VIEW))
+#define EMPATHY_IS_CHAT_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CHAT_VIEW))
+#define EMPATHY_CHAT_VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CHAT_VIEW, EmpathyChatViewClass))
+
+typedef struct _EmpathyChatView EmpathyChatView;
+typedef struct _EmpathyChatViewClass EmpathyChatViewClass;
+
+#include "empathy-theme.h"
+
+struct _EmpathyChatView {
+ GtkTextView parent;
+ gpointer priv;
+};
+
+struct _EmpathyChatViewClass {
+ GtkTextViewClass parent_class;
+};
+
+GType empathy_chat_view_get_type (void) G_GNUC_CONST;
+EmpathyChatView *empathy_chat_view_new (void);
+void empathy_chat_view_append_message (EmpathyChatView *view,
+ EmpathyMessage *msg);
+void empathy_chat_view_append_event (EmpathyChatView *view,
+ const gchar *str);
+void empathy_chat_view_append_button (EmpathyChatView *view,
+ const gchar *message,
+ GtkWidget *button1,
+ GtkWidget *button2);
+void empathy_chat_view_scroll (EmpathyChatView *view,
+ gboolean allow_scrolling);
+void empathy_chat_view_scroll_down (EmpathyChatView *view);
+gboolean empathy_chat_view_get_selection_bounds (EmpathyChatView *view,
+ GtkTextIter *start,
+ GtkTextIter *end);
+void empathy_chat_view_clear (EmpathyChatView *view);
+gboolean empathy_chat_view_find_previous (EmpathyChatView *view,
+ const gchar *search_criteria,
+ gboolean new_search);
+gboolean empathy_chat_view_find_next (EmpathyChatView *view,
+ const gchar *search_criteria,
+ gboolean new_search);
+void empathy_chat_view_find_abilities (EmpathyChatView *view,
+ const gchar *search_criteria,
+ gboolean *can_do_previous,
+ gboolean *can_do_next);
+void empathy_chat_view_highlight (EmpathyChatView *view,
+ const gchar *text);
+void empathy_chat_view_copy_clipboard (EmpathyChatView *view);
+EmpathyTheme * empathy_chat_view_get_theme (EmpathyChatView *view);
+void empathy_chat_view_set_theme (EmpathyChatView *view,
+ EmpathyTheme *theme);
+void empathy_chat_view_set_margin (EmpathyChatView *view,
+ gint margin);
+GtkWidget * empathy_chat_view_get_smiley_menu (GCallback callback,
+ gpointer user_data);
+time_t empathy_chat_view_get_last_timestamp (EmpathyChatView *view);
+void empathy_chat_view_set_last_timestamp (EmpathyChatView *view,
+ time_t timestamp);
+EmpathyContact * empathy_chat_view_get_last_contact (EmpathyChatView *view);
+GdkPixbuf * empathy_chat_view_get_avatar_pixbuf_with_cache (EmpathyContact *contact);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CHAT_VIEW_H__ */
diff --git a/trunk/libempathy-gtk/empathy-chat.c b/trunk/libempathy-gtk/empathy-chat.c
new file mode 100644
index 000000000..825cb740b
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-chat.c
@@ -0,0 +1,1775 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2002-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Geert-Jan Van den Bogaerde <geertjan@gnome.org>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <gdk/gdkkeysyms.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <libmissioncontrol/mission-control.h>
+#include <telepathy-glib/util.h>
+
+#include <libempathy/empathy-log-manager.h>
+#include <libempathy/empathy-contact-list.h>
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-chat.h"
+#include "empathy-conf.h"
+#include "empathy-spell.h"
+#include "empathy-spell-dialog.h"
+#include "empathy-contact-list-store.h"
+#include "empathy-contact-list-view.h"
+#include "empathy-contact-menu.h"
+#include "empathy-ui-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_CHAT
+#include <libempathy/empathy-debug.h>
+
+#define CHAT_DIR_CREATE_MODE (S_IRUSR | S_IWUSR | S_IXUSR)
+#define CHAT_FILE_CREATE_MODE (S_IRUSR | S_IWUSR)
+#define IS_ENTER(v) (v == GDK_Return || v == GDK_ISO_Enter || v == GDK_KP_Enter)
+#define MAX_INPUT_HEIGHT 150
+#define COMPOSING_STOP_TIMEOUT 5
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyChat)
+typedef struct {
+ EmpathyTpChat *tp_chat;
+ McAccount *account;
+ gchar *id;
+ gchar *name;
+ gchar *subject;
+ EmpathyContact *remote_contact;
+
+ EmpathyLogManager *log_manager;
+ MissionControl *mc;
+ GSList *sent_messages;
+ gint sent_messages_index;
+ GList *compositors;
+ GCompletion *completion;
+ guint composing_stop_timeout_id;
+ guint block_events_timeout_id;
+ TpHandleType handle_type;
+ gpointer token;
+ gint contacts_width;
+ gboolean has_input_vscroll;
+
+ GtkWidget *widget;
+ GtkWidget *hpaned;
+ GtkWidget *vbox_left;
+ GtkWidget *scrolled_window_chat;
+ GtkWidget *scrolled_window_input;
+ GtkWidget *scrolled_window_contacts;
+ GtkWidget *hbox_topic;
+ GtkWidget *label_topic;
+ GtkWidget *contact_list_view;
+} EmpathyChatPriv;
+
+enum {
+ COMPOSING,
+ NEW_MESSAGE,
+ LAST_SIGNAL
+};
+
+enum {
+ PROP_0,
+ PROP_TP_CHAT,
+ PROP_ACCOUNT,
+ PROP_ID,
+ PROP_NAME,
+ PROP_SUBJECT,
+ PROP_REMOTE_CONTACT,
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+G_DEFINE_TYPE (EmpathyChat, empathy_chat, GTK_TYPE_BIN);
+
+static void
+chat_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyChatPriv *priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_TP_CHAT:
+ g_value_set_object (value, priv->tp_chat);
+ break;
+ case PROP_ACCOUNT:
+ g_value_set_object (value, priv->account);
+ break;
+ case PROP_NAME:
+ g_value_set_string (value, priv->name);
+ break;
+ case PROP_ID:
+ g_value_set_string (value, priv->id);
+ break;
+ case PROP_SUBJECT:
+ g_value_set_string (value, priv->subject);
+ break;
+ case PROP_REMOTE_CONTACT:
+ g_value_set_object (value, priv->remote_contact);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+chat_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyChat *chat = EMPATHY_CHAT (object);
+
+ switch (param_id) {
+ case PROP_TP_CHAT:
+ empathy_chat_set_tp_chat (chat, EMPATHY_TP_CHAT (g_value_get_object (value)));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+chat_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+ McAccount *account;
+
+ account = mc_account_lookup (unique_name);
+
+ if (status == TP_CONNECTION_STATUS_CONNECTED && !priv->tp_chat &&
+ empathy_account_equal (account, priv->account) &&
+ priv->handle_type != TP_HANDLE_TYPE_NONE) {
+ DEBUG ("Account reconnected, request a new Text channel");
+ mission_control_request_channel_with_string_handle (mc,
+ priv->account,
+ TP_IFACE_CHANNEL_TYPE_TEXT,
+ priv->id,
+ priv->handle_type,
+ NULL, NULL);
+ }
+
+ g_object_unref (account);
+}
+
+static void
+chat_composing_remove_timeout (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+
+ priv = GET_PRIV (chat);
+
+ if (priv->composing_stop_timeout_id) {
+ g_source_remove (priv->composing_stop_timeout_id);
+ priv->composing_stop_timeout_id = 0;
+ }
+}
+
+static gboolean
+chat_composing_stop_timeout_cb (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+
+ priv = GET_PRIV (chat);
+
+ priv->composing_stop_timeout_id = 0;
+ empathy_tp_chat_set_state (priv->tp_chat,
+ TP_CHANNEL_CHAT_STATE_PAUSED);
+
+ return FALSE;
+}
+
+static void
+chat_composing_start (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+
+ priv = GET_PRIV (chat);
+
+ if (priv->composing_stop_timeout_id) {
+ /* Just restart the timeout */
+ chat_composing_remove_timeout (chat);
+ } else {
+ empathy_tp_chat_set_state (priv->tp_chat,
+ TP_CHANNEL_CHAT_STATE_COMPOSING);
+ }
+
+ priv->composing_stop_timeout_id = g_timeout_add_seconds (
+ COMPOSING_STOP_TIMEOUT,
+ (GSourceFunc) chat_composing_stop_timeout_cb,
+ chat);
+}
+
+static void
+chat_composing_stop (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+
+ priv = GET_PRIV (chat);
+
+ chat_composing_remove_timeout (chat);
+ empathy_tp_chat_set_state (priv->tp_chat,
+ TP_CHANNEL_CHAT_STATE_ACTIVE);
+}
+
+static void
+chat_sent_message_add (EmpathyChat *chat,
+ const gchar *str)
+{
+ EmpathyChatPriv *priv;
+ GSList *list;
+ GSList *item;
+
+ priv = GET_PRIV (chat);
+
+ /* Save the sent message in our repeat buffer */
+ list = priv->sent_messages;
+
+ /* Remove any other occurances of this msg */
+ while ((item = g_slist_find_custom (list, str, (GCompareFunc) strcmp)) != NULL) {
+ list = g_slist_remove_link (list, item);
+ g_free (item->data);
+ g_slist_free1 (item);
+ }
+
+ /* Trim the list to the last 10 items */
+ while (g_slist_length (list) > 10) {
+ item = g_slist_last (list);
+ if (item) {
+ list = g_slist_remove_link (list, item);
+ g_free (item->data);
+ g_slist_free1 (item);
+ }
+ }
+
+ /* Add new message */
+ list = g_slist_prepend (list, g_strdup (str));
+
+ /* Set list and reset the index */
+ priv->sent_messages = list;
+ priv->sent_messages_index = -1;
+}
+
+static const gchar *
+chat_sent_message_get_next (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+ gint max;
+
+ priv = GET_PRIV (chat);
+
+ if (!priv->sent_messages) {
+ DEBUG ("No sent messages, next message is NULL");
+ return NULL;
+ }
+
+ max = g_slist_length (priv->sent_messages) - 1;
+
+ if (priv->sent_messages_index < max) {
+ priv->sent_messages_index++;
+ }
+
+ DEBUG ("Returning next message index:%d", priv->sent_messages_index);
+
+ return g_slist_nth_data (priv->sent_messages, priv->sent_messages_index);
+}
+
+static const gchar *
+chat_sent_message_get_last (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
+
+ priv = GET_PRIV (chat);
+
+ if (!priv->sent_messages) {
+ DEBUG ("No sent messages, last message is NULL");
+ return NULL;
+ }
+
+ if (priv->sent_messages_index >= 0) {
+ priv->sent_messages_index--;
+ }
+
+ DEBUG ("Returning last message index:%d", priv->sent_messages_index);
+
+ return g_slist_nth_data (priv->sent_messages, priv->sent_messages_index);
+}
+
+static void
+chat_send (EmpathyChat *chat,
+ const gchar *msg)
+{
+ EmpathyChatPriv *priv;
+ EmpathyMessage *message;
+
+ priv = GET_PRIV (chat);
+
+ if (G_STR_EMPTY (msg)) {
+ return;
+ }
+
+ chat_sent_message_add (chat, msg);
+
+ if (g_str_has_prefix (msg, "/clear")) {
+ empathy_chat_view_clear (chat->view);
+ return;
+ }
+
+ message = empathy_message_new (msg);
+
+ empathy_tp_chat_send (priv->tp_chat, message);
+
+ g_object_unref (message);
+}
+
+static void
+chat_input_text_view_send (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+ gchar *msg;
+
+ priv = GET_PRIV (chat);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
+
+ gtk_text_buffer_get_bounds (buffer, &start, &end);
+ msg = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+
+ /* clear the input field */
+ gtk_text_buffer_set_text (buffer, "", -1);
+
+ chat_send (chat, msg);
+ g_free (msg);
+}
+
+static void
+chat_state_changed_cb (EmpathyTpChat *tp_chat,
+ EmpathyContact *contact,
+ TpChannelChatState state,
+ EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+ GList *l;
+ gboolean was_composing;
+
+ priv = GET_PRIV (chat);
+
+ if (empathy_contact_is_user (contact)) {
+ /* We don't care about our own chat state */
+ return;
+ }
+
+ was_composing = (priv->compositors != NULL);
+
+ /* Find the contact in the list. After that l is the list elem or NULL */
+ for (l = priv->compositors; l; l = l->next) {
+ if (contact == l->data) {
+ break;
+ }
+ }
+
+ switch (state) {
+ case TP_CHANNEL_CHAT_STATE_GONE:
+ case TP_CHANNEL_CHAT_STATE_INACTIVE:
+ case TP_CHANNEL_CHAT_STATE_PAUSED:
+ case TP_CHANNEL_CHAT_STATE_ACTIVE:
+ /* Contact is not composing */
+ if (l) {
+ priv->compositors = g_list_remove_link (priv->compositors, l);
+ g_object_unref (l->data);
+ g_list_free1 (l);
+ }
+ break;
+ case TP_CHANNEL_CHAT_STATE_COMPOSING:
+ /* Contact is composing */
+ if (!l) {
+ priv->compositors = g_list_prepend (priv->compositors,
+ g_object_ref (contact));
+ }
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ DEBUG ("Was composing: %s now composing: %s",
+ was_composing ? "yes" : "no",
+ priv->compositors ? "yes" : "no");
+
+ if ((was_composing && !priv->compositors) ||
+ (!was_composing && priv->compositors)) {
+ /* Composing state changed */
+ g_signal_emit (chat, signals[COMPOSING], 0,
+ priv->compositors != NULL);
+ }
+}
+
+static void
+chat_message_received_cb (EmpathyTpChat *tp_chat,
+ EmpathyMessage *message,
+ EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+ EmpathyContact *sender;
+
+ sender = empathy_message_get_sender (message);
+
+ DEBUG ("Appending new message from %s (%d)",
+ empathy_contact_get_name (sender),
+ empathy_contact_get_handle (sender));
+
+ if (priv->id) {
+ gboolean is_chatroom;
+
+ is_chatroom = priv->handle_type == TP_HANDLE_TYPE_ROOM;
+ empathy_log_manager_add_message (priv->log_manager,
+ priv->id, is_chatroom,
+ message);
+ }
+
+ empathy_chat_view_append_message (chat->view, message);
+
+ /* We received a message so the contact is no more composing */
+ chat_state_changed_cb (tp_chat, sender,
+ TP_CHANNEL_CHAT_STATE_ACTIVE,
+ chat);
+
+ g_signal_emit (chat, signals[NEW_MESSAGE], 0, message);
+}
+
+static void
+chat_send_error_cb (EmpathyTpChat *tp_chat,
+ EmpathyMessage *message,
+ TpChannelTextSendError error_code,
+ EmpathyChat *chat)
+{
+ const gchar *error;
+ gchar *str;
+
+ switch (error_code) {
+ case TP_CHANNEL_TEXT_SEND_ERROR_OFFLINE:
+ error = _("offline");
+ break;
+ case TP_CHANNEL_TEXT_SEND_ERROR_INVALID_CONTACT:
+ error = _("invalid contact");
+ break;
+ case TP_CHANNEL_TEXT_SEND_ERROR_PERMISSION_DENIED:
+ error = _("permission denied");
+ break;
+ case TP_CHANNEL_TEXT_SEND_ERROR_TOO_LONG:
+ error = _("too long message");
+ break;
+ case TP_CHANNEL_TEXT_SEND_ERROR_NOT_IMPLEMENTED:
+ error = _("not implemented");
+ break;
+ default:
+ error = _("unknown");
+ break;
+ }
+
+ str = g_strdup_printf (_("Error sending message '%s': %s"),
+ empathy_message_get_body (message),
+ error);
+ empathy_chat_view_append_event (chat->view, str);
+ g_free (str);
+}
+
+static void
+chat_property_changed_cb (EmpathyTpChat *tp_chat,
+ const gchar *name,
+ GValue *value,
+ EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ if (!tp_strdiff (name, "subject")) {
+ g_free (priv->subject);
+ priv->subject = g_value_dup_string (value);
+ g_object_notify (G_OBJECT (chat), "subject");
+
+ if (G_STR_EMPTY (priv->subject)) {
+ gtk_widget_hide (priv->hbox_topic);
+ } else {
+ gtk_label_set_text (GTK_LABEL (priv->label_topic), priv->subject);
+ gtk_widget_show (priv->hbox_topic);
+ }
+ if (priv->block_events_timeout_id == 0) {
+ gchar *str;
+
+ if (!G_STR_EMPTY (priv->subject)) {
+ str = g_strdup_printf (_("Topic set to: %s"), priv->subject);
+ } else {
+ str = g_strdup (_("No topic defined"));
+ }
+ empathy_chat_view_append_event (EMPATHY_CHAT (chat)->view, str);
+ g_free (str);
+ }
+ }
+ else if (!tp_strdiff (name, "name")) {
+ g_free (priv->name);
+ priv->name = g_value_dup_string (value);
+ g_object_notify (G_OBJECT (chat), "name");
+ }
+}
+
+static gboolean
+chat_get_is_command (const gchar *str)
+{
+ g_return_val_if_fail (str != NULL, FALSE);
+
+ if (str[0] != '/') {
+ return FALSE;
+ }
+
+ if (g_str_has_prefix (str, "/me")) {
+ return TRUE;
+ }
+ else if (g_str_has_prefix (str, "/nick")) {
+ return TRUE;
+ }
+ else if (g_str_has_prefix (str, "/topic")) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+chat_input_text_buffer_changed_cb (GtkTextBuffer *buffer,
+ EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+ GtkTextIter start, end;
+ gchar *str;
+ gboolean spell_checker = FALSE;
+
+ priv = GET_PRIV (chat);
+
+ if (gtk_text_buffer_get_char_count (buffer) == 0) {
+ chat_composing_stop (chat);
+ } else {
+ chat_composing_start (chat);
+ }
+
+ empathy_conf_get_bool (empathy_conf_get (),
+ EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED,
+ &spell_checker);
+
+ gtk_text_buffer_get_start_iter (buffer, &start);
+
+ if (!spell_checker) {
+ gtk_text_buffer_get_end_iter (buffer, &end);
+ gtk_text_buffer_remove_tag_by_name (buffer, "misspelled", &start, &end);
+ return;
+ }
+
+ if (!empathy_spell_supported ()) {
+ return;
+ }
+
+ /* NOTE: this is really inefficient, we shouldn't have to
+ reiterate the whole buffer each time and check each work
+ every time. */
+ while (TRUE) {
+ gboolean correct = FALSE;
+
+ /* if at start */
+ if (gtk_text_iter_is_start (&start)) {
+ end = start;
+
+ if (!gtk_text_iter_forward_word_end (&end)) {
+ /* no whole word yet */
+ break;
+ }
+ } else {
+ if (!gtk_text_iter_forward_word_end (&end)) {
+ /* must be the end of the buffer */
+ break;
+ }
+
+ start = end;
+ gtk_text_iter_backward_word_start (&start);
+ }
+
+ str = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+
+ /* spell check string */
+ if (!chat_get_is_command (str)) {
+ correct = empathy_spell_check (str);
+ } else {
+ correct = TRUE;
+ }
+
+ if (!correct) {
+ gtk_text_buffer_apply_tag_by_name (buffer, "misspelled", &start, &end);
+ } else {
+ gtk_text_buffer_remove_tag_by_name (buffer, "misspelled", &start, &end);
+ }
+
+ g_free (str);
+
+ /* set start iter to the end iters position */
+ start = end;
+ }
+}
+
+static gboolean
+chat_input_key_press_event_cb (GtkWidget *widget,
+ GdkEventKey *event,
+ EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+ GtkAdjustment *adj;
+ gdouble val;
+ GtkWidget *text_view_sw;
+
+ priv = GET_PRIV (chat);
+
+ /* Catch ctrl+up/down so we can traverse messages we sent */
+ if ((event->state & GDK_CONTROL_MASK) &&
+ (event->keyval == GDK_Up ||
+ event->keyval == GDK_Down)) {
+ GtkTextBuffer *buffer;
+ const gchar *str;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
+
+ if (event->keyval == GDK_Up) {
+ str = chat_sent_message_get_next (chat);
+ } else {
+ str = chat_sent_message_get_last (chat);
+ }
+
+ g_signal_handlers_block_by_func (buffer,
+ chat_input_text_buffer_changed_cb,
+ chat);
+ gtk_text_buffer_set_text (buffer, str ? str : "", -1);
+ g_signal_handlers_unblock_by_func (buffer,
+ chat_input_text_buffer_changed_cb,
+ chat);
+
+ return TRUE;
+ }
+
+ /* Catch enter but not ctrl/shift-enter */
+ if (IS_ENTER (event->keyval) &&
+ !(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK))) {
+ GtkTextView *view;
+
+ /* This is to make sure that kinput2 gets the enter. And if
+ * it's handled there we shouldn't send on it. This is because
+ * kinput2 uses Enter to commit letters. See:
+ * http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=104299
+ */
+
+ view = GTK_TEXT_VIEW (chat->input_text_view);
+ if (gtk_im_context_filter_keypress (view->im_context, event)) {
+ GTK_TEXT_VIEW (chat->input_text_view)->need_im_reset = TRUE;
+ return TRUE;
+ }
+
+ chat_input_text_view_send (chat);
+ return TRUE;
+ }
+
+ text_view_sw = gtk_widget_get_parent (GTK_WIDGET (chat->view));
+
+ if (IS_ENTER (event->keyval) &&
+ (event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK))) {
+ /* Newline for shift/control-enter. */
+ return FALSE;
+ }
+ if (!(event->state & GDK_CONTROL_MASK) &&
+ event->keyval == GDK_Page_Up) {
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (text_view_sw));
+ gtk_adjustment_set_value (adj, adj->value - adj->page_size);
+ return TRUE;
+ }
+ if ((event->state & GDK_CONTROL_MASK) != GDK_CONTROL_MASK &&
+ event->keyval == GDK_Page_Down) {
+ adj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (text_view_sw));
+ val = MIN (adj->value + adj->page_size, adj->upper - adj->page_size);
+ gtk_adjustment_set_value (adj, val);
+ return TRUE;
+ }
+ if (!(event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK)) &&
+ event->keyval == GDK_Tab) {
+ GtkTextBuffer *buffer;
+ GtkTextIter start, current;
+ gchar *nick, *completed;
+ GList *list, *completed_list;
+ gboolean is_start_of_buffer;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (EMPATHY_CHAT (chat)->input_text_view));
+ gtk_text_buffer_get_iter_at_mark (buffer, &current, gtk_text_buffer_get_insert (buffer));
+
+ /* Get the start of the nick to complete. */
+ gtk_text_buffer_get_iter_at_mark (buffer, &start, gtk_text_buffer_get_insert (buffer));
+ gtk_text_iter_backward_word_start (&start);
+ is_start_of_buffer = gtk_text_iter_is_start (&start);
+
+ list = empathy_contact_list_get_members (EMPATHY_CONTACT_LIST (priv->tp_chat));
+ g_completion_add_items (priv->completion, list);
+
+ nick = gtk_text_buffer_get_text (buffer, &start, &current, FALSE);
+ completed_list = g_completion_complete (priv->completion,
+ nick,
+ &completed);
+
+ g_free (nick);
+
+ if (completed) {
+ guint len;
+ const gchar *text;
+ gchar *complete_char = NULL;
+
+ gtk_text_buffer_delete (buffer, &start, &current);
+
+ len = g_list_length (completed_list);
+
+ if (len == 1) {
+ /* If we only have one hit, use that text
+ * instead of the text in completed since the
+ * completed text will use the typed string
+ * which might be cased all wrong.
+ * Fixes #120876
+ * */
+ text = empathy_contact_get_name (completed_list->data);
+ } else {
+ text = completed;
+ }
+
+ gtk_text_buffer_insert_at_cursor (buffer, text, strlen (text));
+
+ if (len == 1 && is_start_of_buffer &&
+ empathy_conf_get_string (empathy_conf_get (),
+ EMPATHY_PREFS_CHAT_NICK_COMPLETION_CHAR,
+ &complete_char) &&
+ complete_char != NULL) {
+ gtk_text_buffer_insert_at_cursor (buffer,
+ complete_char,
+ strlen (complete_char));
+ gtk_text_buffer_insert_at_cursor (buffer, " ", 1);
+ g_free (complete_char);
+ }
+
+ g_free (completed);
+ }
+
+ g_completion_clear_items (priv->completion);
+
+ g_list_foreach (list, (GFunc) g_object_unref, NULL);
+ g_list_free (list);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+chat_text_view_focus_in_event_cb (GtkWidget *widget,
+ GdkEvent *event,
+ EmpathyChat *chat)
+{
+ gtk_widget_grab_focus (chat->input_text_view);
+
+ return TRUE;
+}
+
+static gboolean
+chat_input_set_size_request_idle (gpointer sw)
+{
+ gtk_widget_set_size_request (sw, -1, MAX_INPUT_HEIGHT);
+
+ return FALSE;
+}
+
+static void
+chat_input_size_request_cb (GtkWidget *widget,
+ GtkRequisition *requisition,
+ EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+ GtkWidget *sw;
+
+ sw = gtk_widget_get_parent (widget);
+ if (requisition->height >= MAX_INPUT_HEIGHT && !priv->has_input_vscroll) {
+ g_idle_add (chat_input_set_size_request_idle, sw);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_ALWAYS);
+ priv->has_input_vscroll = TRUE;
+ }
+
+ if (requisition->height < MAX_INPUT_HEIGHT && priv->has_input_vscroll) {
+ gtk_widget_set_size_request (sw, -1, -1);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_NEVER);
+ priv->has_input_vscroll = FALSE;
+ }
+}
+
+static void
+chat_input_realize_cb (GtkWidget *widget,
+ EmpathyChat *chat)
+{
+ DEBUG ("Setting focus to the input text view");
+ gtk_widget_grab_focus (widget);
+}
+
+static void
+chat_insert_smiley_activate_cb (GtkWidget *menuitem,
+ EmpathyChat *chat)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ const gchar *smiley;
+
+ smiley = g_object_get_data (G_OBJECT (menuitem), "smiley_text");
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert (buffer, &iter, smiley, -1);
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert (buffer, &iter, " ", -1);
+}
+
+typedef struct {
+ EmpathyChat *chat;
+ gchar *word;
+
+ GtkTextIter start;
+ GtkTextIter end;
+} EmpathyChatSpell;
+
+static EmpathyChatSpell *
+chat_spell_new (EmpathyChat *chat,
+ const gchar *word,
+ GtkTextIter start,
+ GtkTextIter end)
+{
+ EmpathyChatSpell *chat_spell;
+
+ chat_spell = g_slice_new0 (EmpathyChatSpell);
+
+ chat_spell->chat = g_object_ref (chat);
+ chat_spell->word = g_strdup (word);
+ chat_spell->start = start;
+ chat_spell->end = end;
+
+ return chat_spell;
+}
+
+static void
+chat_spell_free (EmpathyChatSpell *chat_spell)
+{
+ g_object_unref (chat_spell->chat);
+ g_free (chat_spell->word);
+ g_slice_free (EmpathyChatSpell, chat_spell);
+}
+
+static void
+chat_text_check_word_spelling_cb (GtkMenuItem *menuitem,
+ EmpathyChatSpell *chat_spell)
+{
+ empathy_spell_dialog_show (chat_spell->chat,
+ &chat_spell->start,
+ &chat_spell->end,
+ chat_spell->word);
+}
+
+static void
+chat_input_populate_popup_cb (GtkTextView *view,
+ GtkMenu *menu,
+ EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+ GtkTextBuffer *buffer;
+ GtkTextTagTable *table;
+ GtkTextTag *tag;
+ gint x, y;
+ GtkTextIter iter, start, end;
+ GtkWidget *item;
+ gchar *str = NULL;
+ EmpathyChatSpell *chat_spell;
+ GtkWidget *smiley_menu;
+
+ priv = GET_PRIV (chat);
+
+ /* Add the emoticon menu. */
+ item = gtk_separator_menu_item_new ();
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+
+ item = gtk_menu_item_new_with_mnemonic (_("Insert Smiley"));
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+
+ smiley_menu = empathy_chat_view_get_smiley_menu (
+ G_CALLBACK (chat_insert_smiley_activate_cb),
+ chat);
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), smiley_menu);
+
+ /* Add the spell check menu item. */
+ buffer = gtk_text_view_get_buffer (view);
+ table = gtk_text_buffer_get_tag_table (buffer);
+
+ tag = gtk_text_tag_table_lookup (table, "misspelled");
+
+ gtk_widget_get_pointer (GTK_WIDGET (view), &x, &y);
+
+ gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (view),
+ GTK_TEXT_WINDOW_WIDGET,
+ x, y,
+ &x, &y);
+
+ gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (view), &iter, x, y);
+
+ start = end = iter;
+
+ if (gtk_text_iter_backward_to_tag_toggle (&start, tag) &&
+ gtk_text_iter_forward_to_tag_toggle (&end, tag)) {
+
+ str = gtk_text_buffer_get_text (buffer,
+ &start, &end, FALSE);
+ }
+
+ if (G_STR_EMPTY (str)) {
+ return;
+ }
+
+ chat_spell = chat_spell_new (chat, str, start, end);
+
+ g_object_set_data_full (G_OBJECT (menu),
+ "chat_spell", chat_spell,
+ (GDestroyNotify) chat_spell_free);
+
+ item = gtk_separator_menu_item_new ();
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+
+ item = gtk_menu_item_new_with_mnemonic (_("_Check Word Spelling..."));
+ g_signal_connect (item,
+ "activate",
+ G_CALLBACK (chat_text_check_word_spelling_cb),
+ chat_spell);
+ gtk_menu_shell_prepend (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+}
+
+static void
+chat_add_logs (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+ gboolean is_chatroom;
+ GList *messages, *l;
+ guint num_messages;
+ guint i;
+
+ if (!priv->id) {
+ return;
+ }
+
+ /* Turn off scrolling temporarily */
+ empathy_chat_view_scroll (chat->view, FALSE);
+
+ /* Add messages from last conversation */
+ is_chatroom = priv->handle_type == TP_HANDLE_TYPE_ROOM;
+ messages = empathy_log_manager_get_last_messages (priv->log_manager,
+ priv->account,
+ priv->id,
+ is_chatroom);
+ num_messages = g_list_length (messages);
+
+ /* Only keep the 10 last messages */
+ for (i = 0; num_messages - i > 10; i++) {
+ EmpathyMessage *message;
+
+ message = messages->data;
+ messages = g_list_remove (messages, message);
+ g_object_unref (message);
+ }
+
+ for (l = messages; l; l = l->next) {
+ empathy_chat_view_append_message (chat->view, l->data);
+ g_object_unref (l->data);
+ }
+ g_list_free (messages);
+
+ /* Turn back on scrolling */
+ empathy_chat_view_scroll (chat->view, TRUE);
+}
+
+static gint
+chat_contacts_completion_func (const gchar *s1,
+ const gchar *s2,
+ gsize n)
+{
+ gchar *tmp, *nick1, *nick2;
+ gint ret;
+
+ if (s1 == s2) {
+ return 0;
+ }
+ if (!s1 || !s2) {
+ return s1 ? -1 : +1;
+ }
+
+ tmp = g_utf8_normalize (s1, -1, G_NORMALIZE_DEFAULT);
+ nick1 = g_utf8_casefold (tmp, -1);
+ g_free (tmp);
+
+ tmp = g_utf8_normalize (s2, -1, G_NORMALIZE_DEFAULT);
+ nick2 = g_utf8_casefold (tmp, -1);
+ g_free (tmp);
+
+ ret = strncmp (nick1, nick2, n);
+
+ g_free (nick1);
+ g_free (nick2);
+
+ return ret;
+}
+
+static void
+chat_members_changed_cb (EmpathyTpChat *tp_chat,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ gchar *message,
+ gboolean is_member,
+ EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ if (priv->block_events_timeout_id == 0) {
+ gchar *str;
+
+ empathy_contact_run_until_ready (contact,
+ EMPATHY_CONTACT_READY_NAME,
+ NULL);
+
+ if (is_member) {
+ str = g_strdup_printf (_("%s has joined the room"),
+ empathy_contact_get_name (contact));
+ } else {
+ str = g_strdup_printf (_("%s has left the room"),
+ empathy_contact_get_name (contact));
+ }
+ empathy_chat_view_append_event (chat->view, str);
+ g_free (str);
+ }
+}
+
+static gboolean
+chat_reset_size_request (gpointer widget)
+{
+ gtk_widget_set_size_request (widget, -1, -1);
+
+ return FALSE;
+}
+
+static void
+chat_set_show_contacts (EmpathyChat *chat, gboolean show)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ if (!priv->scrolled_window_contacts) {
+ return;
+ }
+
+ if (show) {
+ EmpathyContactListStore *store;
+ gint min_width;
+
+ /* We are adding the contact list to the chat, we don't want the
+ * chat view to become too small. If the chat view is already
+ * smaller than 250 make sure that size won't change. If the
+ * chat view is bigger the contact list will take some space on
+ * it but we make sure the chat view don't become smaller than
+ * 250. Relax the size request once the resize is done */
+ min_width = MIN (priv->vbox_left->allocation.width, 250);
+ gtk_widget_set_size_request (priv->vbox_left, min_width, -1);
+ g_idle_add (chat_reset_size_request, priv->vbox_left);
+
+ if (priv->contacts_width > 0) {
+ gtk_paned_set_position (GTK_PANED (priv->hpaned),
+ priv->contacts_width);
+ }
+
+ store = empathy_contact_list_store_new (EMPATHY_CONTACT_LIST (priv->tp_chat));
+ priv->contact_list_view = GTK_WIDGET (empathy_contact_list_view_new (store,
+ EMPATHY_CONTACT_LIST_FEATURE_NONE,
+ EMPATHY_CONTACT_FEATURE_CHAT |
+ EMPATHY_CONTACT_FEATURE_CALL |
+ EMPATHY_CONTACT_FEATURE_LOG |
+ EMPATHY_CONTACT_FEATURE_INFO));
+ gtk_container_add (GTK_CONTAINER (priv->scrolled_window_contacts),
+ priv->contact_list_view);
+ gtk_widget_show (priv->contact_list_view);
+ gtk_widget_show (priv->scrolled_window_contacts);
+ g_object_unref (store);
+ } else {
+ priv->contacts_width = gtk_paned_get_position (GTK_PANED (priv->hpaned));
+ gtk_widget_hide (priv->scrolled_window_contacts);
+ if (priv->contact_list_view) {
+ gtk_widget_destroy (priv->contact_list_view);
+ priv->contact_list_view = NULL;
+ }
+ }
+}
+
+static void
+chat_remote_contact_changed_cb (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ if (priv->remote_contact) {
+ g_object_unref (priv->remote_contact);
+ priv->remote_contact = NULL;
+ }
+
+ priv->remote_contact = empathy_tp_chat_get_remote_contact (priv->tp_chat);
+ if (priv->remote_contact) {
+ g_object_ref (priv->remote_contact);
+ priv->handle_type = TP_HANDLE_TYPE_CONTACT;
+ g_free (priv->id);
+ priv->id = g_strdup (empathy_contact_get_id (priv->remote_contact));
+ }
+ else if (priv->tp_chat) {
+ TpChannel *channel;
+
+ channel = empathy_tp_chat_get_channel (priv->tp_chat);
+ g_object_get (channel, "handle-type", &priv->handle_type, NULL);
+ g_free (priv->id);
+ priv->id = g_strdup (empathy_tp_chat_get_id (priv->tp_chat));
+ }
+
+ chat_set_show_contacts (chat, priv->remote_contact == NULL);
+
+ g_object_notify (G_OBJECT (chat), "remote-contact");
+ g_object_notify (G_OBJECT (chat), "id");
+}
+
+static void
+chat_destroy_cb (EmpathyTpChat *tp_chat,
+ EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv;
+
+ priv = GET_PRIV (chat);
+
+ if (!priv->tp_chat) {
+ return;
+ }
+
+ g_object_unref (priv->tp_chat);
+ priv->tp_chat = NULL;
+ g_object_notify (G_OBJECT (chat), "tp-chat");
+
+ empathy_chat_view_append_event (chat->view, _("Disconnected"));
+ gtk_widget_set_sensitive (chat->input_text_view, FALSE);
+ chat_set_show_contacts (chat, FALSE);
+}
+
+static void
+chat_create_ui (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+ GladeXML *glade;
+ GList *list = NULL;
+ gchar *filename;
+ GtkTextBuffer *buffer;
+
+ filename = empathy_file_lookup ("empathy-chat.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "chat_widget",
+ NULL,
+ "chat_widget", &priv->widget,
+ "hpaned", &priv->hpaned,
+ "vbox_left", &priv->vbox_left,
+ "scrolled_window_chat", &priv->scrolled_window_chat,
+ "scrolled_window_input", &priv->scrolled_window_input,
+ "hbox_topic", &priv->hbox_topic,
+ "label_topic", &priv->label_topic,
+ "scrolled_window_contacts", &priv->scrolled_window_contacts,
+ NULL);
+ g_free (filename);
+ g_object_unref (glade);
+
+ /* Add message GtkTextView. */
+ chat->view = empathy_chat_view_new ();
+ g_signal_connect (chat->view, "focus_in_event",
+ G_CALLBACK (chat_text_view_focus_in_event_cb),
+ chat);
+ gtk_container_add (GTK_CONTAINER (priv->scrolled_window_chat),
+ GTK_WIDGET (chat->view));
+ gtk_widget_show (GTK_WIDGET (chat->view));
+
+ /* Add input GtkTextView */
+ chat->input_text_view = g_object_new (GTK_TYPE_TEXT_VIEW,
+ "pixels-above-lines", 2,
+ "pixels-below-lines", 2,
+ "pixels-inside-wrap", 1,
+ "right-margin", 2,
+ "left-margin", 2,
+ "wrap-mode", GTK_WRAP_WORD_CHAR,
+ NULL);
+ g_signal_connect (chat->input_text_view, "key-press-event",
+ G_CALLBACK (chat_input_key_press_event_cb),
+ chat);
+ g_signal_connect (chat->input_text_view, "size-request",
+ G_CALLBACK (chat_input_size_request_cb),
+ chat);
+ g_signal_connect (chat->input_text_view, "realize",
+ G_CALLBACK (chat_input_realize_cb),
+ chat);
+ g_signal_connect (chat->input_text_view, "populate-popup",
+ G_CALLBACK (chat_input_populate_popup_cb),
+ chat);
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
+ g_signal_connect (buffer, "changed",
+ G_CALLBACK (chat_input_text_buffer_changed_cb),
+ chat);
+ gtk_text_buffer_create_tag (buffer, "misspelled",
+ "underline", PANGO_UNDERLINE_ERROR,
+ NULL);
+ gtk_container_add (GTK_CONTAINER (priv->scrolled_window_input),
+ chat->input_text_view);
+ gtk_widget_show (chat->input_text_view);
+
+ /* Create contact list */
+ chat_set_show_contacts (chat, priv->remote_contact == NULL);
+
+ /* Initialy hide the topic, will be shown if not empty */
+ gtk_widget_hide (priv->hbox_topic);
+
+ /* Set widget focus order */
+ list = g_list_append (NULL, priv->scrolled_window_input);
+ gtk_container_set_focus_chain (GTK_CONTAINER (priv->vbox_left), list);
+ g_list_free (list);
+
+ list = g_list_append (NULL, priv->vbox_left);
+ list = g_list_append (list, priv->scrolled_window_contacts);
+ gtk_container_set_focus_chain (GTK_CONTAINER (priv->hpaned), list);
+ g_list_free (list);
+
+ list = g_list_append (NULL, priv->hpaned);
+ list = g_list_append (list, priv->hbox_topic);
+ gtk_container_set_focus_chain (GTK_CONTAINER (priv->widget), list);
+ g_list_free (list);
+
+ /* Add the main widget in the chat widget */
+ gtk_container_add (GTK_CONTAINER (chat), priv->widget);
+}
+
+static void
+chat_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ GtkBin *bin = GTK_BIN (widget);
+
+ requisition->width = GTK_CONTAINER (widget)->border_width * 2;
+ requisition->height = GTK_CONTAINER (widget)->border_width * 2;
+
+ if (bin->child && GTK_WIDGET_VISIBLE (bin->child))
+ {
+ GtkRequisition child_requisition;
+
+ gtk_widget_size_request (bin->child, &child_requisition);
+
+ requisition->width += child_requisition.width;
+ requisition->height += child_requisition.height;
+ }
+}
+
+static void
+chat_size_allocate (GtkWidget *widget,
+ GtkAllocation *allocation)
+{
+ GtkBin *bin = GTK_BIN (widget);
+ GtkAllocation child_allocation;
+
+ widget->allocation = *allocation;
+
+ if (bin->child && GTK_WIDGET_VISIBLE (bin->child))
+ {
+ child_allocation.x = allocation->x + GTK_CONTAINER (widget)->border_width;
+ child_allocation.y = allocation->y + GTK_CONTAINER (widget)->border_width;
+ child_allocation.width = MAX (allocation->width - GTK_CONTAINER (widget)->border_width * 2, 0);
+ child_allocation.height = MAX (allocation->height - GTK_CONTAINER (widget)->border_width * 2, 0);
+
+ gtk_widget_size_allocate (bin->child, &child_allocation);
+ }
+}
+
+static void
+chat_finalize (GObject *object)
+{
+ EmpathyChat *chat;
+ EmpathyChatPriv *priv;
+
+ chat = EMPATHY_CHAT (object);
+ priv = GET_PRIV (chat);
+
+ DEBUG ("Finalized: %p", object);
+
+ g_slist_foreach (priv->sent_messages, (GFunc) g_free, NULL);
+ g_slist_free (priv->sent_messages);
+
+ g_list_foreach (priv->compositors, (GFunc) g_object_unref, NULL);
+ g_list_free (priv->compositors);
+
+ chat_composing_remove_timeout (chat);
+
+ empathy_disconnect_account_status_changed (priv->token);
+ g_object_unref (priv->mc);
+ g_object_unref (priv->log_manager);
+
+ if (priv->tp_chat) {
+ g_object_unref (priv->tp_chat);
+ }
+ if (priv->account) {
+ g_object_unref (priv->account);
+ }
+ if (priv->remote_contact) {
+ g_object_unref (priv->remote_contact);
+ }
+
+ if (priv->block_events_timeout_id) {
+ g_source_remove (priv->block_events_timeout_id);
+ }
+
+ g_free (priv->id);
+ g_free (priv->name);
+ g_free (priv->subject);
+
+ G_OBJECT_CLASS (empathy_chat_parent_class)->finalize (object);
+}
+
+static void
+chat_constructed (GObject *object)
+{
+ EmpathyChat *chat = EMPATHY_CHAT (object);
+
+ chat_create_ui (chat);
+ chat_add_logs (chat);
+}
+
+static void
+empathy_chat_class_init (EmpathyChatClass *klass)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = chat_finalize;
+ object_class->get_property = chat_get_property;
+ object_class->set_property = chat_set_property;
+ object_class->constructed = chat_constructed;
+
+ widget_class->size_request = chat_size_request;
+ widget_class->size_allocate = chat_size_allocate;
+
+ g_object_class_install_property (object_class,
+ PROP_TP_CHAT,
+ g_param_spec_object ("tp-chat",
+ "Empathy tp chat",
+ "The tp chat object",
+ EMPATHY_TYPE_TP_CHAT,
+ G_PARAM_CONSTRUCT |
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_ACCOUNT,
+ g_param_spec_object ("account",
+ "Account of the chat",
+ "The account of the chat",
+ MC_TYPE_ACCOUNT,
+ G_PARAM_READABLE));
+ g_object_class_install_property (object_class,
+ PROP_ID,
+ g_param_spec_string ("id",
+ "Chat's id",
+ "The id of the chat",
+ NULL,
+ G_PARAM_READABLE));
+ g_object_class_install_property (object_class,
+ PROP_NAME,
+ g_param_spec_string ("name",
+ "Chat's name",
+ "The name of the chat",
+ NULL,
+ G_PARAM_READABLE));
+ g_object_class_install_property (object_class,
+ PROP_SUBJECT,
+ g_param_spec_string ("subject",
+ "Chat's subject",
+ "The subject or topic of the chat",
+ NULL,
+ G_PARAM_READABLE));
+ g_object_class_install_property (object_class,
+ PROP_REMOTE_CONTACT,
+ g_param_spec_object ("remote-contact",
+ "The remote contact",
+ "The remote contact is any",
+ EMPATHY_TYPE_CONTACT,
+ G_PARAM_READABLE));
+
+ signals[COMPOSING] =
+ g_signal_new ("composing",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE,
+ 1, G_TYPE_BOOLEAN);
+
+ signals[NEW_MESSAGE] =
+ g_signal_new ("new-message",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE,
+ 1, EMPATHY_TYPE_MESSAGE);
+
+ g_type_class_add_private (object_class, sizeof (EmpathyChatPriv));
+}
+
+static gboolean
+chat_block_events_timeout_cb (gpointer data)
+{
+ EmpathyChatPriv *priv = GET_PRIV (data);
+
+ priv->block_events_timeout_id = 0;
+
+ return FALSE;
+}
+
+static void
+empathy_chat_init (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (chat,
+ EMPATHY_TYPE_CHAT, EmpathyChatPriv);
+
+ chat->priv = priv;
+ priv->log_manager = empathy_log_manager_new ();
+ priv->contacts_width = -1;
+ priv->sent_messages = NULL;
+ priv->sent_messages_index = -1;
+ priv->mc = empathy_mission_control_new ();
+
+ priv->token = empathy_connect_to_account_status_changed (priv->mc,
+ G_CALLBACK (chat_status_changed_cb),
+ chat, NULL);
+
+ /* Block events for some time to avoid having "has come online" or
+ * "joined" messages. */
+ priv->block_events_timeout_id =
+ g_timeout_add_seconds (1, chat_block_events_timeout_cb, chat);
+
+ /* Add nick name completion */
+ priv->completion = g_completion_new ((GCompletionFunc) empathy_contact_get_name);
+ g_completion_set_compare (priv->completion, chat_contacts_completion_func);
+}
+
+EmpathyChat *
+empathy_chat_new (EmpathyTpChat *tp_chat)
+{
+ return g_object_new (EMPATHY_TYPE_CHAT, "tp-chat", tp_chat, NULL);
+}
+
+EmpathyTpChat *
+empathy_chat_get_tp_chat (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
+
+ return priv->tp_chat;
+}
+
+void
+empathy_chat_set_tp_chat (EmpathyChat *chat,
+ EmpathyTpChat *tp_chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ g_return_if_fail (EMPATHY_IS_CHAT (chat));
+ g_return_if_fail (EMPATHY_IS_TP_CHAT (tp_chat));
+ g_return_if_fail (empathy_tp_chat_is_ready (tp_chat));
+
+ if (priv->tp_chat) {
+ return;
+ }
+
+ if (priv->account) {
+ g_object_unref (priv->account);
+ }
+
+ priv->tp_chat = g_object_ref (tp_chat);
+ priv->account = g_object_ref (empathy_tp_chat_get_account (tp_chat));
+
+ g_signal_connect (tp_chat, "message-received",
+ G_CALLBACK (chat_message_received_cb),
+ chat);
+ g_signal_connect (tp_chat, "send-error",
+ G_CALLBACK (chat_send_error_cb),
+ chat);
+ g_signal_connect (tp_chat, "chat-state-changed",
+ G_CALLBACK (chat_state_changed_cb),
+ chat);
+ g_signal_connect (tp_chat, "property-changed",
+ G_CALLBACK (chat_property_changed_cb),
+ chat);
+ g_signal_connect (tp_chat, "members-changed",
+ G_CALLBACK (chat_members_changed_cb),
+ chat);
+ g_signal_connect_swapped (tp_chat, "notify::remote-contact",
+ G_CALLBACK (chat_remote_contact_changed_cb),
+ chat);
+ g_signal_connect (tp_chat, "destroy",
+ G_CALLBACK (chat_destroy_cb),
+ chat);
+
+ chat_remote_contact_changed_cb (chat);
+
+ if (chat->input_text_view) {
+ gtk_widget_set_sensitive (chat->input_text_view, TRUE);
+ if (priv->block_events_timeout_id == 0) {
+ empathy_chat_view_append_event (chat->view, _("Connected"));
+ }
+ }
+
+ empathy_tp_chat_set_acknowledge (priv->tp_chat, TRUE);
+ empathy_tp_chat_emit_pendings (priv->tp_chat);
+
+ g_object_notify (G_OBJECT (chat), "tp-chat");
+ g_object_notify (G_OBJECT (chat), "id");
+ g_object_notify (G_OBJECT (chat), "account");
+}
+
+McAccount *
+empathy_chat_get_account (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
+
+ return priv->account;
+}
+
+const gchar *
+empathy_chat_get_id (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
+
+ return priv->id;
+}
+
+const gchar *
+empathy_chat_get_name (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
+
+ return priv->name;
+}
+
+const gchar *
+empathy_chat_get_subject (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
+
+ return priv->subject;
+}
+
+EmpathyContact *
+empathy_chat_get_remote_contact (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
+
+ return priv->remote_contact;
+}
+
+guint
+empathy_chat_get_members_count (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT (chat), 0);
+
+ if (priv->tp_chat) {
+ return empathy_tp_chat_get_members_count (priv->tp_chat);
+ }
+
+ return 0;
+}
+
+GtkWidget *
+empathy_chat_get_contact_menu (EmpathyChat *chat)
+{
+ EmpathyChatPriv *priv = GET_PRIV (chat);
+ GtkWidget *menu = NULL;
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT (chat), NULL);
+
+ if (priv->remote_contact) {
+ menu = empathy_contact_menu_new (priv->remote_contact,
+ EMPATHY_CONTACT_FEATURE_CALL |
+ EMPATHY_CONTACT_FEATURE_LOG |
+ EMPATHY_CONTACT_FEATURE_INFO);
+ }
+ else if (priv->contact_list_view) {
+ EmpathyContactListView *view;
+
+ view = EMPATHY_CONTACT_LIST_VIEW (priv->contact_list_view);
+ menu = empathy_contact_list_view_get_contact_menu (view);
+ }
+
+ return menu;
+}
+
+void
+empathy_chat_clear (EmpathyChat *chat)
+{
+ g_return_if_fail (EMPATHY_IS_CHAT (chat));
+
+ empathy_chat_view_clear (chat->view);
+}
+
+void
+empathy_chat_scroll_down (EmpathyChat *chat)
+{
+ g_return_if_fail (EMPATHY_IS_CHAT (chat));
+
+ empathy_chat_view_scroll_down (chat->view);
+}
+
+void
+empathy_chat_cut (EmpathyChat *chat)
+{
+ GtkTextBuffer *buffer;
+
+ g_return_if_fail (EMPATHY_IS_CHAT (chat));
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
+ if (gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL)) {
+ GtkClipboard *clipboard;
+
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+
+ gtk_text_buffer_cut_clipboard (buffer, clipboard, TRUE);
+ }
+}
+
+void
+empathy_chat_copy (EmpathyChat *chat)
+{
+ GtkTextBuffer *buffer;
+
+ g_return_if_fail (EMPATHY_IS_CHAT (chat));
+
+ if (empathy_chat_view_get_selection_bounds (chat->view, NULL, NULL)) {
+ empathy_chat_view_copy_clipboard (chat->view);
+ return;
+ }
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
+ if (gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL)) {
+ GtkClipboard *clipboard;
+
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+
+ gtk_text_buffer_copy_clipboard (buffer, clipboard);
+ }
+}
+
+void
+empathy_chat_paste (EmpathyChat *chat)
+{
+ GtkTextBuffer *buffer;
+ GtkClipboard *clipboard;
+
+ g_return_if_fail (EMPATHY_IS_CHAT (chat));
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+
+ gtk_text_buffer_paste_clipboard (buffer, clipboard, NULL, TRUE);
+}
+
+void
+empathy_chat_correct_word (EmpathyChat *chat,
+ GtkTextIter *start,
+ GtkTextIter *end,
+ const gchar *new_word)
+{
+ GtkTextBuffer *buffer;
+
+ g_return_if_fail (chat != NULL);
+ g_return_if_fail (new_word != NULL);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
+
+ gtk_text_buffer_delete (buffer, start, end);
+ gtk_text_buffer_insert (buffer, start,
+ new_word,
+ -1);
+}
+
diff --git a/trunk/libempathy-gtk/empathy-chat.glade b/trunk/libempathy-gtk/empathy-chat.glade
new file mode 100644
index 000000000..f313c2f55
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-chat.glade
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="chat_window">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="title" translatable="yes">Group Chat</property>
+ <property name="icon_name">system-users</property>
+ <child>
+ <widget class="GtkVBox" id="chat_widget">
+ <property name="visible">True</property>
+ <property name="border_width">4</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox_topic">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label80">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Topic:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_topic">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="xalign">0</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ <property name="selectable">True</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
+ <property name="single_line_mode">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="padding">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHPaned" id="hpaned">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_left">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolled_window_chat">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolled_window_input">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolled_window_contacts">
+ <property name="width_request">200</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-chat.h b/trunk/libempathy-gtk/empathy-chat.h
new file mode 100644
index 000000000..b7b6968f9
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-chat.h
@@ -0,0 +1,88 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2002-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Geert-Jan Van den Bogaerde <geertjan@gnome.org>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_CHAT_H__
+#define __EMPATHY_CHAT_H__
+
+#include <gtk/gtkbin.h>
+
+#include <libempathy/empathy-contact.h>
+#include <libempathy/empathy-message.h>
+#include <libempathy/empathy-tp-chat.h>
+
+#include "empathy-chat-view.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CHAT (empathy_chat_get_type ())
+#define EMPATHY_CHAT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CHAT, EmpathyChat))
+#define EMPATHY_CHAT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_CHAT, EmpathyChatClass))
+#define EMPATHY_IS_CHAT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CHAT))
+#define EMPATHY_IS_CHAT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CHAT))
+#define EMPATHY_CHAT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CHAT, EmpathyChatClass))
+
+typedef struct _EmpathyChat EmpathyChat;
+typedef struct _EmpathyChatClass EmpathyChatClass;
+
+struct _EmpathyChat {
+ GtkBin parent;
+ gpointer priv;
+
+ /* Protected */
+ EmpathyChatView *view;
+ GtkWidget *input_text_view;
+};
+
+struct _EmpathyChatClass {
+ GtkBinClass parent;
+};
+
+GType empathy_chat_get_type (void);
+EmpathyChat * empathy_chat_new (EmpathyTpChat *tp_chat);
+EmpathyTpChat * empathy_chat_get_tp_chat (EmpathyChat *chat);
+void empathy_chat_set_tp_chat (EmpathyChat *chat,
+ EmpathyTpChat *tp_chat);
+McAccount * empathy_chat_get_account (EmpathyChat *chat);
+const gchar * empathy_chat_get_id (EmpathyChat *chat);
+const gchar * empathy_chat_get_name (EmpathyChat *chat);
+const gchar * empathy_chat_get_subject (EmpathyChat *chat);
+EmpathyContact * empathy_chat_get_remote_contact (EmpathyChat *chat);
+guint empathy_chat_get_members_count (EmpathyChat *chat);
+GtkWidget * empathy_chat_get_contact_menu (EmpathyChat *chat);
+void empathy_chat_clear (EmpathyChat *chat);
+void empathy_chat_scroll_down (EmpathyChat *chat);
+void empathy_chat_cut (EmpathyChat *chat);
+void empathy_chat_copy (EmpathyChat *chat);
+void empathy_chat_paste (EmpathyChat *chat);
+void empathy_chat_correct_word (EmpathyChat *chat,
+ GtkTextIter *start,
+ GtkTextIter *end,
+ const gchar *new_word);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CHAT_H__ */
diff --git a/trunk/libempathy-gtk/empathy-conf.c b/trunk/libempathy-gtk/empathy-conf.c
new file mode 100644
index 000000000..fae2c37db
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-conf.c
@@ -0,0 +1,371 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2006 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Richard Hult <richard@imendio.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <gconf/gconf-client.h>
+
+#include <libempathy/empathy-utils.h>
+#include "empathy-conf.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+#define EMPATHY_CONF_ROOT "/apps/empathy"
+#define DESKTOP_INTERFACE_ROOT "/desktop/gnome/interface"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyConf)
+typedef struct {
+ GConfClient *gconf_client;
+} EmpathyConfPriv;
+
+typedef struct {
+ EmpathyConf *conf;
+ EmpathyConfNotifyFunc func;
+ gpointer user_data;
+} EmpathyConfNotifyData;
+
+static void conf_finalize (GObject *object);
+
+G_DEFINE_TYPE (EmpathyConf, empathy_conf, G_TYPE_OBJECT);
+
+static EmpathyConf *global_conf = NULL;
+
+static void
+empathy_conf_class_init (EmpathyConfClass *class)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (class);
+
+ object_class->finalize = conf_finalize;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyConfPriv));
+}
+
+static void
+empathy_conf_init (EmpathyConf *conf)
+{
+ EmpathyConfPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (conf,
+ EMPATHY_TYPE_CONF, EmpathyConfPriv);
+
+ conf->priv = priv;
+ priv->gconf_client = gconf_client_get_default ();
+
+ gconf_client_add_dir (priv->gconf_client,
+ EMPATHY_CONF_ROOT,
+ GCONF_CLIENT_PRELOAD_ONELEVEL,
+ NULL);
+ gconf_client_add_dir (priv->gconf_client,
+ DESKTOP_INTERFACE_ROOT,
+ GCONF_CLIENT_PRELOAD_NONE,
+ NULL);
+}
+
+static void
+conf_finalize (GObject *object)
+{
+ EmpathyConfPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ gconf_client_remove_dir (priv->gconf_client,
+ EMPATHY_CONF_ROOT,
+ NULL);
+ gconf_client_remove_dir (priv->gconf_client,
+ DESKTOP_INTERFACE_ROOT,
+ NULL);
+
+ g_object_unref (priv->gconf_client);
+
+ G_OBJECT_CLASS (empathy_conf_parent_class)->finalize (object);
+}
+
+EmpathyConf *
+empathy_conf_get (void)
+{
+ if (!global_conf) {
+ global_conf = g_object_new (EMPATHY_TYPE_CONF, NULL);
+ }
+
+ return global_conf;
+}
+
+void
+empathy_conf_shutdown (void)
+{
+ if (global_conf) {
+ g_object_unref (global_conf);
+ global_conf = NULL;
+ }
+}
+
+gboolean
+empathy_conf_set_int (EmpathyConf *conf,
+ const gchar *key,
+ gint value)
+{
+ EmpathyConfPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONF (conf), FALSE);
+
+ DEBUG ("Setting int:'%s' to %d", key, value);
+
+ priv = GET_PRIV (conf);
+
+ return gconf_client_set_int (priv->gconf_client,
+ key,
+ value,
+ NULL);
+}
+
+gboolean
+empathy_conf_get_int (EmpathyConf *conf,
+ const gchar *key,
+ gint *value)
+{
+ EmpathyConfPriv *priv;
+ GError *error = NULL;
+
+ *value = 0;
+
+ g_return_val_if_fail (EMPATHY_IS_CONF (conf), FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+
+ priv = GET_PRIV (conf);
+
+ *value = gconf_client_get_int (priv->gconf_client,
+ key,
+ &error);
+
+ if (error) {
+ g_error_free (error);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+empathy_conf_set_bool (EmpathyConf *conf,
+ const gchar *key,
+ gboolean value)
+{
+ EmpathyConfPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONF (conf), FALSE);
+
+ DEBUG ("Setting bool:'%s' to %d ---> %s", key, value,
+ value ? "true" : "false");
+
+ priv = GET_PRIV (conf);
+
+ return gconf_client_set_bool (priv->gconf_client,
+ key,
+ value,
+ NULL);
+}
+
+gboolean
+empathy_conf_get_bool (EmpathyConf *conf,
+ const gchar *key,
+ gboolean *value)
+{
+ EmpathyConfPriv *priv;
+ GError *error = NULL;
+
+ *value = FALSE;
+
+ g_return_val_if_fail (EMPATHY_IS_CONF (conf), FALSE);
+ g_return_val_if_fail (value != NULL, FALSE);
+
+ priv = GET_PRIV (conf);
+
+ *value = gconf_client_get_bool (priv->gconf_client,
+ key,
+ &error);
+
+ if (error) {
+ g_error_free (error);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+empathy_conf_set_string (EmpathyConf *conf,
+ const gchar *key,
+ const gchar *value)
+{
+ EmpathyConfPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONF (conf), FALSE);
+
+ DEBUG ("Setting string:'%s' to '%s'", key, value);
+
+ priv = GET_PRIV (conf);
+
+ return gconf_client_set_string (priv->gconf_client,
+ key,
+ value,
+ NULL);
+}
+
+gboolean
+empathy_conf_get_string (EmpathyConf *conf,
+ const gchar *key,
+ gchar **value)
+{
+ EmpathyConfPriv *priv;
+ GError *error = NULL;
+
+ *value = NULL;
+
+ g_return_val_if_fail (EMPATHY_IS_CONF (conf), FALSE);
+
+ priv = GET_PRIV (conf);
+
+ *value = gconf_client_get_string (priv->gconf_client,
+ key,
+ &error);
+
+ if (error) {
+ g_error_free (error);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+empathy_conf_set_string_list (EmpathyConf *conf,
+ const gchar *key,
+ GSList *value)
+{
+ EmpathyConfPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONF (conf), FALSE);
+
+ priv = GET_PRIV (conf);
+
+ return gconf_client_set_list (priv->gconf_client,
+ key,
+ GCONF_VALUE_STRING,
+ value,
+ NULL);
+}
+
+gboolean
+empathy_conf_get_string_list (EmpathyConf *conf,
+ const gchar *key,
+ GSList **value)
+{
+ EmpathyConfPriv *priv;
+ GError *error = NULL;
+
+ *value = NULL;
+
+ g_return_val_if_fail (EMPATHY_IS_CONF (conf), FALSE);
+
+ priv = GET_PRIV (conf);
+
+ *value = gconf_client_get_list (priv->gconf_client,
+ key,
+ GCONF_VALUE_STRING,
+ &error);
+ if (error) {
+ g_error_free (error);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void
+conf_notify_data_free (EmpathyConfNotifyData *data)
+{
+ g_object_unref (data->conf);
+ g_slice_free (EmpathyConfNotifyData, data);
+}
+
+static void
+conf_notify_func (GConfClient *client,
+ guint id,
+ GConfEntry *entry,
+ gpointer user_data)
+{
+ EmpathyConfNotifyData *data;
+
+ data = user_data;
+
+ data->func (data->conf,
+ gconf_entry_get_key (entry),
+ data->user_data);
+}
+
+guint
+empathy_conf_notify_add (EmpathyConf *conf,
+ const gchar *key,
+ EmpathyConfNotifyFunc func,
+ gpointer user_data)
+{
+ EmpathyConfPriv *priv;
+ guint id;
+ EmpathyConfNotifyData *data;
+
+ g_return_val_if_fail (EMPATHY_IS_CONF (conf), 0);
+
+ priv = GET_PRIV (conf);
+
+ data = g_slice_new (EmpathyConfNotifyData);
+ data->func = func;
+ data->user_data = user_data;
+ data->conf = g_object_ref (conf);
+
+ id = gconf_client_notify_add (priv->gconf_client,
+ key,
+ conf_notify_func,
+ data,
+ (GFreeFunc) conf_notify_data_free,
+ NULL);
+
+ return id;
+}
+
+gboolean
+empathy_conf_notify_remove (EmpathyConf *conf,
+ guint id)
+{
+ EmpathyConfPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONF (conf), FALSE);
+
+ priv = GET_PRIV (conf);
+
+ gconf_client_notify_remove (priv->gconf_client, id);
+
+ return TRUE;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-conf.h b/trunk/libempathy-gtk/empathy-conf.h
new file mode 100644
index 000000000..fb0c5bcad
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-conf.h
@@ -0,0 +1,110 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2006 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EMPATHY_CONF_H__
+#define __EMPATHY_CONF_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CONF (empathy_conf_get_type ())
+#define EMPATHY_CONF(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CONF, EmpathyConf))
+#define EMPATHY_CONF_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_CONF, EmpathyConfClass))
+#define EMPATHY_IS_CONF(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CONF))
+#define EMPATHY_IS_CONF_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CONF))
+#define EMPATHY_CONF_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CONF, EmpathyConfClass))
+
+typedef struct _EmpathyConf EmpathyConf;
+typedef struct _EmpathyConfClass EmpathyConfClass;
+
+struct _EmpathyConf {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyConfClass {
+ GObjectClass parent_class;
+};
+
+#define EMPATHY_PREFS_PATH "/apps/empathy"
+#define EMPATHY_PREFS_SOUNDS_FOR_MESSAGES EMPATHY_PREFS_PATH "/notifications/sounds_for_messages"
+#define EMPATHY_PREFS_SOUNDS_WHEN_AWAY EMPATHY_PREFS_PATH "/notifications/sounds_when_away"
+#define EMPATHY_PREFS_SOUNDS_WHEN_BUSY EMPATHY_PREFS_PATH "/notifications/sounds_when_busy"
+#define EMPATHY_PREFS_POPUPS_WHEN_AVAILABLE EMPATHY_PREFS_PATH "/notifications/popups_when_available"
+#define EMPATHY_PREFS_CHAT_SHOW_SMILEYS EMPATHY_PREFS_PATH "/conversation/graphical_smileys"
+#define EMPATHY_PREFS_CHAT_THEME EMPATHY_PREFS_PATH "/conversation/theme"
+#define EMPATHY_PREFS_CHAT_SPELL_CHECKER_LANGUAGES EMPATHY_PREFS_PATH "/conversation/spell_checker_languages"
+#define EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED EMPATHY_PREFS_PATH "/conversation/spell_checker_enabled"
+#define EMPATHY_PREFS_CHAT_NICK_COMPLETION_CHAR EMPATHY_PREFS_PATH "/conversation/nick_completion_char"
+#define EMPATHY_PREFS_UI_SEPARATE_CHAT_WINDOWS EMPATHY_PREFS_PATH "/ui/separate_chat_windows"
+#define EMPATHY_PREFS_UI_MAIN_WINDOW_HIDDEN EMPATHY_PREFS_PATH "/ui/main_window_hidden"
+#define EMPATHY_PREFS_UI_AVATAR_DIRECTORY EMPATHY_PREFS_PATH "/ui/avatar_directory"
+#define EMPATHY_PREFS_UI_SHOW_AVATARS EMPATHY_PREFS_PATH "/ui/show_avatars"
+#define EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST EMPATHY_PREFS_PATH "/ui/compact_contact_list"
+#define EMPATHY_PREFS_CONTACTS_SHOW_OFFLINE EMPATHY_PREFS_PATH "/contacts/show_offline"
+#define EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM EMPATHY_PREFS_PATH "/contacts/sort_criterium"
+#define EMPATHY_PREFS_HINTS_CLOSE_MAIN_WINDOW EMPATHY_PREFS_PATH "/hints/close_main_window"
+#define EMPATHY_PREFS_SALUT_ACCOUNT_CREATED EMPATHY_PREFS_PATH "/accounts/salut_created"
+#define EMPATHY_PREFS_USE_NM EMPATHY_PREFS_PATH "/use_nm"
+#define EMPATHY_PREFS_AUTOCONNECT EMPATHY_PREFS_PATH "/autoconnect"
+
+typedef void (*EmpathyConfNotifyFunc) (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data);
+
+GType empathy_conf_get_type (void) G_GNUC_CONST;
+EmpathyConf *empathy_conf_get (void);
+void empathy_conf_shutdown (void);
+guint empathy_conf_notify_add (EmpathyConf *conf,
+ const gchar *key,
+ EmpathyConfNotifyFunc func,
+ gpointer data);
+gboolean empathy_conf_notify_remove (EmpathyConf *conf,
+ guint id);
+gboolean empathy_conf_set_int (EmpathyConf *conf,
+ const gchar *key,
+ gint value);
+gboolean empathy_conf_get_int (EmpathyConf *conf,
+ const gchar *key,
+ gint *value);
+gboolean empathy_conf_set_bool (EmpathyConf *conf,
+ const gchar *key,
+ gboolean value);
+gboolean empathy_conf_get_bool (EmpathyConf *conf,
+ const gchar *key,
+ gboolean *value);
+gboolean empathy_conf_set_string (EmpathyConf *conf,
+ const gchar *key,
+ const gchar *value);
+gboolean empathy_conf_get_string (EmpathyConf *conf,
+ const gchar *key,
+ gchar **value);
+gboolean empathy_conf_set_string_list (EmpathyConf *conf,
+ const gchar *key,
+ GSList *value);
+gboolean empathy_conf_get_string_list (EmpathyConf *conf,
+ const gchar *key,
+ GSList **value);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CONF_H__ */
+
diff --git a/trunk/libempathy-gtk/empathy-contact-dialogs.c b/trunk/libempathy-gtk/empathy-contact-dialogs.c
new file mode 100644
index 000000000..fd4ad9635
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-dialogs.c
@@ -0,0 +1,348 @@
+/* -*- 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 <stdlib.h>
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include <glib/gi18n.h>
+
+#include <libmissioncontrol/mission-control.h>
+
+#include <libempathy/empathy-contact-manager.h>
+#include <libempathy/empathy-contact-list.h>
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-contact-dialogs.h"
+#include "empathy-contact-widget.h"
+#include "empathy-ui-utils.h"
+
+static GList *subscription_dialogs = NULL;
+static GList *information_dialogs = NULL;
+static GtkWidget *new_contact_dialog = NULL;
+
+
+static gint
+contact_dialogs_find (GtkDialog *dialog,
+ EmpathyContact *contact)
+{
+ GtkWidget *contact_widget;
+ EmpathyContact *this_contact;
+
+ contact_widget = g_object_get_data (G_OBJECT (dialog), "contact_widget");
+ this_contact = empathy_contact_widget_get_contact (contact_widget);
+
+ return contact != this_contact;
+}
+
+/*
+ * Subscription dialog
+ */
+
+static void
+subscription_dialog_response_cb (GtkDialog *dialog,
+ gint response,
+ GtkWidget *contact_widget)
+{
+ EmpathyContactManager *manager;
+ EmpathyContact *contact;
+
+ manager = empathy_contact_manager_new ();
+ contact = empathy_contact_widget_get_contact (contact_widget);
+
+ if (response == GTK_RESPONSE_YES) {
+ empathy_contact_list_add (EMPATHY_CONTACT_LIST (manager),
+ contact, "");
+ }
+ else if (response == GTK_RESPONSE_NO) {
+ empathy_contact_list_remove (EMPATHY_CONTACT_LIST (manager),
+ contact, "");
+ }
+
+ subscription_dialogs = g_list_remove (subscription_dialogs, dialog);
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ g_object_unref (manager);
+}
+
+void
+empathy_subscription_dialog_show (EmpathyContact *contact,
+ GtkWindow *parent)
+{
+ GtkWidget *dialog;
+ GtkWidget *hbox_subscription;
+ GtkWidget *contact_widget;
+ GList *l;
+ gchar *filename;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ l = g_list_find_custom (subscription_dialogs,
+ contact,
+ (GCompareFunc) contact_dialogs_find);
+ if (l) {
+ gtk_window_present (GTK_WINDOW (l->data));
+ return;
+ }
+
+ filename = empathy_file_lookup ("empathy-contact-dialogs.glade",
+ "libempathy-gtk");
+ empathy_glade_get_file_simple (filename,
+ "subscription_request_dialog",
+ NULL,
+ "subscription_request_dialog", &dialog,
+ "hbox_subscription", &hbox_subscription,
+ NULL);
+ g_free (filename);
+
+ contact_widget = empathy_contact_widget_new (contact,
+ EMPATHY_CONTACT_WIDGET_EDIT_ALIAS |
+ EMPATHY_CONTACT_WIDGET_EDIT_GROUPS);
+ gtk_box_pack_end (GTK_BOX (hbox_subscription),
+ contact_widget,
+ TRUE, TRUE,
+ 0);
+
+ g_object_set_data (G_OBJECT (dialog), "contact_widget", contact_widget);
+ subscription_dialogs = g_list_prepend (subscription_dialogs, dialog);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (subscription_dialog_response_cb),
+ contact_widget);
+
+ if (parent) {
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+ }
+
+ gtk_widget_show (dialog);
+}
+
+/*
+ * Information dialog
+ */
+
+static void
+contact_information_response_cb (GtkDialog *dialog,
+ gint response,
+ GtkWidget *contact_widget)
+{
+ information_dialogs = g_list_remove (information_dialogs, dialog);
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+}
+
+void
+empathy_contact_information_dialog_show (EmpathyContact *contact,
+ GtkWindow *parent,
+ gboolean edit,
+ gboolean is_user)
+{
+ GtkWidget *dialog;
+ GtkWidget *button;
+ GtkWidget *contact_widget;
+ GList *l;
+ EmpathyContactWidgetFlags flags = 0;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ l = g_list_find_custom (information_dialogs,
+ contact,
+ (GCompareFunc) contact_dialogs_find);
+ if (l) {
+ gtk_window_present (GTK_WINDOW (l->data));
+ return;
+ }
+
+ /* Create dialog */
+ dialog = gtk_dialog_new ();
+ gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+ if (is_user) {
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Personal Information"));
+ }
+ else if (edit) {
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Edit Contact Information"));
+ }
+ else {
+ gtk_window_set_title (GTK_WINDOW (dialog), _("Contact Information"));
+ }
+
+ /* Close button */
+ button = gtk_button_new_with_label (GTK_STOCK_CLOSE);
+ gtk_button_set_use_stock (GTK_BUTTON (button), TRUE);
+ gtk_dialog_add_action_widget (GTK_DIALOG (dialog),
+ button,
+ GTK_RESPONSE_CLOSE);
+ gtk_widget_show (button);
+
+ /* Contact info widget */
+ if (edit) {
+ flags |= EMPATHY_CONTACT_WIDGET_EDIT_ALIAS;
+ }
+ if (is_user) {
+ flags |= EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT;
+ flags |= EMPATHY_CONTACT_WIDGET_EDIT_AVATAR;
+ }
+ if (!is_user && edit) {
+ flags |= EMPATHY_CONTACT_WIDGET_EDIT_GROUPS;
+ }
+ contact_widget = empathy_contact_widget_new (contact, flags);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
+ contact_widget,
+ TRUE, TRUE, 0);
+ if (flags & EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT) {
+ empathy_contact_widget_set_account_filter (contact_widget,
+ empathy_account_chooser_filter_is_connected,
+ NULL);
+ }
+
+ g_object_set_data (G_OBJECT (dialog), "contact_widget", contact_widget);
+ information_dialogs = g_list_prepend (information_dialogs, dialog);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (contact_information_response_cb),
+ contact_widget);
+
+ if (parent) {
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+ }
+
+ gtk_widget_show (dialog);
+}
+
+/*
+ * New contact dialog
+ */
+
+static gboolean
+can_add_contact_to_account (McAccount *account,
+ gpointer user_data)
+{
+ MissionControl *mc;
+ TpConnectionStatus status;
+ McProfile *profile;
+ const gchar *protocol_name;
+
+ mc = empathy_mission_control_new ();
+ status = mission_control_get_connection_status (mc, account, NULL);
+ g_object_unref (mc);
+ if (status != TP_CONNECTION_STATUS_CONNECTED) {
+ /* Account is disconnected */
+ return FALSE;
+ }
+
+ profile = mc_account_get_profile (account);
+ protocol_name = mc_profile_get_protocol_name (profile);
+ if (strcmp (protocol_name, "local-xmpp") == 0) {
+ /* We can't add accounts to a XMPP LL connection
+ * FIXME: We should inspect the flags of the contact list group interface
+ */
+ g_object_unref (profile);
+ return FALSE;
+ }
+
+ g_object_unref (profile);
+ return TRUE;
+}
+
+static void
+new_contact_response_cb (GtkDialog *dialog,
+ gint response,
+ GtkWidget *contact_widget)
+{
+ EmpathyContactManager *manager;
+ EmpathyContact *contact;
+
+ manager = empathy_contact_manager_new ();
+ contact = empathy_contact_widget_get_contact (contact_widget);
+
+ if (contact && response == GTK_RESPONSE_OK) {
+ empathy_contact_list_add (EMPATHY_CONTACT_LIST (manager),
+ contact,
+ _("I would like to add you to my contact list."));
+ }
+
+ new_contact_dialog = NULL;
+ gtk_widget_destroy (GTK_WIDGET (dialog));
+ g_object_unref (manager);
+}
+
+void
+empathy_new_contact_dialog_show (GtkWindow *parent)
+{
+ GtkWidget *dialog;
+ GtkWidget *button;
+ GtkWidget *contact_widget;
+
+ if (new_contact_dialog) {
+ gtk_window_present (GTK_WINDOW (new_contact_dialog));
+ return;
+ }
+
+ /* Create dialog */
+ dialog = gtk_dialog_new ();
+ gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+ gtk_window_set_title (GTK_WINDOW (dialog), _("New Contact"));
+
+ /* Cancel button */
+ button = gtk_button_new_with_label (GTK_STOCK_CANCEL);
+ gtk_button_set_use_stock (GTK_BUTTON (button), TRUE);
+ gtk_dialog_add_action_widget (GTK_DIALOG (dialog),
+ button,
+ GTK_RESPONSE_CANCEL);
+ gtk_widget_show (button);
+
+ /* Add button */
+ button = gtk_button_new_with_label (GTK_STOCK_ADD);
+ gtk_button_set_use_stock (GTK_BUTTON (button), TRUE);
+ gtk_dialog_add_action_widget (GTK_DIALOG (dialog),
+ button,
+ GTK_RESPONSE_OK);
+ gtk_widget_show (button);
+
+ /* Contact info widget */
+ contact_widget = empathy_contact_widget_new (NULL,
+ EMPATHY_CONTACT_WIDGET_EDIT_ALIAS |
+ EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT |
+ EMPATHY_CONTACT_WIDGET_EDIT_ID |
+ EMPATHY_CONTACT_WIDGET_EDIT_GROUPS);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
+ contact_widget,
+ TRUE, TRUE, 0);
+ empathy_contact_widget_set_account_filter (contact_widget,
+ can_add_contact_to_account,
+ NULL);
+
+ new_contact_dialog = dialog;
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (new_contact_response_cb),
+ contact_widget);
+
+ if (parent) {
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
+ }
+
+ gtk_widget_show (dialog);
+}
+
diff --git a/trunk/libempathy-gtk/empathy-contact-dialogs.glade b/trunk/libempathy-gtk/empathy-contact-dialogs.glade
new file mode 100644
index 000000000..cce60bbbc
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-dialogs.glade
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkDialog" id="subscription_request_dialog">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Subscription Request</property>
+ <property name="resizable">False</property>
+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox4">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkHBox" id="hbox_subscription">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="spacing">12</property>
+ <child>
+ <widget class="GtkImage" id="image5">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ <property name="stock">gtk-dialog-question</property>
+ <property name="icon_size">6</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area4">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button19">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label" translatable="yes">Decide _Later</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button20">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-no</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-9</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button21">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="label">gtk-yes</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-8</property>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-contact-dialogs.h b/trunk/libempathy-gtk/empathy-contact-dialogs.h
new file mode 100644
index 000000000..e375f959c
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-dialogs.h
@@ -0,0 +1,41 @@
+/* -*- 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_DIALOGS_H__
+#define __EMPATHY_CONTACT_DIALOGS_H__
+
+#include <gtk/gtk.h>
+
+#include <libempathy/empathy-contact.h>
+
+G_BEGIN_DECLS
+
+void empathy_subscription_dialog_show (EmpathyContact *contact,
+ GtkWindow *parent);
+void empathy_contact_information_dialog_show (EmpathyContact *contact,
+ GtkWindow *parent,
+ gboolean edit,
+ gboolean is_user);
+void empathy_new_contact_dialog_show (GtkWindow *parent);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CONTACT_DIALOGS_H__ */
diff --git a/trunk/libempathy-gtk/empathy-contact-list-store.c b/trunk/libempathy-gtk/empathy-contact-list-store.c
new file mode 100644
index 000000000..d4946e4a7
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-list-store.c
@@ -0,0 +1,1518 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include <telepathy-glib/util.h>
+
+#include <libempathy/empathy-utils.h>
+#include "empathy-contact-list-store.h"
+#include "empathy-ui-utils.h"
+#include "empathy-gtk-enum-types.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
+#include <libempathy/empathy-debug.h>
+
+/* Active users are those which have recently changed state
+ * (e.g. online, offline or from normal to a busy state).
+ */
+
+/* Time in seconds user is shown as active */
+#define ACTIVE_USER_SHOW_TIME 7
+
+/* Time in seconds after connecting which we wait before active users are enabled */
+#define ACTIVE_USER_WAIT_TO_ENABLE_TIME 5
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyContactListStore)
+typedef struct {
+ EmpathyContactList *list;
+ gboolean show_offline;
+ gboolean show_avatars;
+ gboolean show_groups;
+ gboolean is_compact;
+ gboolean show_active;
+ EmpathyContactListStoreSort sort_criterium;
+ guint inhibit_active;
+} EmpathyContactListStorePriv;
+
+typedef struct {
+ GtkTreeIter iter;
+ const gchar *name;
+ gboolean found;
+} FindGroup;
+
+typedef struct {
+ EmpathyContact *contact;
+ gboolean found;
+ GList *iters;
+} FindContact;
+
+typedef struct {
+ EmpathyContactListStore *store;
+ EmpathyContact *contact;
+ gboolean remove;
+} ShowActiveData;
+
+static void contact_list_store_finalize (GObject *object);
+static void contact_list_store_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void contact_list_store_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void contact_list_store_setup (EmpathyContactListStore *store);
+static gboolean contact_list_store_inibit_active_cb (EmpathyContactListStore *store);
+static void contact_list_store_members_changed_cb (EmpathyContactList *list_iface,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ gchar *message,
+ gboolean is_member,
+ EmpathyContactListStore *store);
+static void contact_list_store_groups_changed_cb (EmpathyContactList *list_iface,
+ EmpathyContact *contact,
+ gchar *group,
+ gboolean is_member,
+ EmpathyContactListStore *store);
+static void contact_list_store_add_contact (EmpathyContactListStore *store,
+ EmpathyContact *contact);
+static void contact_list_store_remove_contact (EmpathyContactListStore *store,
+ EmpathyContact *contact);
+static void contact_list_store_contact_update (EmpathyContactListStore *store,
+ EmpathyContact *contact);
+static void contact_list_store_contact_updated_cb (EmpathyContact *contact,
+ GParamSpec *param,
+ EmpathyContactListStore *store);
+static void contact_list_store_contact_set_active (EmpathyContactListStore *store,
+ EmpathyContact *contact,
+ gboolean active,
+ gboolean set_changed);
+static ShowActiveData * contact_list_store_contact_active_new (EmpathyContactListStore *store,
+ EmpathyContact *contact,
+ gboolean remove);
+static void contact_list_store_contact_active_free (ShowActiveData *data);
+static gboolean contact_list_store_contact_active_cb (ShowActiveData *data);
+static gboolean contact_list_store_get_group_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ FindGroup *fg);
+static void contact_list_store_get_group (EmpathyContactListStore *store,
+ const gchar *name,
+ GtkTreeIter *iter_group_to_set,
+ GtkTreeIter *iter_separator_to_set,
+ gboolean *created);
+static gint contact_list_store_state_sort_func (GtkTreeModel *model,
+ GtkTreeIter *iter_a,
+ GtkTreeIter *iter_b,
+ gpointer user_data);
+static gint contact_list_store_name_sort_func (GtkTreeModel *model,
+ GtkTreeIter *iter_a,
+ GtkTreeIter *iter_b,
+ gpointer user_data);
+static gboolean contact_list_store_find_contact_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ FindContact *fc);
+static GList * contact_list_store_find_contact (EmpathyContactListStore *store,
+ EmpathyContact *contact);
+static gboolean contact_list_store_update_list_mode_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ EmpathyContactListStore *store);
+
+enum {
+ PROP_0,
+ PROP_CONTACT_LIST,
+ PROP_SHOW_OFFLINE,
+ PROP_SHOW_AVATARS,
+ PROP_SHOW_GROUPS,
+ PROP_IS_COMPACT,
+ PROP_SORT_CRITERIUM
+};
+
+G_DEFINE_TYPE (EmpathyContactListStore, empathy_contact_list_store, GTK_TYPE_TREE_STORE);
+
+static gboolean
+contact_list_store_iface_setup (gpointer user_data)
+{
+ EmpathyContactListStore *store = user_data;
+ EmpathyContactListStorePriv *priv = GET_PRIV (store);
+ GList *contacts, *l;
+
+ /* Signal connection. */
+ g_signal_connect (priv->list,
+ "members-changed",
+ G_CALLBACK (contact_list_store_members_changed_cb),
+ store);
+ g_signal_connect (priv->list,
+ "groups-changed",
+ G_CALLBACK (contact_list_store_groups_changed_cb),
+ store);
+
+ /* Add contacts already created. */
+ contacts = empathy_contact_list_get_members (priv->list);
+ for (l = contacts; l; l = l->next) {
+ contact_list_store_members_changed_cb (priv->list, l->data,
+ NULL, 0, NULL,
+ TRUE,
+ store);
+
+ g_object_unref (l->data);
+ }
+ g_list_free (contacts);
+
+ return FALSE;
+}
+
+
+static void
+contact_list_store_set_contact_list (EmpathyContactListStore *store,
+ EmpathyContactList *list_iface)
+{
+ EmpathyContactListStorePriv *priv = GET_PRIV (store);
+
+ priv->list = g_object_ref (list_iface);
+
+ /* Let a chance to have all properties set before populating */
+ g_idle_add (contact_list_store_iface_setup, store);
+}
+
+static void
+empathy_contact_list_store_class_init (EmpathyContactListStoreClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = contact_list_store_finalize;
+ object_class->get_property = contact_list_store_get_property;
+ object_class->set_property = contact_list_store_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_CONTACT_LIST,
+ g_param_spec_object ("contact-list",
+ "The contact list iface",
+ "The contact list iface",
+ EMPATHY_TYPE_CONTACT_LIST,
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_SHOW_OFFLINE,
+ g_param_spec_boolean ("show-offline",
+ "Show Offline",
+ "Whether contact list should display "
+ "offline contacts",
+ FALSE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_SHOW_AVATARS,
+ g_param_spec_boolean ("show-avatars",
+ "Show Avatars",
+ "Whether contact list should display "
+ "avatars for contacts",
+ TRUE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_SHOW_GROUPS,
+ g_param_spec_boolean ("show-groups",
+ "Show Groups",
+ "Whether contact list should display "
+ "contact groups",
+ TRUE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_IS_COMPACT,
+ g_param_spec_boolean ("is-compact",
+ "Is Compact",
+ "Whether the contact list is in compact mode or not",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_SORT_CRITERIUM,
+ g_param_spec_enum ("sort-criterium",
+ "Sort citerium",
+ "The sort criterium to use for sorting the contact list",
+ EMPATHY_TYPE_CONTACT_LIST_STORE_SORT,
+ EMPATHY_CONTACT_LIST_STORE_SORT_NAME,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof (EmpathyContactListStorePriv));
+}
+
+static void
+empathy_contact_list_store_init (EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (store,
+ EMPATHY_TYPE_CONTACT_LIST_STORE, EmpathyContactListStorePriv);
+
+ store->priv = priv;
+ priv->show_avatars = TRUE;
+ priv->show_groups = TRUE;
+ priv->inhibit_active = g_timeout_add_seconds (ACTIVE_USER_WAIT_TO_ENABLE_TIME,
+ (GSourceFunc) contact_list_store_inibit_active_cb,
+ store);
+ contact_list_store_setup (store);
+}
+
+static void
+contact_list_store_finalize (GObject *object)
+{
+ EmpathyContactListStorePriv *priv = GET_PRIV (object);
+ GList *contacts, *l;
+
+ contacts = empathy_contact_list_get_members (priv->list);
+ for (l = contacts; l; l = l->next) {
+ g_signal_handlers_disconnect_by_func (l->data,
+ G_CALLBACK (contact_list_store_contact_updated_cb),
+ object);
+
+ g_object_unref (l->data);
+ }
+ g_list_free (contacts);
+
+ g_signal_handlers_disconnect_by_func (priv->list,
+ G_CALLBACK (contact_list_store_members_changed_cb),
+ object);
+ g_signal_handlers_disconnect_by_func (priv->list,
+ G_CALLBACK (contact_list_store_groups_changed_cb),
+ object);
+ g_object_unref (priv->list);
+
+ if (priv->inhibit_active) {
+ g_source_remove (priv->inhibit_active);
+ }
+
+ G_OBJECT_CLASS (empathy_contact_list_store_parent_class)->finalize (object);
+}
+
+static void
+contact_list_store_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyContactListStorePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_CONTACT_LIST:
+ g_value_set_object (value, priv->list);
+ break;
+ case PROP_SHOW_OFFLINE:
+ g_value_set_boolean (value, priv->show_offline);
+ break;
+ case PROP_SHOW_AVATARS:
+ g_value_set_boolean (value, priv->show_avatars);
+ break;
+ case PROP_SHOW_GROUPS:
+ g_value_set_boolean (value, priv->show_groups);
+ break;
+ case PROP_IS_COMPACT:
+ g_value_set_boolean (value, priv->is_compact);
+ break;
+ case PROP_SORT_CRITERIUM:
+ g_value_set_enum (value, priv->sort_criterium);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+contact_list_store_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyContactListStorePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_CONTACT_LIST:
+ contact_list_store_set_contact_list (EMPATHY_CONTACT_LIST_STORE (object),
+ g_value_get_object (value));
+ break;
+ case PROP_SHOW_OFFLINE:
+ empathy_contact_list_store_set_show_offline (EMPATHY_CONTACT_LIST_STORE (object),
+ g_value_get_boolean (value));
+ break;
+ case PROP_SHOW_AVATARS:
+ empathy_contact_list_store_set_show_avatars (EMPATHY_CONTACT_LIST_STORE (object),
+ g_value_get_boolean (value));
+ break;
+ case PROP_SHOW_GROUPS:
+ empathy_contact_list_store_set_show_groups (EMPATHY_CONTACT_LIST_STORE (object),
+ g_value_get_boolean (value));
+ break;
+ case PROP_IS_COMPACT:
+ empathy_contact_list_store_set_is_compact (EMPATHY_CONTACT_LIST_STORE (object),
+ g_value_get_boolean (value));
+ break;
+ case PROP_SORT_CRITERIUM:
+ empathy_contact_list_store_set_sort_criterium (EMPATHY_CONTACT_LIST_STORE (object),
+ g_value_get_enum (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+EmpathyContactListStore *
+empathy_contact_list_store_new (EmpathyContactList *list_iface)
+{
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST (list_iface), NULL);
+
+ return g_object_new (EMPATHY_TYPE_CONTACT_LIST_STORE,
+ "contact-list", list_iface,
+ NULL);
+}
+
+EmpathyContactList *
+empathy_contact_list_store_get_list_iface (EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store), FALSE);
+
+ priv = GET_PRIV (store);
+
+ return priv->list;
+}
+
+gboolean
+empathy_contact_list_store_get_show_offline (EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store), FALSE);
+
+ priv = GET_PRIV (store);
+
+ return priv->show_offline;
+}
+
+void
+empathy_contact_list_store_set_show_offline (EmpathyContactListStore *store,
+ gboolean show_offline)
+{
+ EmpathyContactListStorePriv *priv;
+ GList *contacts, *l;
+ gboolean show_active;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store));
+
+ priv = GET_PRIV (store);
+
+ priv->show_offline = show_offline;
+ show_active = priv->show_active;
+
+ /* Disable temporarily. */
+ priv->show_active = FALSE;
+
+ contacts = empathy_contact_list_get_members (priv->list);
+ for (l = contacts; l; l = l->next) {
+ contact_list_store_contact_update (store, l->data);
+
+ g_object_unref (l->data);
+ }
+ g_list_free (contacts);
+
+ /* Restore to original setting. */
+ priv->show_active = show_active;
+
+ g_object_notify (G_OBJECT (store), "show-offline");
+}
+
+gboolean
+empathy_contact_list_store_get_show_avatars (EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store), TRUE);
+
+ priv = GET_PRIV (store);
+
+ return priv->show_avatars;
+}
+
+void
+empathy_contact_list_store_set_show_avatars (EmpathyContactListStore *store,
+ gboolean show_avatars)
+{
+ EmpathyContactListStorePriv *priv;
+ GtkTreeModel *model;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store));
+
+ priv = GET_PRIV (store);
+
+ priv->show_avatars = show_avatars;
+
+ model = GTK_TREE_MODEL (store);
+
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc)
+ contact_list_store_update_list_mode_foreach,
+ store);
+
+ g_object_notify (G_OBJECT (store), "show-avatars");
+}
+
+gboolean
+empathy_contact_list_store_get_show_groups (EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store), TRUE);
+
+ priv = GET_PRIV (store);
+
+ return priv->show_groups;
+}
+
+void
+empathy_contact_list_store_set_show_groups (EmpathyContactListStore *store,
+ gboolean show_groups)
+{
+ EmpathyContactListStorePriv *priv;
+ GList *contacts, *l;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store));
+
+ priv = GET_PRIV (store);
+
+ if (priv->show_groups == show_groups) {
+ return;
+ }
+
+ priv->show_groups = show_groups;
+
+ /* Remove all contacts and add them back, not optimized but that's the
+ * easy way :) */
+ gtk_tree_store_clear (GTK_TREE_STORE (store));
+ contacts = empathy_contact_list_get_members (priv->list);
+ for (l = contacts; l; l = l->next) {
+ contact_list_store_members_changed_cb (priv->list, l->data,
+ NULL, 0, NULL,
+ TRUE,
+ store);
+
+ g_object_unref (l->data);
+ }
+ g_list_free (contacts);
+
+ g_object_notify (G_OBJECT (store), "show-groups");
+}
+
+gboolean
+empathy_contact_list_store_get_is_compact (EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store), TRUE);
+
+ priv = GET_PRIV (store);
+
+ return priv->is_compact;
+}
+
+void
+empathy_contact_list_store_set_is_compact (EmpathyContactListStore *store,
+ gboolean is_compact)
+{
+ EmpathyContactListStorePriv *priv;
+ GtkTreeModel *model;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store));
+
+ priv = GET_PRIV (store);
+
+ priv->is_compact = is_compact;
+
+ model = GTK_TREE_MODEL (store);
+
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc)
+ contact_list_store_update_list_mode_foreach,
+ store);
+
+ g_object_notify (G_OBJECT (store), "is-compact");
+}
+
+EmpathyContactListStoreSort
+empathy_contact_list_store_get_sort_criterium (EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store), 0);
+
+ priv = GET_PRIV (store);
+
+ return priv->sort_criterium;
+}
+
+void
+empathy_contact_list_store_set_sort_criterium (EmpathyContactListStore *store,
+ EmpathyContactListStoreSort sort_criterium)
+{
+ EmpathyContactListStorePriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store));
+
+ priv = GET_PRIV (store);
+
+ priv->sort_criterium = sort_criterium;
+
+ switch (sort_criterium) {
+ case EMPATHY_CONTACT_LIST_STORE_SORT_STATE:
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
+ EMPATHY_CONTACT_LIST_STORE_COL_STATUS,
+ GTK_SORT_ASCENDING);
+ break;
+
+ case EMPATHY_CONTACT_LIST_STORE_SORT_NAME:
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME,
+ GTK_SORT_ASCENDING);
+ break;
+ }
+
+ g_object_notify (G_OBJECT (store), "sort-criterium");
+}
+
+gboolean
+empathy_contact_list_store_row_separator_func (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data)
+{
+ gboolean is_separator = FALSE;
+
+ g_return_val_if_fail (GTK_IS_TREE_MODEL (model), FALSE);
+
+ gtk_tree_model_get (model, iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, &is_separator,
+ -1);
+
+ return is_separator;
+}
+
+gchar *
+empathy_contact_list_store_get_parent_group (GtkTreeModel *model,
+ GtkTreePath *path,
+ gboolean *path_is_group)
+{
+ GtkTreeIter parent_iter, iter;
+ gchar *name = NULL;
+ gboolean is_group;
+
+ g_return_val_if_fail (GTK_IS_TREE_MODEL (model), NULL);
+
+ if (path_is_group) {
+ *path_is_group = FALSE;
+ }
+
+ if (!gtk_tree_model_get_iter (model, &iter, path)) {
+ return NULL;
+ }
+
+ gtk_tree_model_get (model, &iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name,
+ -1);
+
+ if (!is_group) {
+ g_free (name);
+ name = NULL;
+
+ if (!gtk_tree_model_iter_parent (model, &parent_iter, &iter)) {
+ return NULL;
+ }
+
+ iter = parent_iter;
+
+ gtk_tree_model_get (model, &iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name,
+ -1);
+ if (!is_group) {
+ g_free (name);
+ return NULL;
+ }
+ }
+
+ if (path_is_group) {
+ *path_is_group = TRUE;
+ }
+
+ return name;
+}
+
+gboolean
+empathy_contact_list_store_search_equal_func (GtkTreeModel *model,
+ gint column,
+ const gchar *key,
+ GtkTreeIter *iter,
+ gpointer search_data)
+{
+ gchar *name, *name_folded;
+ gchar *key_folded;
+ gboolean ret;
+
+ g_return_val_if_fail (GTK_IS_TREE_MODEL (model), FALSE);
+
+ if (!key) {
+ return TRUE;
+ }
+
+ gtk_tree_model_get (model, iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name,
+ -1);
+
+ if (!name) {
+ return TRUE;
+ }
+
+ name_folded = g_utf8_casefold (name, -1);
+ key_folded = g_utf8_casefold (key, -1);
+
+ if (name_folded && key_folded &&
+ strstr (name_folded, key_folded)) {
+ ret = FALSE;
+ } else {
+ ret = TRUE;
+ }
+
+ g_free (name);
+ g_free (name_folded);
+ g_free (key_folded);
+
+ return ret;
+}
+
+static void
+contact_list_store_setup (EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv;
+ GType types[] = {G_TYPE_STRING, /* Status icon-name */
+ GDK_TYPE_PIXBUF, /* Avatar pixbuf */
+ G_TYPE_BOOLEAN, /* Avatar pixbuf visible */
+ G_TYPE_STRING, /* Name */
+ G_TYPE_STRING, /* Status string */
+ G_TYPE_BOOLEAN, /* Show status */
+ EMPATHY_TYPE_CONTACT, /* Contact type */
+ G_TYPE_BOOLEAN, /* Is group */
+ G_TYPE_BOOLEAN, /* Is active */
+ G_TYPE_BOOLEAN, /* Is online */
+ G_TYPE_BOOLEAN, /* Is separator */
+ G_TYPE_BOOLEAN}; /* Can VoIP */
+
+ priv = GET_PRIV (store);
+
+ gtk_tree_store_set_column_types (GTK_TREE_STORE (store),
+ EMPATHY_CONTACT_LIST_STORE_COL_COUNT,
+ types);
+
+ /* Set up sorting */
+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (store),
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME,
+ contact_list_store_name_sort_func,
+ store, NULL);
+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (store),
+ EMPATHY_CONTACT_LIST_STORE_COL_STATUS,
+ contact_list_store_state_sort_func,
+ store, NULL);
+
+ priv->sort_criterium = EMPATHY_CONTACT_LIST_STORE_SORT_NAME;
+ empathy_contact_list_store_set_sort_criterium (store, priv->sort_criterium);
+}
+
+static gboolean
+contact_list_store_inibit_active_cb (EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv;
+
+ priv = GET_PRIV (store);
+
+ priv->show_active = TRUE;
+ priv->inhibit_active = 0;
+
+ return FALSE;
+}
+
+static void
+contact_list_store_members_changed_cb (EmpathyContactList *list_iface,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ gchar *message,
+ gboolean is_member,
+ EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv;
+
+ priv = GET_PRIV (store);
+
+ DEBUG ("Contact %s (%d) %s",
+ empathy_contact_get_id (contact),
+ empathy_contact_get_handle (contact),
+ is_member ? "added" : "removed");
+
+ if (is_member) {
+ g_signal_connect (contact, "notify::presence",
+ G_CALLBACK (contact_list_store_contact_updated_cb),
+ store);
+ g_signal_connect (contact, "notify::presence-message",
+ G_CALLBACK (contact_list_store_contact_updated_cb),
+ store);
+ g_signal_connect (contact, "notify::name",
+ G_CALLBACK (contact_list_store_contact_updated_cb),
+ store);
+ g_signal_connect (contact, "notify::avatar",
+ G_CALLBACK (contact_list_store_contact_updated_cb),
+ store);
+ g_signal_connect (contact, "notify::capabilities",
+ G_CALLBACK (contact_list_store_contact_updated_cb),
+ store);
+
+ contact_list_store_add_contact (store, contact);
+ } else {
+ g_signal_handlers_disconnect_by_func (contact,
+ G_CALLBACK (contact_list_store_contact_updated_cb),
+ store);
+
+ contact_list_store_remove_contact (store, contact);
+ }
+}
+
+static void
+contact_list_store_groups_changed_cb (EmpathyContactList *list_iface,
+ EmpathyContact *contact,
+ gchar *group,
+ gboolean is_member,
+ EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv;
+ gboolean show_active;
+
+ priv = GET_PRIV (store);
+
+ DEBUG ("Updating groups for contact %s (%d)",
+ empathy_contact_get_id (contact),
+ empathy_contact_get_handle (contact));
+
+ /* We do this to make sure the groups are correct, if not, we
+ * would have to check the groups already set up for each
+ * contact and then see what has been updated.
+ */
+ show_active = priv->show_active;
+ priv->show_active = FALSE;
+ contact_list_store_remove_contact (store, contact);
+ contact_list_store_add_contact (store, contact);
+ priv->show_active = show_active;
+}
+
+static void
+contact_list_store_add_contact (EmpathyContactListStore *store,
+ EmpathyContact *contact)
+{
+ EmpathyContactListStorePriv *priv;
+ GtkTreeIter iter;
+ GList *groups = NULL, *l;
+
+ priv = GET_PRIV (store);
+
+ if (G_STR_EMPTY (empathy_contact_get_name (contact)) ||
+ (!priv->show_offline && !empathy_contact_is_online (contact))) {
+ return;
+ }
+
+ if (priv->show_groups) {
+ groups = empathy_contact_list_get_groups (priv->list, contact);
+ }
+
+ /* If no groups just add it at the top level. */
+ if (!groups) {
+ gtk_tree_store_append (GTK_TREE_STORE (store), &iter, NULL);
+ gtk_tree_store_set (GTK_TREE_STORE (store), &iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, empathy_contact_get_name (contact),
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, contact,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, FALSE,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, FALSE,
+ EMPATHY_CONTACT_LIST_STORE_COL_CAN_VOIP, empathy_contact_can_voip (contact),
+ -1);
+ }
+
+ /* Else add to each group. */
+ for (l = groups; l; l = l->next) {
+ GtkTreeIter iter_group;
+
+ contact_list_store_get_group (store, l->data, &iter_group, NULL, NULL);
+
+ gtk_tree_store_insert_after (GTK_TREE_STORE (store), &iter,
+ &iter_group, NULL);
+ gtk_tree_store_set (GTK_TREE_STORE (store), &iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, empathy_contact_get_name (contact),
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, contact,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, FALSE,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, FALSE,
+ EMPATHY_CONTACT_LIST_STORE_COL_CAN_VOIP, empathy_contact_can_voip (contact),
+ -1);
+ g_free (l->data);
+ }
+ g_list_free (groups);
+
+ contact_list_store_contact_update (store, contact);
+
+}
+
+static void
+contact_list_store_remove_contact (EmpathyContactListStore *store,
+ EmpathyContact *contact)
+{
+ EmpathyContactListStorePriv *priv;
+ GtkTreeModel *model;
+ GList *iters, *l;
+
+ priv = GET_PRIV (store);
+
+ iters = contact_list_store_find_contact (store, contact);
+ if (!iters) {
+ return;
+ }
+
+ /* Clean up model */
+ model = GTK_TREE_MODEL (store);
+
+ for (l = iters; l; l = l->next) {
+ GtkTreeIter parent;
+
+ /* NOTE: it is only <= 2 here because we have
+ * separators after the group name, otherwise it
+ * should be 1.
+ */
+ if (gtk_tree_model_iter_parent (model, &parent, l->data) &&
+ gtk_tree_model_iter_n_children (model, &parent) <= 2) {
+ gtk_tree_store_remove (GTK_TREE_STORE (store), &parent);
+ } else {
+ gtk_tree_store_remove (GTK_TREE_STORE (store), l->data);
+ }
+ }
+
+ g_list_foreach (iters, (GFunc) gtk_tree_iter_free, NULL);
+ g_list_free (iters);
+}
+
+static void
+contact_list_store_contact_update (EmpathyContactListStore *store,
+ EmpathyContact *contact)
+{
+ EmpathyContactListStorePriv *priv;
+ ShowActiveData *data;
+ GtkTreeModel *model;
+ GList *iters, *l;
+ gboolean in_list;
+ gboolean should_be_in_list;
+ gboolean was_online = TRUE;
+ gboolean now_online = FALSE;
+ gboolean set_model = FALSE;
+ gboolean do_remove = FALSE;
+ gboolean do_set_active = FALSE;
+ gboolean do_set_refresh = FALSE;
+ gboolean show_avatar = FALSE;
+ GdkPixbuf *pixbuf_avatar;
+
+ priv = GET_PRIV (store);
+
+ model = GTK_TREE_MODEL (store);
+
+ iters = contact_list_store_find_contact (store, contact);
+ if (!iters) {
+ in_list = FALSE;
+ } else {
+ in_list = TRUE;
+ }
+
+ /* Get online state now. */
+ now_online = empathy_contact_is_online (contact);
+
+ if (priv->show_offline || now_online) {
+ should_be_in_list = TRUE;
+ } else {
+ should_be_in_list = FALSE;
+ }
+
+ if (!in_list && !should_be_in_list) {
+ /* Nothing to do. */
+ DEBUG ("Contact:'%s' in list:NO, should be:NO",
+ empathy_contact_get_name (contact));
+
+ g_list_foreach (iters, (GFunc) gtk_tree_iter_free, NULL);
+ g_list_free (iters);
+ return;
+ }
+ else if (in_list && !should_be_in_list) {
+ DEBUG ("Contact:'%s' in list:YES, should be:NO",
+ empathy_contact_get_name (contact));
+
+ if (priv->show_active) {
+ do_remove = TRUE;
+ do_set_active = TRUE;
+ do_set_refresh = TRUE;
+
+ set_model = TRUE;
+ DEBUG ("Remove item (after timeout)");
+ } else {
+ DEBUG ("Remove item (now)!");
+ contact_list_store_remove_contact (store, contact);
+ }
+ }
+ else if (!in_list && should_be_in_list) {
+ DEBUG ("Contact:'%s' in list:NO, should be:YES",
+ empathy_contact_get_name (contact));
+
+ contact_list_store_add_contact (store, contact);
+
+ if (priv->show_active) {
+ do_set_active = TRUE;
+
+ DEBUG ("Set active (contact added)");
+ }
+ } else {
+ DEBUG ("Contact:'%s' in list:YES, should be:YES",
+ empathy_contact_get_name (contact));
+
+ /* Get online state before. */
+ if (iters && g_list_length (iters) > 0) {
+ gtk_tree_model_get (model, iters->data,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_ONLINE, &was_online,
+ -1);
+ }
+
+ /* Is this really an update or an online/offline. */
+ if (priv->show_active) {
+ if (was_online != now_online) {
+ do_set_active = TRUE;
+ do_set_refresh = TRUE;
+
+ DEBUG ("Set active (contact updated %s)",
+ was_online ? "online -> offline" :
+ "offline -> online");
+ } else {
+ /* Was TRUE for presence updates. */
+ /* do_set_active = FALSE; */
+ do_set_refresh = TRUE;
+
+ DEBUG ("Set active (contact updated)");
+ }
+ }
+
+ set_model = TRUE;
+ }
+
+ if (priv->show_avatars && !priv->is_compact) {
+ show_avatar = TRUE;
+ }
+ pixbuf_avatar = empathy_pixbuf_avatar_from_contact_scaled (contact, 32, 32);
+ for (l = iters; l && set_model; l = l->next) {
+ gtk_tree_store_set (GTK_TREE_STORE (store), l->data,
+ EMPATHY_CONTACT_LIST_STORE_COL_ICON_STATUS, empathy_icon_name_for_contact (contact),
+ EMPATHY_CONTACT_LIST_STORE_COL_PIXBUF_AVATAR, pixbuf_avatar,
+ EMPATHY_CONTACT_LIST_STORE_COL_PIXBUF_AVATAR_VISIBLE, show_avatar,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, empathy_contact_get_name (contact),
+ EMPATHY_CONTACT_LIST_STORE_COL_STATUS, empathy_contact_get_status (contact),
+ EMPATHY_CONTACT_LIST_STORE_COL_STATUS_VISIBLE, !priv->is_compact,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, FALSE,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_ONLINE, now_online,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, FALSE,
+ EMPATHY_CONTACT_LIST_STORE_COL_CAN_VOIP, empathy_contact_can_voip (contact),
+ -1);
+ }
+
+ if (pixbuf_avatar) {
+ g_object_unref (pixbuf_avatar);
+ }
+
+ if (priv->show_active && do_set_active) {
+ contact_list_store_contact_set_active (store, contact, do_set_active, do_set_refresh);
+
+ if (do_set_active) {
+ data = contact_list_store_contact_active_new (store, contact, do_remove);
+ g_timeout_add_seconds (ACTIVE_USER_SHOW_TIME,
+ (GSourceFunc) contact_list_store_contact_active_cb,
+ data);
+ }
+ }
+
+ /* FIXME: when someone goes online then offline quickly, the
+ * first timeout sets the user to be inactive and the second
+ * timeout removes the user from the contact list, really we
+ * should remove the first timeout.
+ */
+ g_list_foreach (iters, (GFunc) gtk_tree_iter_free, NULL);
+ g_list_free (iters);
+}
+
+static void
+contact_list_store_contact_updated_cb (EmpathyContact *contact,
+ GParamSpec *param,
+ EmpathyContactListStore *store)
+{
+ DEBUG ("Contact:'%s' updated, checking roster is in sync...",
+ empathy_contact_get_name (contact));
+
+ contact_list_store_contact_update (store, contact);
+}
+
+static void
+contact_list_store_contact_set_active (EmpathyContactListStore *store,
+ EmpathyContact *contact,
+ gboolean active,
+ gboolean set_changed)
+{
+ EmpathyContactListStorePriv *priv;
+ GtkTreeModel *model;
+ GList *iters, *l;
+
+ priv = GET_PRIV (store);
+ model = GTK_TREE_MODEL (store);
+
+ iters = contact_list_store_find_contact (store, contact);
+ for (l = iters; l; l = l->next) {
+ GtkTreePath *path;
+
+ gtk_tree_store_set (GTK_TREE_STORE (store), l->data,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE, active,
+ -1);
+
+ DEBUG ("Set item %s", active ? "active" : "inactive");
+
+ if (set_changed) {
+ path = gtk_tree_model_get_path (model, l->data);
+ gtk_tree_model_row_changed (model, path, l->data);
+ gtk_tree_path_free (path);
+ }
+ }
+
+ g_list_foreach (iters, (GFunc) gtk_tree_iter_free, NULL);
+ g_list_free (iters);
+
+}
+
+static ShowActiveData *
+contact_list_store_contact_active_new (EmpathyContactListStore *store,
+ EmpathyContact *contact,
+ gboolean remove)
+{
+ ShowActiveData *data;
+
+ DEBUG ("Contact:'%s' now active, and %s be removed",
+ empathy_contact_get_name (contact),
+ remove ? "WILL" : "WILL NOT");
+
+ data = g_slice_new0 (ShowActiveData);
+
+ data->store = g_object_ref (store);
+ data->contact = g_object_ref (contact);
+ data->remove = remove;
+
+ return data;
+}
+
+static void
+contact_list_store_contact_active_free (ShowActiveData *data)
+{
+ g_object_unref (data->contact);
+ g_object_unref (data->store);
+
+ g_slice_free (ShowActiveData, data);
+}
+
+static gboolean
+contact_list_store_contact_active_cb (ShowActiveData *data)
+{
+ EmpathyContactListStorePriv *priv;
+
+ priv = GET_PRIV (data->store);
+
+ if (data->remove &&
+ !priv->show_offline &&
+ !empathy_contact_is_online (data->contact)) {
+ DEBUG ("Contact:'%s' active timeout, removing item",
+ empathy_contact_get_name (data->contact));
+ contact_list_store_remove_contact (data->store, data->contact);
+ }
+
+ DEBUG ("Contact:'%s' no longer active",
+ empathy_contact_get_name (data->contact));
+
+ contact_list_store_contact_set_active (data->store,
+ data->contact,
+ FALSE,
+ TRUE);
+
+ contact_list_store_contact_active_free (data);
+
+ return FALSE;
+}
+
+static gboolean
+contact_list_store_get_group_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ FindGroup *fg)
+{
+ gchar *str;
+ gboolean is_group;
+
+ /* Groups are only at the top level. */
+ if (gtk_tree_path_get_depth (path) != 1) {
+ return FALSE;
+ }
+
+ gtk_tree_model_get (model, iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, &str,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
+ -1);
+
+ if (is_group && !tp_strdiff (str, fg->name)) {
+ fg->found = TRUE;
+ fg->iter = *iter;
+ }
+
+ g_free (str);
+
+ return fg->found;
+}
+
+static void
+contact_list_store_get_group (EmpathyContactListStore *store,
+ const gchar *name,
+ GtkTreeIter *iter_group_to_set,
+ GtkTreeIter *iter_separator_to_set,
+ gboolean *created)
+{
+ EmpathyContactListStorePriv *priv;
+ GtkTreeModel *model;
+ GtkTreeIter iter_group;
+ GtkTreeIter iter_separator;
+ FindGroup fg;
+
+ priv = GET_PRIV (store);
+
+ memset (&fg, 0, sizeof (fg));
+
+ fg.name = name;
+
+ model = GTK_TREE_MODEL (store);
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc) contact_list_store_get_group_foreach,
+ &fg);
+
+ if (!fg.found) {
+ if (created) {
+ *created = TRUE;
+ }
+
+ gtk_tree_store_append (GTK_TREE_STORE (store), &iter_group, NULL);
+ gtk_tree_store_set (GTK_TREE_STORE (store), &iter_group,
+ EMPATHY_CONTACT_LIST_STORE_COL_ICON_STATUS, NULL,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, name,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, TRUE,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE, FALSE,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, FALSE,
+ -1);
+
+ if (iter_group_to_set) {
+ *iter_group_to_set = iter_group;
+ }
+
+ gtk_tree_store_append (GTK_TREE_STORE (store),
+ &iter_separator,
+ &iter_group);
+ gtk_tree_store_set (GTK_TREE_STORE (store), &iter_separator,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, TRUE,
+ -1);
+
+ if (iter_separator_to_set) {
+ *iter_separator_to_set = iter_separator;
+ }
+ } else {
+ if (created) {
+ *created = FALSE;
+ }
+
+ if (iter_group_to_set) {
+ *iter_group_to_set = fg.iter;
+ }
+
+ iter_separator = fg.iter;
+
+ if (gtk_tree_model_iter_next (model, &iter_separator)) {
+ gboolean is_separator;
+
+ gtk_tree_model_get (model, &iter_separator,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, &is_separator,
+ -1);
+
+ if (is_separator && iter_separator_to_set) {
+ *iter_separator_to_set = iter_separator;
+ }
+ }
+ }
+}
+
+static guint
+contact_list_store_ordered_presence (McPresence state)
+{
+ switch (state) {
+ case MC_PRESENCE_UNSET:
+ case MC_PRESENCE_OFFLINE:
+ return 5;
+ case MC_PRESENCE_AVAILABLE:
+ return 0;
+ case MC_PRESENCE_AWAY:
+ return 2;
+ case MC_PRESENCE_EXTENDED_AWAY:
+ return 3;
+ case MC_PRESENCE_HIDDEN:
+ return 4;
+ case MC_PRESENCE_DO_NOT_DISTURB:
+ return 1;
+ default:
+ g_return_val_if_reached (6);
+ }
+}
+
+static gint
+contact_list_store_state_sort_func (GtkTreeModel *model,
+ GtkTreeIter *iter_a,
+ GtkTreeIter *iter_b,
+ gpointer user_data)
+{
+ gint ret_val = 0;
+ gchar *name_a, *name_b;
+ gboolean is_separator_a, is_separator_b;
+ EmpathyContact *contact_a, *contact_b;
+ guint presence_a, presence_b;
+
+ gtk_tree_model_get (model, iter_a,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name_a,
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact_a,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, &is_separator_a,
+ -1);
+ gtk_tree_model_get (model, iter_b,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name_b,
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact_b,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, &is_separator_b,
+ -1);
+
+ /* Separator or group? */
+ if (is_separator_a || is_separator_b) {
+ if (is_separator_a) {
+ ret_val = -1;
+ } else if (is_separator_b) {
+ ret_val = 1;
+ }
+ } else if (!contact_a && contact_b) {
+ ret_val = 1;
+ } else if (contact_a && !contact_b) {
+ ret_val = -1;
+ } else if (!contact_a && !contact_b) {
+ /* Handle groups */
+ ret_val = g_utf8_collate (name_a, name_b);
+ }
+
+ if (ret_val) {
+ goto free_and_out;
+ }
+
+ /* If we managed to get this far, we can start looking at
+ * the presences.
+ */
+ presence_a = empathy_contact_get_presence (EMPATHY_CONTACT (contact_a));
+ presence_a = contact_list_store_ordered_presence (presence_a);
+ presence_b = empathy_contact_get_presence (EMPATHY_CONTACT (contact_b));
+ presence_b = contact_list_store_ordered_presence (presence_b);
+
+ if (presence_a < presence_b) {
+ ret_val = -1;
+ } else if (presence_a > presence_b) {
+ ret_val = 1;
+ } else {
+ /* Fallback: compare by name */
+ ret_val = g_utf8_collate (name_a, name_b);
+ }
+
+free_and_out:
+ g_free (name_a);
+ g_free (name_b);
+
+ if (contact_a) {
+ g_object_unref (contact_a);
+ }
+
+ if (contact_b) {
+ g_object_unref (contact_b);
+ }
+
+ return ret_val;
+}
+
+static gint
+contact_list_store_name_sort_func (GtkTreeModel *model,
+ GtkTreeIter *iter_a,
+ GtkTreeIter *iter_b,
+ gpointer user_data)
+{
+ gchar *name_a, *name_b;
+ EmpathyContact *contact_a, *contact_b;
+ gboolean is_separator_a, is_separator_b;
+ gint ret_val;
+
+ gtk_tree_model_get (model, iter_a,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name_a,
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact_a,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, &is_separator_a,
+ -1);
+ gtk_tree_model_get (model, iter_b,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name_b,
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact_b,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR, &is_separator_b,
+ -1);
+
+ /* If contact is NULL it means it's a group. */
+
+ if (is_separator_a || is_separator_b) {
+ if (is_separator_a) {
+ ret_val = -1;
+ } else if (is_separator_b) {
+ ret_val = 1;
+ }
+ } else if (!contact_a && contact_b) {
+ ret_val = 1;
+ } else if (contact_a && !contact_b) {
+ ret_val = -1;
+ } else {
+ ret_val = g_utf8_collate (name_a, name_b);
+ }
+
+ g_free (name_a);
+ g_free (name_b);
+
+ if (contact_a) {
+ g_object_unref (contact_a);
+ }
+
+ if (contact_b) {
+ g_object_unref (contact_b);
+ }
+
+ return ret_val;
+}
+
+static gboolean
+contact_list_store_find_contact_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ FindContact *fc)
+{
+ EmpathyContact *contact;
+
+ gtk_tree_model_get (model, iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact,
+ -1);
+
+ if (contact == fc->contact) {
+ fc->found = TRUE;
+ fc->iters = g_list_append (fc->iters, gtk_tree_iter_copy (iter));
+ }
+
+ if (contact) {
+ g_object_unref (contact);
+ }
+
+ return FALSE;
+}
+
+static GList *
+contact_list_store_find_contact (EmpathyContactListStore *store,
+ EmpathyContact *contact)
+{
+ EmpathyContactListStorePriv *priv;
+ GtkTreeModel *model;
+ GList *l = NULL;
+ FindContact fc;
+
+ priv = GET_PRIV (store);
+
+ memset (&fc, 0, sizeof (fc));
+
+ fc.contact = contact;
+
+ model = GTK_TREE_MODEL (store);
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc) contact_list_store_find_contact_foreach,
+ &fc);
+
+ if (fc.found) {
+ l = fc.iters;
+ }
+
+ return l;
+}
+
+static gboolean
+contact_list_store_update_list_mode_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ EmpathyContactListStore *store)
+{
+ EmpathyContactListStorePriv *priv;
+ gboolean show_avatar = FALSE;
+
+ priv = GET_PRIV (store);
+
+ if (priv->show_avatars && !priv->is_compact) {
+ show_avatar = TRUE;
+ }
+
+ gtk_tree_store_set (GTK_TREE_STORE (store), iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_PIXBUF_AVATAR_VISIBLE, show_avatar,
+ EMPATHY_CONTACT_LIST_STORE_COL_STATUS_VISIBLE, !priv->is_compact,
+ -1);
+
+ return FALSE;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-contact-list-store.h b/trunk/libempathy-gtk/empathy-contact-list-store.h
new file mode 100644
index 000000000..10354ff11
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-list-store.h
@@ -0,0 +1,109 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_CONTACT_LIST_STORE_H__
+#define __EMPATHY_CONTACT_LIST_STORE_H__
+
+#include <gtk/gtktreestore.h>
+
+#include <libempathy/empathy-contact-list.h>
+#include <libempathy/empathy-contact.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CONTACT_LIST_STORE (empathy_contact_list_store_get_type ())
+#define EMPATHY_CONTACT_LIST_STORE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CONTACT_LIST_STORE, EmpathyContactListStore))
+#define EMPATHY_CONTACT_LIST_STORE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_CONTACT_LIST_STORE, EmpathyContactListStoreClass))
+#define EMPATHY_IS_CONTACT_LIST_STORE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CONTACT_LIST_STORE))
+#define EMPATHY_IS_CONTACT_LIST_STORE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CONTACT_LIST_STORE))
+#define EMPATHY_CONTACT_LIST_STORE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CONTACT_LIST_STORE, EmpathyContactListStoreClass))
+
+typedef struct _EmpathyContactListStore EmpathyContactListStore;
+typedef struct _EmpathyContactListStoreClass EmpathyContactListStoreClass;
+
+typedef enum {
+ EMPATHY_CONTACT_LIST_STORE_SORT_STATE,
+ EMPATHY_CONTACT_LIST_STORE_SORT_NAME
+} EmpathyContactListStoreSort;
+
+typedef enum {
+ EMPATHY_CONTACT_LIST_STORE_COL_ICON_STATUS,
+ EMPATHY_CONTACT_LIST_STORE_COL_PIXBUF_AVATAR,
+ EMPATHY_CONTACT_LIST_STORE_COL_PIXBUF_AVATAR_VISIBLE,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME,
+ EMPATHY_CONTACT_LIST_STORE_COL_STATUS,
+ EMPATHY_CONTACT_LIST_STORE_COL_STATUS_VISIBLE,
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_ONLINE,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR,
+ EMPATHY_CONTACT_LIST_STORE_COL_CAN_VOIP,
+ EMPATHY_CONTACT_LIST_STORE_COL_COUNT
+} EmpathyContactListStoreCol;
+
+struct _EmpathyContactListStore {
+ GtkTreeStore parent;
+ gpointer priv;
+};
+
+struct _EmpathyContactListStoreClass {
+ GtkTreeStoreClass parent_class;
+};
+
+GType empathy_contact_list_store_get_type (void) G_GNUC_CONST;
+EmpathyContactListStore * empathy_contact_list_store_new (EmpathyContactList *list_iface);
+EmpathyContactList * empathy_contact_list_store_get_list_iface (EmpathyContactListStore *store);
+gboolean empathy_contact_list_store_get_show_offline (EmpathyContactListStore *store);
+void empathy_contact_list_store_set_show_offline (EmpathyContactListStore *store,
+ gboolean show_offline);
+gboolean empathy_contact_list_store_get_show_avatars (EmpathyContactListStore *store);
+void empathy_contact_list_store_set_show_avatars (EmpathyContactListStore *store,
+ gboolean show_avatars);
+gboolean empathy_contact_list_store_get_show_groups (EmpathyContactListStore *store);
+void empathy_contact_list_store_set_show_groups (EmpathyContactListStore *store,
+ gboolean show_groups);
+gboolean empathy_contact_list_store_get_is_compact (EmpathyContactListStore *store);
+void empathy_contact_list_store_set_is_compact (EmpathyContactListStore *store,
+ gboolean is_compact);
+EmpathyContactListStoreSort empathy_contact_list_store_get_sort_criterium (EmpathyContactListStore *store);
+void empathy_contact_list_store_set_sort_criterium (EmpathyContactListStore *store,
+ EmpathyContactListStoreSort sort_criterium);
+gboolean empathy_contact_list_store_row_separator_func (GtkTreeModel *model,
+ GtkTreeIter *iter,
+ gpointer data);
+gchar * empathy_contact_list_store_get_parent_group (GtkTreeModel *model,
+ GtkTreePath *path,
+ gboolean *path_is_group);
+gboolean empathy_contact_list_store_search_equal_func (GtkTreeModel *model,
+ gint column,
+ const gchar *key,
+ GtkTreeIter *iter,
+ gpointer search_data);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CONTACT_LIST_STORE_H__ */
+
diff --git a/trunk/libempathy-gtk/empathy-contact-list-view.c b/trunk/libempathy-gtk/empathy-contact-list-view.c
new file mode 100644
index 000000000..90598d393
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-list-view.c
@@ -0,0 +1,1308 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+#include <libmissioncontrol/mc-account.h>
+
+#include <libempathy/empathy-contact-factory.h>
+#include <libempathy/empathy-contact-list.h>
+#include <libempathy/empathy-contact-groups.h>
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-contact-list-view.h"
+#include "empathy-contact-list-store.h"
+#include "empathy-images.h"
+#include "empathy-cell-renderer-expander.h"
+#include "empathy-cell-renderer-text.h"
+#include "empathy-cell-renderer-activatable.h"
+#include "empathy-ui-utils.h"
+#include "empathy-gtk-enum-types.h"
+#include "empathy-gtk-marshal.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
+#include <libempathy/empathy-debug.h>
+
+/* Flashing delay for icons (milliseconds). */
+#define FLASH_TIMEOUT 500
+
+/* Active users are those which have recently changed state
+ * (e.g. online, offline or from normal to a busy state).
+ */
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyContactListView)
+typedef struct {
+ EmpathyContactListStore *store;
+ GtkTreeRowReference *drag_row;
+ EmpathyContactListFeatureFlags list_features;
+ EmpathyContactFeatureFlags contact_features;
+} EmpathyContactListViewPriv;
+
+typedef struct {
+ EmpathyContactListView *view;
+ GtkTreePath *path;
+ guint timeout_id;
+} DragMotionData;
+
+typedef struct {
+ EmpathyContactListView *view;
+ EmpathyContact *contact;
+ gboolean remove;
+} ShowActiveData;
+
+enum {
+ PROP_0,
+ PROP_STORE,
+ PROP_LIST_FEATURES,
+ PROP_CONTACT_FEATURES,
+};
+
+enum DndDragType {
+ DND_DRAG_TYPE_CONTACT_ID,
+ DND_DRAG_TYPE_URL,
+ DND_DRAG_TYPE_STRING,
+};
+
+static const GtkTargetEntry drag_types_dest[] = {
+ { "text/contact-id", 0, DND_DRAG_TYPE_CONTACT_ID },
+ { "text/uri-list", 0, DND_DRAG_TYPE_URL },
+ { "text/plain", 0, DND_DRAG_TYPE_STRING },
+ { "STRING", 0, DND_DRAG_TYPE_STRING },
+};
+
+static const GtkTargetEntry drag_types_source[] = {
+ { "text/contact-id", 0, DND_DRAG_TYPE_CONTACT_ID },
+};
+
+static GdkAtom drag_atoms_dest[G_N_ELEMENTS (drag_types_dest)];
+static GdkAtom drag_atoms_source[G_N_ELEMENTS (drag_types_source)];
+
+enum {
+ DRAG_CONTACT_RECEIVED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE (EmpathyContactListView, empathy_contact_list_view, GTK_TYPE_TREE_VIEW);
+
+static void
+contact_list_view_drag_data_received (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *selection,
+ guint info,
+ guint time)
+{
+ EmpathyContactListViewPriv *priv;
+ EmpathyContactList *list;
+ EmpathyContactFactory *factory;
+ McAccount *account;
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeViewDropPosition position;
+ EmpathyContact *contact = NULL;
+ const gchar *id;
+ gchar **strv;
+ gchar *new_group = NULL;
+ gchar *old_group = NULL;
+ gboolean is_row;
+
+ priv = GET_PRIV (widget);
+
+ id = (const gchar*) selection->data;
+ DEBUG ("Received %s%s drag & drop contact from roster with id:'%s'",
+ context->action == GDK_ACTION_MOVE ? "move" : "",
+ context->action == GDK_ACTION_COPY ? "copy" : "",
+ id);
+
+ strv = g_strsplit (id, "/", 2);
+ factory = empathy_contact_factory_new ();
+ account = mc_account_lookup (strv[0]);
+ if (account) {
+ contact = empathy_contact_factory_get_from_id (factory,
+ account,
+ strv[1]);
+ g_object_unref (account);
+ }
+ g_object_unref (factory);
+ g_strfreev (strv);
+
+ if (!contact) {
+ DEBUG ("No contact found associated with drag & drop");
+ return;
+ }
+
+ empathy_contact_run_until_ready (contact,
+ EMPATHY_CONTACT_READY_HANDLE,
+ NULL);
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
+
+ /* Get source group information. */
+ if (priv->drag_row) {
+ path = gtk_tree_row_reference_get_path (priv->drag_row);
+ if (path) {
+ old_group = empathy_contact_list_store_get_parent_group (model, path, NULL);
+ gtk_tree_path_free (path);
+ }
+ }
+
+ /* Get destination group information. */
+ is_row = gtk_tree_view_get_dest_row_at_pos (GTK_TREE_VIEW (widget),
+ x,
+ y,
+ &path,
+ &position);
+
+ if (is_row) {
+ new_group = empathy_contact_list_store_get_parent_group (model, path, NULL);
+ gtk_tree_path_free (path);
+ }
+
+ DEBUG ("contact %s (%d) dragged from '%s' to '%s'",
+ empathy_contact_get_id (contact),
+ empathy_contact_get_handle (contact),
+ old_group, new_group);
+
+ list = empathy_contact_list_store_get_list_iface (priv->store);
+ if (new_group) {
+ empathy_contact_list_add_to_group (list, contact, new_group);
+ }
+ if (old_group && context->action == GDK_ACTION_MOVE) {
+ empathy_contact_list_remove_from_group (list, contact, old_group);
+ }
+
+ g_free (old_group);
+ g_free (new_group);
+
+ gtk_drag_finish (context, TRUE, FALSE, GDK_CURRENT_TIME);
+}
+
+static gboolean
+contact_list_view_drag_motion_cb (DragMotionData *data)
+{
+ gtk_tree_view_expand_row (GTK_TREE_VIEW (data->view),
+ data->path,
+ FALSE);
+
+ data->timeout_id = 0;
+
+ return FALSE;
+}
+
+static gboolean
+contact_list_view_drag_motion (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ guint time)
+{
+ static DragMotionData *dm = NULL;
+ GtkTreePath *path;
+ gboolean is_row;
+ gboolean is_different = FALSE;
+ gboolean cleanup = TRUE;
+
+ is_row = gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget),
+ x,
+ y,
+ &path,
+ NULL,
+ NULL,
+ NULL);
+
+ cleanup &= (!dm);
+
+ if (is_row) {
+ cleanup &= (dm && gtk_tree_path_compare (dm->path, path) != 0);
+ is_different = (!dm || (dm && gtk_tree_path_compare (dm->path, path) != 0));
+ } else {
+ cleanup &= FALSE;
+ }
+
+ if (!is_different && !cleanup) {
+ return TRUE;
+ }
+
+ if (dm) {
+ gtk_tree_path_free (dm->path);
+ if (dm->timeout_id) {
+ g_source_remove (dm->timeout_id);
+ }
+
+ g_free (dm);
+
+ dm = NULL;
+ }
+
+ if (!gtk_tree_view_row_expanded (GTK_TREE_VIEW (widget), path)) {
+ dm = g_new0 (DragMotionData, 1);
+
+ dm->view = EMPATHY_CONTACT_LIST_VIEW (widget);
+ dm->path = gtk_tree_path_copy (path);
+
+ dm->timeout_id = g_timeout_add_seconds (1,
+ (GSourceFunc) contact_list_view_drag_motion_cb,
+ dm);
+ }
+
+ return TRUE;
+}
+
+static void
+contact_list_view_drag_begin (GtkWidget *widget,
+ GdkDragContext *context)
+{
+ EmpathyContactListViewPriv *priv;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+
+ priv = GET_PRIV (widget);
+
+ GTK_WIDGET_CLASS (empathy_contact_list_view_parent_class)->drag_begin (widget,
+ context);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ return;
+ }
+
+ path = gtk_tree_model_get_path (model, &iter);
+ priv->drag_row = gtk_tree_row_reference_new (model, path);
+ gtk_tree_path_free (path);
+}
+
+static void
+contact_list_view_drag_data_get (GtkWidget *widget,
+ GdkDragContext *context,
+ GtkSelectionData *selection,
+ guint info,
+ guint time)
+{
+ EmpathyContactListViewPriv *priv;
+ GtkTreePath *src_path;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ EmpathyContact *contact;
+ McAccount *account;
+ const gchar *contact_id;
+ const gchar *account_id;
+ gchar *str;
+
+ priv = GET_PRIV (widget);
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
+ if (!priv->drag_row) {
+ return;
+ }
+
+ src_path = gtk_tree_row_reference_get_path (priv->drag_row);
+ if (!src_path) {
+ return;
+ }
+
+ if (!gtk_tree_model_get_iter (model, &iter, src_path)) {
+ gtk_tree_path_free (src_path);
+ return;
+ }
+
+ gtk_tree_path_free (src_path);
+
+ contact = empathy_contact_list_view_get_selected (EMPATHY_CONTACT_LIST_VIEW (widget));
+ if (!contact) {
+ return;
+ }
+
+ account = empathy_contact_get_account (contact);
+ account_id = mc_account_get_unique_name (account);
+ contact_id = empathy_contact_get_id (contact);
+ g_object_unref (contact);
+ str = g_strconcat (account_id, "/", contact_id, NULL);
+
+ switch (info) {
+ case DND_DRAG_TYPE_CONTACT_ID:
+ gtk_selection_data_set (selection, drag_atoms_source[info], 8,
+ (guchar*)str, strlen (str) + 1);
+ break;
+ }
+
+ g_free (str);
+}
+
+static void
+contact_list_view_drag_end (GtkWidget *widget,
+ GdkDragContext *context)
+{
+ EmpathyContactListViewPriv *priv;
+
+ priv = GET_PRIV (widget);
+
+ GTK_WIDGET_CLASS (empathy_contact_list_view_parent_class)->drag_end (widget,
+ context);
+
+ if (priv->drag_row) {
+ gtk_tree_row_reference_free (priv->drag_row);
+ priv->drag_row = NULL;
+ }
+}
+
+static gboolean
+contact_list_view_drag_drop (GtkWidget *widget,
+ GdkDragContext *drag_context,
+ gint x,
+ gint y,
+ guint time)
+{
+ return FALSE;
+}
+
+typedef struct {
+ EmpathyContactListView *view;
+ guint button;
+ guint32 time;
+} MenuPopupData;
+
+static gboolean
+contact_list_view_popup_menu_idle_cb (gpointer user_data)
+{
+ MenuPopupData *data = user_data;
+ GtkWidget *menu;
+
+ menu = empathy_contact_list_view_get_contact_menu (data->view);
+ if (!menu) {
+ menu = empathy_contact_list_view_get_group_menu (data->view);
+ }
+
+ if (!menu) {
+ goto OUT;
+ }
+
+ gtk_widget_show (menu);
+
+ gtk_menu_popup (GTK_MENU (menu),
+ NULL, NULL, NULL, NULL,
+ data->button, data->time);
+
+OUT:
+ g_slice_free (MenuPopupData, data);
+
+ return FALSE;
+}
+
+static gboolean
+contact_list_view_button_press_event_cb (EmpathyContactListView *view,
+ GdkEventButton *event,
+ gpointer user_data)
+{
+ if (event->button == 3) {
+ MenuPopupData *data;
+
+ data = g_slice_new (MenuPopupData);
+ data->view = view;
+ data->button = event->button;
+ data->time = event->time;
+ g_idle_add (contact_list_view_popup_menu_idle_cb, data);
+ }
+
+ return FALSE;
+}
+
+static void
+contact_list_view_row_activated_cb (EmpathyContactListView *view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *col,
+ gpointer user_data)
+{
+ EmpathyContactListViewPriv *priv = GET_PRIV (view);
+ EmpathyContact *contact;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ if (!(priv->contact_features & EMPATHY_CONTACT_FEATURE_CHAT)) {
+ return;
+ }
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
+
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get (model, &iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact,
+ -1);
+
+ if (contact) {
+ empathy_chat_with_contact (contact);
+ g_object_unref (contact);
+ }
+}
+
+static void
+contact_list_view_voip_activated_cb (EmpathyCellRendererActivatable *cell,
+ const gchar *path_string,
+ EmpathyContactListView *view)
+{
+ EmpathyContactListViewPriv *priv = GET_PRIV (view);
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ EmpathyContact *contact;
+
+ if (!(priv->contact_features & EMPATHY_CONTACT_FEATURE_CALL)) {
+ return;
+ }
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
+ if (!gtk_tree_model_get_iter_from_string (model, &iter, path_string)) {
+ return;
+ }
+
+ gtk_tree_model_get (model, &iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact,
+ -1);
+
+ if (contact) {
+ empathy_call_with_contact (contact);
+ g_object_unref (contact);
+ }
+}
+
+static void
+contact_list_view_cell_set_background (EmpathyContactListView *view,
+ GtkCellRenderer *cell,
+ gboolean is_group,
+ gboolean is_active)
+{
+ GdkColor color;
+ GtkStyle *style;
+
+ style = gtk_widget_get_style (GTK_WIDGET (view));
+
+ if (!is_group && is_active) {
+ color = style->bg[GTK_STATE_SELECTED];
+
+ /* Here we take the current theme colour and add it to
+ * the colour for white and average the two. This
+ * gives a colour which is inline with the theme but
+ * slightly whiter.
+ */
+ color.red = (color.red + (style->white).red) / 2;
+ color.green = (color.green + (style->white).green) / 2;
+ color.blue = (color.blue + (style->white).blue) / 2;
+
+ g_object_set (cell,
+ "cell-background-gdk", &color,
+ NULL);
+ } else {
+ g_object_set (cell,
+ "cell-background-gdk", NULL,
+ NULL);
+ }
+}
+
+static void
+contact_list_view_pixbuf_cell_data_func (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ EmpathyContactListView *view)
+{
+ gchar *icon_name;
+ gboolean is_group;
+ gboolean is_active;
+
+ gtk_tree_model_get (model, iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE, &is_active,
+ EMPATHY_CONTACT_LIST_STORE_COL_ICON_STATUS, &icon_name,
+ -1);
+
+ g_object_set (cell,
+ "visible", !is_group,
+ "icon-name", icon_name,
+ NULL);
+
+ g_free (icon_name);
+
+ contact_list_view_cell_set_background (view, cell, is_group, is_active);
+}
+
+static void
+contact_list_view_voip_cell_data_func (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ EmpathyContactListView *view)
+{
+ gboolean is_group;
+ gboolean is_active;
+ gboolean can_voip;
+
+ gtk_tree_model_get (model, iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE, &is_active,
+ EMPATHY_CONTACT_LIST_STORE_COL_CAN_VOIP, &can_voip,
+ -1);
+
+ g_object_set (cell,
+ "visible", !is_group && can_voip,
+ "icon-name", EMPATHY_IMAGE_VOIP,
+ NULL);
+
+ contact_list_view_cell_set_background (view, cell, is_group, is_active);
+}
+
+static void
+contact_list_view_avatar_cell_data_func (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ EmpathyContactListView *view)
+{
+ GdkPixbuf *pixbuf;
+ gboolean show_avatar;
+ gboolean is_group;
+ gboolean is_active;
+
+ gtk_tree_model_get (model, iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_PIXBUF_AVATAR, &pixbuf,
+ EMPATHY_CONTACT_LIST_STORE_COL_PIXBUF_AVATAR_VISIBLE, &show_avatar,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE, &is_active,
+ -1);
+
+ g_object_set (cell,
+ "visible", !is_group && show_avatar,
+ "pixbuf", pixbuf,
+ NULL);
+
+ if (pixbuf) {
+ g_object_unref (pixbuf);
+ }
+
+ contact_list_view_cell_set_background (view, cell, is_group, is_active);
+}
+
+static void
+contact_list_view_text_cell_data_func (GtkTreeViewColumn *tree_column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ EmpathyContactListView *view)
+{
+ gboolean is_group;
+ gboolean is_active;
+ gboolean show_status;
+
+ gtk_tree_model_get (model, iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE, &is_active,
+ EMPATHY_CONTACT_LIST_STORE_COL_STATUS_VISIBLE, &show_status,
+ -1);
+
+ g_object_set (cell,
+ "show-status", show_status,
+ NULL);
+
+ contact_list_view_cell_set_background (view, cell, is_group, is_active);
+}
+
+static void
+contact_list_view_expander_cell_data_func (GtkTreeViewColumn *column,
+ GtkCellRenderer *cell,
+ GtkTreeModel *model,
+ GtkTreeIter *iter,
+ EmpathyContactListView *view)
+{
+ gboolean is_group;
+ gboolean is_active;
+
+ gtk_tree_model_get (model, iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE, &is_active,
+ -1);
+
+ if (gtk_tree_model_iter_has_child (model, iter)) {
+ GtkTreePath *path;
+ gboolean row_expanded;
+
+ path = gtk_tree_model_get_path (model, iter);
+ row_expanded = gtk_tree_view_row_expanded (GTK_TREE_VIEW (column->tree_view), path);
+ gtk_tree_path_free (path);
+
+ g_object_set (cell,
+ "visible", TRUE,
+ "expander-style", row_expanded ? GTK_EXPANDER_EXPANDED : GTK_EXPANDER_COLLAPSED,
+ NULL);
+ } else {
+ g_object_set (cell, "visible", FALSE, NULL);
+ }
+
+ contact_list_view_cell_set_background (view, cell, is_group, is_active);
+}
+
+static void
+contact_list_view_row_expand_or_collapse_cb (EmpathyContactListView *view,
+ GtkTreeIter *iter,
+ GtkTreePath *path,
+ gpointer user_data)
+{
+ EmpathyContactListViewPriv *priv = GET_PRIV (view);
+ GtkTreeModel *model;
+ gchar *name;
+ gboolean expanded;
+
+ if (!(priv->list_features & EMPATHY_CONTACT_LIST_FEATURE_GROUPS_SAVE)) {
+ return;
+ }
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
+
+ gtk_tree_model_get (model, iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name,
+ -1);
+
+ expanded = GPOINTER_TO_INT (user_data);
+ empathy_contact_group_set_expanded (name, expanded);
+
+ g_free (name);
+}
+
+static void
+contact_list_view_row_has_child_toggled_cb (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ EmpathyContactListView *view)
+{
+ EmpathyContactListViewPriv *priv = GET_PRIV (view);
+ gboolean is_group = FALSE;
+ gchar *name = NULL;
+
+ gtk_tree_model_get (model, iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name,
+ -1);
+
+ if (!is_group || G_STR_EMPTY (name)) {
+ g_free (name);
+ return;
+ }
+
+ if (!(priv->list_features & EMPATHY_CONTACT_LIST_FEATURE_GROUPS_SAVE) ||
+ empathy_contact_group_get_expanded (name)) {
+ g_signal_handlers_block_by_func (view,
+ contact_list_view_row_expand_or_collapse_cb,
+ GINT_TO_POINTER (TRUE));
+ gtk_tree_view_expand_row (GTK_TREE_VIEW (view), path, TRUE);
+ g_signal_handlers_unblock_by_func (view,
+ contact_list_view_row_expand_or_collapse_cb,
+ GINT_TO_POINTER (TRUE));
+ } else {
+ g_signal_handlers_block_by_func (view,
+ contact_list_view_row_expand_or_collapse_cb,
+ GINT_TO_POINTER (FALSE));
+ gtk_tree_view_collapse_row (GTK_TREE_VIEW (view), path);
+ g_signal_handlers_unblock_by_func (view,
+ contact_list_view_row_expand_or_collapse_cb,
+ GINT_TO_POINTER (FALSE));
+ }
+
+ g_free (name);
+}
+
+static void
+contact_list_view_setup (EmpathyContactListView *view)
+{
+ EmpathyContactListViewPriv *priv;
+ GtkCellRenderer *cell;
+ GtkTreeViewColumn *col;
+ gint i;
+
+ priv = GET_PRIV (view);
+
+ gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (view),
+ empathy_contact_list_store_search_equal_func,
+ NULL, NULL);
+
+ g_signal_connect (priv->store, "row-has-child-toggled",
+ G_CALLBACK (contact_list_view_row_has_child_toggled_cb),
+ view);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (view),
+ GTK_TREE_MODEL (priv->store));
+
+ /* Setup view */
+ g_object_set (view,
+ "headers-visible", FALSE,
+ "reorderable", TRUE,
+ "show-expanders", FALSE,
+ NULL);
+
+ col = gtk_tree_view_column_new ();
+
+ /* State */
+ cell = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (col, cell, FALSE);
+ gtk_tree_view_column_set_cell_data_func (
+ col, cell,
+ (GtkTreeCellDataFunc) contact_list_view_pixbuf_cell_data_func,
+ view, NULL);
+
+ g_object_set (cell,
+ "xpad", 5,
+ "ypad", 1,
+ "visible", FALSE,
+ 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,
+ (GtkTreeCellDataFunc) contact_list_view_text_cell_data_func,
+ view, NULL);
+
+ gtk_tree_view_column_add_attribute (col, cell,
+ "name", EMPATHY_CONTACT_LIST_STORE_COL_NAME);
+ gtk_tree_view_column_add_attribute (col, cell,
+ "status", EMPATHY_CONTACT_LIST_STORE_COL_STATUS);
+ gtk_tree_view_column_add_attribute (col, cell,
+ "is_group", EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP);
+
+ /* Voip Capability Icon */
+ cell = empathy_cell_renderer_activatable_new ();
+ gtk_tree_view_column_pack_start (col, cell, FALSE);
+ gtk_tree_view_column_set_cell_data_func (
+ col, cell,
+ (GtkTreeCellDataFunc) contact_list_view_voip_cell_data_func,
+ view, NULL);
+
+ g_object_set (cell,
+ "visible", FALSE,
+ NULL);
+
+ g_signal_connect (cell, "path-activated",
+ G_CALLBACK (contact_list_view_voip_activated_cb),
+ view);
+
+ /* Avatar */
+ cell = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (col, cell, FALSE);
+ gtk_tree_view_column_set_cell_data_func (
+ col, cell,
+ (GtkTreeCellDataFunc) contact_list_view_avatar_cell_data_func,
+ view, NULL);
+
+ g_object_set (cell,
+ "xpad", 0,
+ "ypad", 0,
+ "visible", FALSE,
+ "width", 32,
+ "height", 32,
+ NULL);
+
+ /* Expander */
+ cell = empathy_cell_renderer_expander_new ();
+ gtk_tree_view_column_pack_end (col, cell, FALSE);
+ gtk_tree_view_column_set_cell_data_func (
+ col, cell,
+ (GtkTreeCellDataFunc) contact_list_view_expander_cell_data_func,
+ view, NULL);
+
+ /* Actually add the column now we have added all cell renderers */
+ gtk_tree_view_append_column (GTK_TREE_VIEW (view), col);
+
+ /* Drag & Drop. */
+ for (i = 0; i < G_N_ELEMENTS (drag_types_dest); ++i) {
+ drag_atoms_dest[i] = gdk_atom_intern (drag_types_dest[i].target,
+ FALSE);
+ }
+
+ for (i = 0; i < G_N_ELEMENTS (drag_types_source); ++i) {
+ drag_atoms_source[i] = gdk_atom_intern (drag_types_source[i].target,
+ FALSE);
+ }
+}
+
+static void
+contact_list_view_set_list_features (EmpathyContactListView *view,
+ EmpathyContactListFeatureFlags features)
+{
+ EmpathyContactListViewPriv *priv = GET_PRIV (view);
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_LIST_VIEW (view));
+
+ priv->list_features = features;
+
+ /* Update DnD source/dest */
+ if (features & EMPATHY_CONTACT_LIST_FEATURE_CONTACT_DRAG) {
+ gtk_drag_source_set (GTK_WIDGET (view),
+ GDK_BUTTON1_MASK,
+ drag_types_source,
+ G_N_ELEMENTS (drag_types_source),
+ GDK_ACTION_MOVE | GDK_ACTION_COPY);
+ } else {
+ gtk_drag_source_unset (GTK_WIDGET (view));
+
+ }
+
+ if (features & EMPATHY_CONTACT_LIST_FEATURE_CONTACT_DROP) {
+ gtk_drag_dest_set (GTK_WIDGET (view),
+ GTK_DEST_DEFAULT_ALL,
+ drag_types_dest,
+ G_N_ELEMENTS (drag_types_dest),
+ GDK_ACTION_MOVE | GDK_ACTION_COPY);
+ } else {
+ /* FIXME: URI could still be droped depending on FT feature */
+ gtk_drag_dest_unset (GTK_WIDGET (view));
+ }
+}
+
+static void
+contact_list_view_finalize (GObject *object)
+{
+ EmpathyContactListViewPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ if (priv->store) {
+ g_object_unref (priv->store);
+ }
+
+ G_OBJECT_CLASS (empathy_contact_list_view_parent_class)->finalize (object);
+}
+
+static void
+contact_list_view_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyContactListViewPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_STORE:
+ g_value_set_object (value, priv->store);
+ break;
+ case PROP_LIST_FEATURES:
+ g_value_set_flags (value, priv->list_features);
+ break;
+ case PROP_CONTACT_FEATURES:
+ g_value_set_flags (value, priv->contact_features);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+contact_list_view_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyContactListView *view = EMPATHY_CONTACT_LIST_VIEW (object);
+ EmpathyContactListViewPriv *priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_STORE:
+ priv->store = g_value_dup_object (value);
+ contact_list_view_setup (view);
+ break;
+ case PROP_LIST_FEATURES:
+ contact_list_view_set_list_features (view, g_value_get_flags (value));
+ break;
+ case PROP_CONTACT_FEATURES:
+ priv->contact_features = g_value_get_flags (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+empathy_contact_list_view_class_init (EmpathyContactListViewClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ object_class->finalize = contact_list_view_finalize;
+ object_class->get_property = contact_list_view_get_property;
+ object_class->set_property = contact_list_view_set_property;
+
+ widget_class->drag_data_received = contact_list_view_drag_data_received;
+ widget_class->drag_drop = contact_list_view_drag_drop;
+ widget_class->drag_begin = contact_list_view_drag_begin;
+ widget_class->drag_data_get = contact_list_view_drag_data_get;
+ widget_class->drag_end = contact_list_view_drag_end;
+ /* FIXME: noticed but when you drag the row over the treeview
+ * fast, it seems to stop redrawing itself, if we don't
+ * connect this signal, all is fine.
+ */
+ widget_class->drag_motion = contact_list_view_drag_motion;
+
+ signals[DRAG_CONTACT_RECEIVED] =
+ g_signal_new ("drag-contact-received",
+ G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _empathy_gtk_marshal_VOID__OBJECT_STRING_STRING,
+ G_TYPE_NONE,
+ 3, EMPATHY_TYPE_CONTACT, G_TYPE_STRING, G_TYPE_STRING);
+
+ g_object_class_install_property (object_class,
+ PROP_STORE,
+ g_param_spec_object ("store",
+ "The store of the view",
+ "The store of the view",
+ EMPATHY_TYPE_CONTACT_LIST_STORE,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_LIST_FEATURES,
+ g_param_spec_flags ("list-features",
+ "Features of the view",
+ "Falgs for all enabled features",
+ EMPATHY_TYPE_CONTACT_LIST_FEATURE_FLAGS,
+ EMPATHY_CONTACT_LIST_FEATURE_NONE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_CONTACT_FEATURES,
+ g_param_spec_flags ("contact-features",
+ "Features of the contact menu",
+ "Falgs for all enabled features for the menu",
+ EMPATHY_TYPE_CONTACT_FEATURE_FLAGS,
+ EMPATHY_CONTACT_FEATURE_NONE,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof (EmpathyContactListViewPriv));
+}
+
+static void
+empathy_contact_list_view_init (EmpathyContactListView *view)
+{
+ EmpathyContactListViewPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (view,
+ EMPATHY_TYPE_CONTACT_LIST_VIEW, EmpathyContactListViewPriv);
+
+ view->priv = priv;
+ /* Get saved group states. */
+ empathy_contact_groups_get_all ();
+
+ gtk_tree_view_set_row_separator_func (GTK_TREE_VIEW (view),
+ empathy_contact_list_store_row_separator_func,
+ NULL, NULL);
+
+ /* Connect to tree view signals rather than override. */
+ g_signal_connect (view,
+ "button-press-event",
+ G_CALLBACK (contact_list_view_button_press_event_cb),
+ NULL);
+ g_signal_connect (view,
+ "row-activated",
+ G_CALLBACK (contact_list_view_row_activated_cb),
+ NULL);
+ g_signal_connect (view,
+ "row-expanded",
+ G_CALLBACK (contact_list_view_row_expand_or_collapse_cb),
+ GINT_TO_POINTER (TRUE));
+ g_signal_connect (view,
+ "row-collapsed",
+ G_CALLBACK (contact_list_view_row_expand_or_collapse_cb),
+ GINT_TO_POINTER (FALSE));
+}
+
+EmpathyContactListView *
+empathy_contact_list_view_new (EmpathyContactListStore *store,
+ EmpathyContactListFeatureFlags list_features,
+ EmpathyContactFeatureFlags contact_features)
+{
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_STORE (store), NULL);
+
+ return g_object_new (EMPATHY_TYPE_CONTACT_LIST_VIEW,
+ "store", store,
+ "contact-features", contact_features,
+ "list-features", list_features,
+ NULL);
+}
+
+EmpathyContact *
+empathy_contact_list_view_get_selected (EmpathyContactListView *view)
+{
+ EmpathyContactListViewPriv *priv;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ EmpathyContact *contact;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_VIEW (view), NULL);
+
+ priv = GET_PRIV (view);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ return NULL;
+ }
+
+ gtk_tree_model_get (model, &iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact,
+ -1);
+
+ return contact;
+}
+
+gchar *
+empathy_contact_list_view_get_selected_group (EmpathyContactListView *view)
+{
+ EmpathyContactListViewPriv *priv;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ gboolean is_group;
+ gchar *name;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_VIEW (view), NULL);
+
+ priv = GET_PRIV (view);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ return NULL;
+ }
+
+ gtk_tree_model_get (model, &iter,
+ EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP, &is_group,
+ EMPATHY_CONTACT_LIST_STORE_COL_NAME, &name,
+ -1);
+
+ if (!is_group) {
+ g_free (name);
+ return NULL;
+ }
+
+ return name;
+}
+
+static gboolean
+contact_list_view_remove_dialog_show (GtkWindow *parent,
+ const gchar *window_title,
+ const gchar *text)
+{
+ GtkWidget *dialog, *label, *image, *hbox;
+ gboolean res;
+
+ dialog = gtk_dialog_new_with_buttons (window_title, parent,
+ GTK_DIALOG_MODAL,
+ GTK_STOCK_DELETE, GTK_RESPONSE_YES,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
+ NULL);
+ gtk_dialog_set_has_separator (GTK_DIALOG(dialog), FALSE);
+
+ label = gtk_label_new (text);
+ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
+
+ hbox = gtk_hbox_new (FALSE, 5);
+ gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
+ gtk_box_pack_start_defaults (GTK_BOX (hbox), image);
+ gtk_box_pack_start_defaults (GTK_BOX (hbox), label);
+ gtk_box_pack_start_defaults (GTK_BOX(GTK_DIALOG(dialog)->vbox), hbox);
+
+ gtk_widget_show (image);
+ gtk_widget_show (label);
+ gtk_widget_show (hbox);
+ gtk_widget_show (dialog);
+
+ res = gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+
+ return (res == GTK_RESPONSE_YES);
+}
+
+static void
+contact_list_view_group_remove_activate_cb (GtkMenuItem *menuitem,
+ EmpathyContactListView *view)
+{
+ EmpathyContactListViewPriv *priv = GET_PRIV (view);
+ gchar *group;
+
+ group = empathy_contact_list_view_get_selected_group (view);
+ if (group) {
+ gchar *text;
+ GtkWindow *parent;
+
+ text = g_strdup_printf (_("Do you really want to remove the group '%s'?"), group);
+ parent = empathy_get_toplevel_window (GTK_WIDGET (view));
+ if (contact_list_view_remove_dialog_show (parent, _("Removing group"), text)) {
+ EmpathyContactList *list;
+
+ list = empathy_contact_list_store_get_list_iface (priv->store);
+ empathy_contact_list_remove_group (list, group);
+ }
+
+ g_free (text);
+ }
+
+ g_free (group);
+}
+
+GtkWidget *
+empathy_contact_list_view_get_group_menu (EmpathyContactListView *view)
+{
+ EmpathyContactListViewPriv *priv = GET_PRIV (view);
+ gchar *group;
+ GtkWidget *menu;
+ GtkWidget *item;
+ GtkWidget *image;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_VIEW (view), NULL);
+
+ if (!(priv->list_features & (EMPATHY_CONTACT_LIST_FEATURE_GROUPS_RENAME |
+ EMPATHY_CONTACT_LIST_FEATURE_GROUPS_REMOVE))) {
+ return NULL;
+ }
+
+ group = empathy_contact_list_view_get_selected_group (view);
+ if (!group) {
+ return NULL;
+ }
+
+ menu = gtk_menu_new ();
+
+ /* FIXME: Not implemented yet
+ if (priv->features & EMPATHY_CONTACT_LIST_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 (contact_list_view_group_rename_activate_cb),
+ view);
+ }*/
+
+ if (priv->list_features & EMPATHY_CONTACT_LIST_FEATURE_GROUPS_REMOVE) {
+ item = gtk_image_menu_item_new_with_mnemonic (_("_Remove"));
+ image = gtk_image_new_from_icon_name (GTK_STOCK_REMOVE,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+ g_signal_connect (item, "activate",
+ G_CALLBACK (contact_list_view_group_remove_activate_cb),
+ view);
+ }
+
+ g_free (group);
+
+ return menu;
+}
+
+static void
+contact_list_view_remove_activate_cb (GtkMenuItem *menuitem,
+ EmpathyContactListView *view)
+{
+ EmpathyContactListViewPriv *priv = GET_PRIV (view);
+ EmpathyContact *contact;
+
+ contact = empathy_contact_list_view_get_selected (view);
+
+ if (contact) {
+ gchar *text;
+ GtkWindow *parent;
+
+ parent = empathy_get_toplevel_window (GTK_WIDGET (view));
+ text = g_strdup_printf (_("Do you really want to remove the contact '%s'?"),
+ empathy_contact_get_name (contact));
+ if (contact_list_view_remove_dialog_show (parent, _("Removing contact"), text)) {
+ EmpathyContactList *list;
+
+ list = empathy_contact_list_store_get_list_iface (priv->store);
+ empathy_contact_list_remove (list, contact,
+ _("Sorry, I don't want you in my contact list anymore."));
+ }
+
+ g_free (text);
+ g_object_unref (contact);
+ }
+}
+
+GtkWidget *
+empathy_contact_list_view_get_contact_menu (EmpathyContactListView *view)
+{
+ EmpathyContactListViewPriv *priv = GET_PRIV (view);
+ EmpathyContact *contact;
+ GtkWidget *menu;
+ GtkWidget *item;
+ GtkWidget *image;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST_VIEW (view), NULL);
+
+ contact = empathy_contact_list_view_get_selected (view);
+ if (!contact) {
+ return NULL;
+ }
+
+ menu = empathy_contact_menu_new (contact, priv->contact_features);
+
+ if (!menu &&
+ !(priv->list_features & EMPATHY_CONTACT_LIST_FEATURE_CONTACT_REMOVE)) {
+ g_object_unref (contact);
+ return NULL;
+ }
+
+ if (menu) {
+ /* Separator */
+ item = gtk_separator_menu_item_new ();
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+ } else {
+ menu = gtk_menu_new ();
+ }
+
+ /* Remove contact */
+ if (priv->list_features & EMPATHY_CONTACT_LIST_FEATURE_CONTACT_REMOVE) {
+ item = gtk_image_menu_item_new_with_mnemonic (_("_Remove"));
+ image = gtk_image_new_from_icon_name (GTK_STOCK_REMOVE,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+ g_signal_connect (item, "activate",
+ G_CALLBACK (contact_list_view_remove_activate_cb),
+ view);
+ }
+
+ g_object_unref (contact);
+
+ return menu;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-contact-list-view.h b/trunk/libempathy-gtk/empathy-contact-list-view.h
new file mode 100644
index 000000000..39dc5966b
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-list-view.h
@@ -0,0 +1,80 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_CONTACT_LIST_VIEW_H__
+#define __EMPATHY_CONTACT_LIST_VIEW_H__
+
+#include <gtk/gtktreeview.h>
+
+#include <libempathy/empathy-contact.h>
+
+#include "empathy-contact-list-store.h"
+#include "empathy-contact-menu.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CONTACT_LIST_VIEW (empathy_contact_list_view_get_type ())
+#define EMPATHY_CONTACT_LIST_VIEW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CONTACT_LIST_VIEW, EmpathyContactListView))
+#define EMPATHY_CONTACT_LIST_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_CONTACT_LIST_VIEW, EmpathyContactListViewClass))
+#define EMPATHY_IS_CONTACT_LIST_VIEW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CONTACT_LIST_VIEW))
+#define EMPATHY_IS_CONTACT_LIST_VIEW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CONTACT_LIST_VIEW))
+#define EMPATHY_CONTACT_LIST_VIEW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CONTACT_LIST_VIEW, EmpathyContactListViewClass))
+
+typedef struct _EmpathyContactListView EmpathyContactListView;
+typedef struct _EmpathyContactListViewClass EmpathyContactListViewClass;
+
+typedef enum {
+ EMPATHY_CONTACT_LIST_FEATURE_NONE = 0,
+ EMPATHY_CONTACT_LIST_FEATURE_GROUPS_SAVE = 1 << 0,
+ EMPATHY_CONTACT_LIST_FEATURE_GROUPS_RENAME = 1 << 1,
+ EMPATHY_CONTACT_LIST_FEATURE_GROUPS_REMOVE = 1 << 2,
+ EMPATHY_CONTACT_LIST_FEATURE_CONTACT_REMOVE = 1 << 3,
+ EMPATHY_CONTACT_LIST_FEATURE_CONTACT_DROP = 1 << 4,
+ EMPATHY_CONTACT_LIST_FEATURE_CONTACT_DRAG = 1 << 5,
+ EMPATHY_CONTACT_LIST_FEATURE_ALL = (1 << 6) - 1,
+} EmpathyContactListFeatureFlags;
+
+struct _EmpathyContactListView {
+ GtkTreeView parent;
+ gpointer priv;
+};
+
+struct _EmpathyContactListViewClass {
+ GtkTreeViewClass parent_class;
+};
+
+GType empathy_contact_list_view_get_type (void) G_GNUC_CONST;
+EmpathyContactListView * empathy_contact_list_view_new (EmpathyContactListStore *store,
+ EmpathyContactListFeatureFlags list_features,
+ EmpathyContactFeatureFlags contact_features);
+EmpathyContact * empathy_contact_list_view_get_selected (EmpathyContactListView *view);
+gchar * empathy_contact_list_view_get_selected_group (EmpathyContactListView *view);
+GtkWidget * empathy_contact_list_view_get_contact_menu (EmpathyContactListView *view);
+GtkWidget * empathy_contact_list_view_get_group_menu (EmpathyContactListView *view);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CONTACT_LIST_VIEW_H__ */
+
diff --git a/trunk/libempathy-gtk/empathy-contact-menu.c b/trunk/libempathy-gtk/empathy-contact-menu.c
new file mode 100644
index 000000000..275729f98
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-menu.c
@@ -0,0 +1,235 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * 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: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-log-manager.h>
+
+#include "empathy-contact-menu.h"
+#include "empathy-images.h"
+#include "empathy-log-window.h"
+#include "empathy-contact-dialogs.h"
+
+GtkWidget *
+empathy_contact_menu_new (EmpathyContact *contact,
+ EmpathyContactFeatureFlags features)
+{
+ GtkWidget *menu;
+ GtkMenuShell *shell;
+ GtkWidget *item;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ if (features == EMPATHY_CONTACT_FEATURE_NONE) {
+ return NULL;
+ }
+
+ menu = gtk_menu_new ();
+ shell = GTK_MENU_SHELL (menu);
+
+ /* Chat */
+ if (features & EMPATHY_CONTACT_FEATURE_CHAT) {
+ item = empathy_contact_chat_menu_item_new (contact);
+ gtk_menu_shell_append (shell, item);
+ gtk_widget_show (item);
+ }
+
+ /* Call */
+ if (features & EMPATHY_CONTACT_FEATURE_CALL) {
+ item = empathy_contact_call_menu_item_new (contact);
+ gtk_menu_shell_append (shell, item);
+ gtk_widget_show (item);
+ }
+
+ /* Log */
+ if (features & EMPATHY_CONTACT_FEATURE_LOG) {
+ item = empathy_contact_log_menu_item_new (contact);
+ gtk_menu_shell_append (shell, item);
+ gtk_widget_show (item);
+ }
+
+ /* Separator */
+ if (features & (EMPATHY_CONTACT_FEATURE_EDIT |
+ EMPATHY_CONTACT_FEATURE_INFO)) {
+ item = gtk_separator_menu_item_new ();
+ gtk_menu_shell_append (shell, item);
+ gtk_widget_show (item);
+ }
+
+ /* Edit */
+ if (features & EMPATHY_CONTACT_FEATURE_EDIT) {
+ item = empathy_contact_edit_menu_item_new (contact);
+ gtk_menu_shell_append (shell, item);
+ gtk_widget_show (item);
+ }
+
+ /* Info */
+ if (features & EMPATHY_CONTACT_FEATURE_INFO) {
+ item = empathy_contact_info_menu_item_new (contact);
+ gtk_menu_shell_append (shell, item);
+ gtk_widget_show (item);
+ }
+
+ return menu;
+}
+
+GtkWidget *
+empathy_contact_chat_menu_item_new (EmpathyContact *contact)
+{
+ GtkWidget *item;
+ GtkWidget *image;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ item = gtk_image_menu_item_new_with_mnemonic (_("_Chat"));
+ image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_MESSAGE,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ gtk_widget_show (image);
+
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (empathy_chat_with_contact),
+ contact);
+
+ return item;
+}
+
+GtkWidget *
+empathy_contact_call_menu_item_new (EmpathyContact *contact)
+{
+ GtkWidget *item;
+ GtkWidget *image;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ item = gtk_image_menu_item_new_with_mnemonic (_("_Call"));
+ image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_VOIP,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ gtk_widget_set_sensitive (item, empathy_contact_can_voip (contact));
+ gtk_widget_show (image);
+
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (empathy_call_with_contact),
+ contact);
+
+ return item;
+}
+
+static void
+contact_log_menu_item_activate_cb (EmpathyContact *contact)
+{
+ empathy_log_window_show (empathy_contact_get_account (contact),
+ empathy_contact_get_id (contact),
+ FALSE, NULL);
+}
+
+GtkWidget *
+empathy_contact_log_menu_item_new (EmpathyContact *contact)
+{
+ EmpathyLogManager *manager;
+ gboolean have_log;
+ GtkWidget *item;
+ GtkWidget *image;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ manager = empathy_log_manager_new ();
+ have_log = empathy_log_manager_exists (manager,
+ empathy_contact_get_account (contact),
+ empathy_contact_get_id (contact),
+ FALSE);
+ g_object_unref (manager);
+
+ item = gtk_image_menu_item_new_with_mnemonic (_("_View Previous Conversations"));
+ image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_LOG,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ gtk_widget_set_sensitive (item, have_log);
+ gtk_widget_show (image);
+
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (contact_log_menu_item_activate_cb),
+ contact);
+
+ return item;
+}
+
+static void
+contact_info_menu_item_activate_cb (EmpathyContact *contact)
+{
+ empathy_contact_information_dialog_show (contact, NULL, FALSE, FALSE);
+}
+
+GtkWidget *
+empathy_contact_info_menu_item_new (EmpathyContact *contact)
+{
+ GtkWidget *item;
+ GtkWidget *image;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ item = gtk_image_menu_item_new_with_mnemonic (_("Infor_mation"));
+ image = gtk_image_new_from_icon_name (EMPATHY_IMAGE_CONTACT_INFORMATION,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ gtk_widget_show (image);
+
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (contact_info_menu_item_activate_cb),
+ contact);
+
+ return item;
+}
+
+static void
+contact_edit_menu_item_activate_cb (EmpathyContact *contact)
+{
+ empathy_contact_information_dialog_show (contact, NULL, TRUE, FALSE);
+}
+
+GtkWidget *
+empathy_contact_edit_menu_item_new (EmpathyContact *contact)
+{
+ GtkWidget *item;
+ GtkWidget *image;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ item = gtk_image_menu_item_new_with_mnemonic (_("_Edit"));
+ image = gtk_image_new_from_icon_name (GTK_STOCK_EDIT,
+ GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ gtk_widget_show (image);
+
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (contact_edit_menu_item_activate_cb),
+ contact);
+
+ return item;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-contact-menu.h b/trunk/libempathy-gtk/empathy-contact-menu.h
new file mode 100644
index 000000000..dd8d16147
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-menu.h
@@ -0,0 +1,52 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * 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: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_CONTACT_MENU_H__
+#define __EMPATHY_CONTACT_MENU_H__
+
+#include <gtk/gtkmenu.h>
+
+#include <libempathy/empathy-contact.h>
+
+G_BEGIN_DECLS
+
+typedef enum {
+ EMPATHY_CONTACT_FEATURE_NONE = 0,
+ EMPATHY_CONTACT_FEATURE_CHAT = 1 << 0,
+ EMPATHY_CONTACT_FEATURE_CALL = 1 << 1,
+ EMPATHY_CONTACT_FEATURE_LOG = 1 << 2,
+ EMPATHY_CONTACT_FEATURE_EDIT = 1 << 3,
+ EMPATHY_CONTACT_FEATURE_INFO = 1 << 4,
+ EMPATHY_CONTACT_FEATURE_ALL = (1 << 5) - 1,
+} EmpathyContactFeatureFlags;
+
+GtkWidget * empathy_contact_menu_new (EmpathyContact *contact,
+ EmpathyContactFeatureFlags features);
+GtkWidget * empathy_contact_chat_menu_item_new (EmpathyContact *contact);
+GtkWidget * empathy_contact_call_menu_item_new (EmpathyContact *contact);
+GtkWidget * empathy_contact_log_menu_item_new (EmpathyContact *contact);
+GtkWidget * empathy_contact_info_menu_item_new (EmpathyContact *contact);
+GtkWidget * empathy_contact_edit_menu_item_new (EmpathyContact *contact);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CONTACT_MENU_H__ */
+
diff --git a/trunk/libempathy-gtk/empathy-contact-widget.c b/trunk/libempathy-gtk/empathy-contact-widget.c
new file mode 100644
index 000000000..b80cef2e9
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-widget.c
@@ -0,0 +1,952 @@
+/* -*- 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 <stdlib.h>
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include <glib/gi18n.h>
+
+#include <libmissioncontrol/mc-account.h>
+
+#include <libempathy/empathy-contact-factory.h>
+#include <libempathy/empathy-contact-manager.h>
+#include <libempathy/empathy-contact-list.h>
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-contact-widget.h"
+#include "empathy-account-chooser.h"
+#include "empathy-avatar-chooser.h"
+#include "empathy-avatar-image.h"
+#include "empathy-ui-utils.h"
+
+/* Delay before updating the widget when the id entry changed (seconds) */
+#define ID_CHANGED_TIMEOUT 1
+
+typedef struct {
+ EmpathyContactFactory *factory;
+ EmpathyContactManager *manager;
+ EmpathyContact *contact;
+ EmpathyContactWidgetFlags flags;
+ GtkCellRenderer *renderer;
+ guint widget_id_timeout;
+
+ GtkWidget *vbox_contact_widget;
+
+ /* Contact */
+ GtkWidget *vbox_contact;
+ GtkWidget *widget_avatar;
+ GtkWidget *widget_account;
+ GtkWidget *widget_id;
+ GtkWidget *widget_alias;
+ GtkWidget *label_alias;
+ GtkWidget *entry_alias;
+ GtkWidget *hbox_presence;
+ GtkWidget *image_state;
+ GtkWidget *label_status;
+ GtkWidget *table_contact;
+ GtkWidget *vbox_avatar;
+
+ /* Groups */
+ GtkWidget *vbox_groups;
+ GtkWidget *entry_group;
+ GtkWidget *button_group;
+ GtkWidget *treeview_groups;
+
+ /* Details */
+ GtkWidget *vbox_details;
+ GtkWidget *table_details;
+ GtkWidget *hbox_details_requested;
+
+ /* Client */
+ GtkWidget *vbox_client;
+ GtkWidget *table_client;
+ GtkWidget *hbow_client_requested;
+} EmpathyContactWidget;
+
+typedef struct {
+ EmpathyContactWidget *information;
+ const gchar *name;
+ gboolean found;
+ GtkTreeIter found_iter;
+} FindName;
+
+static void contact_widget_destroy_cb (GtkWidget *widget,
+ EmpathyContactWidget *information);
+static void contact_widget_remove_contact (EmpathyContactWidget *information);
+static void contact_widget_set_contact (EmpathyContactWidget *information,
+ EmpathyContact *contact);
+static void contact_widget_contact_setup (EmpathyContactWidget *information);
+static void contact_widget_contact_update (EmpathyContactWidget *information);
+static void contact_widget_change_contact (EmpathyContactWidget *information);
+static void contact_widget_avatar_changed_cb (EmpathyAvatarChooser *chooser,
+ EmpathyContactWidget *information);
+static void contact_widget_account_changed_cb (GtkComboBox *widget,
+ EmpathyContactWidget *information);
+static gboolean contact_widget_id_focus_out_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ EmpathyContactWidget *information);
+static gboolean contact_widget_entry_alias_focus_event_cb (GtkEditable *editable,
+ GdkEventFocus *event,
+ EmpathyContactWidget *information);
+static void contact_widget_name_notify_cb (EmpathyContactWidget *information);
+static void contact_widget_presence_notify_cb (EmpathyContactWidget *information);
+static void contact_widget_avatar_notify_cb (EmpathyContactWidget *information);
+static void contact_widget_groups_setup (EmpathyContactWidget *information);
+static void contact_widget_groups_update (EmpathyContactWidget *information);
+static void contact_widget_model_setup (EmpathyContactWidget *information);
+static void contact_widget_model_populate_columns (EmpathyContactWidget *information);
+static void contact_widget_groups_populate_data (EmpathyContactWidget *information);
+static void contact_widget_groups_notify_cb (EmpathyContactWidget *information);
+static gboolean contact_widget_model_find_name (EmpathyContactWidget *information,
+ const gchar *name,
+ GtkTreeIter *iter);
+static gboolean contact_widget_model_find_name_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ FindName *data);
+static void contact_widget_cell_toggled (GtkCellRendererToggle *cell,
+ gchar *path_string,
+ EmpathyContactWidget *information);
+static void contact_widget_entry_group_changed_cb (GtkEditable *editable,
+ EmpathyContactWidget *information);
+static void contact_widget_entry_group_activate_cb (GtkEntry *entry,
+ EmpathyContactWidget *information);
+static void contact_widget_button_group_clicked_cb (GtkButton *button,
+ EmpathyContactWidget *information);
+static void contact_widget_details_setup (EmpathyContactWidget *information);
+static void contact_widget_details_update (EmpathyContactWidget *information);
+static void contact_widget_client_setup (EmpathyContactWidget *information);
+static void contact_widget_client_update (EmpathyContactWidget *information);
+
+enum {
+ COL_NAME,
+ COL_ENABLED,
+ COL_EDITABLE,
+ COL_COUNT
+};
+
+GtkWidget *
+empathy_contact_widget_new (EmpathyContact *contact,
+ EmpathyContactWidgetFlags flags)
+{
+ EmpathyContactWidget *information;
+ GladeXML *glade;
+ gchar *filename;
+
+ information = g_slice_new0 (EmpathyContactWidget);
+ information->flags = flags;
+ information->factory = empathy_contact_factory_new ();
+
+ filename = empathy_file_lookup ("empathy-contact-widget.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "vbox_contact_widget",
+ NULL,
+ "vbox_contact_widget", &information->vbox_contact_widget,
+ "vbox_contact", &information->vbox_contact,
+ "hbox_presence", &information->hbox_presence,
+ "label_alias", &information->label_alias,
+ "image_state", &information->image_state,
+ "label_status", &information->label_status,
+ "table_contact", &information->table_contact,
+ "vbox_avatar", &information->vbox_avatar,
+ "vbox_groups", &information->vbox_groups,
+ "entry_group", &information->entry_group,
+ "button_group", &information->button_group,
+ "treeview_groups", &information->treeview_groups,
+ "vbox_details", &information->vbox_details,
+ "table_details", &information->table_details,
+ "hbox_details_requested", &information->hbox_details_requested,
+ "vbox_client", &information->vbox_client,
+ "table_client", &information->table_client,
+ "hbox_client_requested", &information->hbow_client_requested,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ information,
+ "vbox_contact_widget", "destroy", contact_widget_destroy_cb,
+ "entry_group", "changed", contact_widget_entry_group_changed_cb,
+ "entry_group", "activate", contact_widget_entry_group_activate_cb,
+ "button_group", "clicked", contact_widget_button_group_clicked_cb,
+ NULL);
+
+ g_object_unref (glade);
+
+ g_object_set_data (G_OBJECT (information->vbox_contact_widget),
+ "EmpathyContactWidget",
+ information);
+
+ /* Create widgets */
+ contact_widget_contact_setup (information);
+ contact_widget_groups_setup (information);
+ contact_widget_details_setup (information);
+ contact_widget_client_setup (information);
+
+ contact_widget_set_contact (information, contact);
+
+ gtk_widget_show (information->vbox_contact_widget);
+
+ return information->vbox_contact_widget;
+}
+
+EmpathyContact *
+empathy_contact_widget_get_contact (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;
+ }
+
+ return information->contact;
+}
+
+void
+empathy_contact_widget_set_contact (GtkWidget *widget,
+ EmpathyContact *contact)
+{
+ EmpathyContactWidget *information;
+
+ 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);
+}
+
+void
+empathy_contact_widget_set_account_filter (GtkWidget *widget,
+ EmpathyAccountChooserFilterFunc filter,
+ gpointer user_data)
+{
+ EmpathyContactWidget *information;
+ 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);
+ if (chooser) {
+ empathy_account_chooser_set_filter (chooser, filter, user_data);
+ }
+}
+
+static void
+contact_widget_destroy_cb (GtkWidget *widget,
+ EmpathyContactWidget *information)
+{
+ contact_widget_remove_contact (information);
+
+ if (information->widget_id_timeout != 0) {
+ g_source_remove (information->widget_id_timeout);
+ }
+ if (information->factory) {
+ g_object_unref (information->factory);
+ }
+ if (information->manager) {
+ g_object_unref (information->manager);
+ }
+
+ g_slice_free (EmpathyContactWidget, information);
+}
+
+static void
+contact_widget_remove_contact (EmpathyContactWidget *information)
+{
+ if (information->contact) {
+ 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 (information->contact,
+ contact_widget_groups_notify_cb,
+ information);
+
+ g_object_unref (information->contact);
+ information->contact = NULL;
+ }
+}
+
+static void
+contact_widget_set_contact (EmpathyContactWidget *information,
+ EmpathyContact *contact)
+{
+ if (contact == information->contact) {
+ return;
+ }
+
+ contact_widget_remove_contact (information);
+ if (contact) {
+ information->contact = g_object_ref (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);
+}
+
+static gboolean
+contact_widget_id_activate_timeout (EmpathyContactWidget *self)
+{
+ contact_widget_change_contact (self);
+ return FALSE;
+}
+
+static void
+contact_widget_id_changed_cb (GtkEntry *entry,
+ EmpathyContactWidget *self)
+{
+ if (self->widget_id_timeout != 0) {
+ g_source_remove (self->widget_id_timeout);
+ }
+
+ self->widget_id_timeout =
+ g_timeout_add_seconds (ID_CHANGED_TIMEOUT,
+ (GSourceFunc) contact_widget_id_activate_timeout,
+ self);
+}
+
+static void
+contact_widget_contact_setup (EmpathyContactWidget *information)
+{
+ if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_AVATAR) {
+ information->widget_avatar = empathy_avatar_chooser_new ();
+ g_signal_connect (information->widget_avatar, "changed",
+ G_CALLBACK (contact_widget_avatar_changed_cb),
+ information);
+ } else {
+ information->widget_avatar = empathy_avatar_image_new ();
+ }
+ gtk_box_pack_start (GTK_BOX (information->vbox_avatar),
+ information->widget_avatar,
+ FALSE, FALSE,
+ 6);
+ gtk_widget_show (information->widget_avatar);
+
+ /* Setup account label/chooser */
+ if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT) {
+ information->widget_account = empathy_account_chooser_new ();
+
+ g_signal_connect (information->widget_account, "changed",
+ G_CALLBACK (contact_widget_account_changed_cb),
+ information);
+ } else {
+ information->widget_account = gtk_label_new (NULL);
+ gtk_label_set_selectable (GTK_LABEL (information->widget_account), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (information->widget_account), 0, 0.5);
+ }
+ gtk_table_attach_defaults (GTK_TABLE (information->table_contact),
+ information->widget_account,
+ 1, 2, 0, 1);
+ gtk_widget_show (information->widget_account);
+
+ /* Setup id label/entry */
+ if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID) {
+ information->widget_id = gtk_entry_new ();
+ g_signal_connect (information->widget_id, "focus-out-event",
+ G_CALLBACK (contact_widget_id_focus_out_cb),
+ information);
+ g_signal_connect (information->widget_id, "changed",
+ G_CALLBACK (contact_widget_id_changed_cb),
+ information);
+ } else {
+ information->widget_id = gtk_label_new (NULL);
+ gtk_label_set_selectable (GTK_LABEL (information->widget_id), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (information->widget_id), 0, 0.5);
+ }
+ gtk_table_attach_defaults (GTK_TABLE (information->table_contact),
+ information->widget_id,
+ 1, 2, 1, 2);
+ gtk_widget_show (information->widget_id);
+
+ /* Setup alias label/entry */
+ if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ALIAS) {
+ information->widget_alias = gtk_entry_new ();
+ g_signal_connect (information->widget_alias, "focus-out-event",
+ G_CALLBACK (contact_widget_entry_alias_focus_event_cb),
+ information);
+ } else {
+ information->widget_alias = gtk_label_new (NULL);
+ gtk_label_set_selectable (GTK_LABEL (information->widget_alias), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (information->widget_alias), 0, 0.5);
+ }
+ gtk_table_attach_defaults (GTK_TABLE (information->table_contact),
+ information->widget_alias,
+ 1, 2, 2, 3);
+ gtk_widget_show (information->widget_alias);
+}
+
+static void
+contact_widget_contact_update (EmpathyContactWidget *information)
+{
+ McAccount *account = NULL;
+ const gchar *id = NULL;
+
+ /* Connect and get info from new contact */
+ if (information->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, "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);
+
+ account = empathy_contact_get_account (information->contact);
+ id = empathy_contact_get_id (information->contact);
+ }
+
+ /* Update account widget */
+ if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT) {
+ if (account) {
+ g_signal_handlers_block_by_func (information->widget_account,
+ contact_widget_account_changed_cb,
+ information);
+ empathy_account_chooser_set_account (EMPATHY_ACCOUNT_CHOOSER (information->widget_account),
+ account);
+ g_signal_handlers_unblock_by_func (information->widget_account,
+ contact_widget_account_changed_cb,
+ information);
+ }
+ } else {
+ if (account) {
+ const gchar *name;
+
+ name = mc_account_get_display_name (account);
+ gtk_label_set_label (GTK_LABEL (information->widget_account), name);
+ }
+ }
+
+ /* Update id widget */
+ if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID) {
+ gtk_entry_set_text (GTK_ENTRY (information->widget_id), id ? id : "");
+ } else {
+ gtk_label_set_label (GTK_LABEL (information->widget_id), id ? id : "");
+ }
+ /* Update other widgets */
+ if (information->contact) {
+ contact_widget_name_notify_cb (information);
+ contact_widget_presence_notify_cb (information);
+ contact_widget_avatar_notify_cb (information);
+
+ gtk_widget_show (information->label_alias);
+ gtk_widget_show (information->widget_alias);
+ gtk_widget_show (information->hbox_presence);
+ gtk_widget_show (information->widget_avatar);
+ } 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);
+ }
+}
+
+static void
+contact_widget_change_contact (EmpathyContactWidget *information)
+{
+ EmpathyContact *contact;
+ McAccount *account;
+
+ account = empathy_account_chooser_get_account (EMPATHY_ACCOUNT_CHOOSER (information->widget_account));
+ if (!account) {
+ return;
+ }
+
+ if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_ID) {
+ const gchar *id;
+
+ id = gtk_entry_get_text (GTK_ENTRY (information->widget_id));
+ if (G_STR_EMPTY (id)) {
+ return;
+ }
+
+ contact = empathy_contact_factory_get_from_id (information->factory,
+ account, id);
+ } else {
+ contact = empathy_contact_factory_get_user (information->factory,
+ account);
+ }
+
+ if (contact) {
+ empathy_contact_run_until_ready (contact,
+ EMPATHY_CONTACT_READY_HANDLE |
+ EMPATHY_CONTACT_READY_ID,
+ NULL);
+ contact_widget_set_contact (information, contact);
+ g_object_unref (contact);
+ }
+}
+
+static void
+contact_widget_avatar_changed_cb (EmpathyAvatarChooser *chooser,
+ EmpathyContactWidget *information)
+{
+ if (information->contact &&
+ empathy_contact_is_user (information->contact)) {
+ McAccount *account;
+ const gchar *data;
+ gsize size;
+ const gchar *mime_type;
+
+ account = empathy_contact_get_account (information->contact);
+ empathy_avatar_chooser_get_image_data (EMPATHY_AVATAR_CHOOSER (information->widget_avatar),
+ &data, &size, &mime_type);
+ empathy_contact_factory_set_avatar (information->factory,
+ account,
+ data, size, mime_type);
+ }
+}
+
+static void
+contact_widget_account_changed_cb (GtkComboBox *widget,
+ EmpathyContactWidget *information)
+{
+ contact_widget_change_contact (information);
+}
+
+static gboolean
+contact_widget_id_focus_out_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ EmpathyContactWidget *information)
+{
+ contact_widget_change_contact (information);
+ return FALSE;
+}
+
+static gboolean
+contact_widget_entry_alias_focus_event_cb (GtkEditable *editable,
+ GdkEventFocus *event,
+ EmpathyContactWidget *information)
+{
+ if (information->contact) {
+ const gchar *alias;
+
+ alias = gtk_entry_get_text (GTK_ENTRY (editable));
+ empathy_contact_factory_set_alias (information->factory,
+ information->contact,
+ alias);
+ }
+
+ return FALSE;
+}
+
+static void
+contact_widget_name_notify_cb (EmpathyContactWidget *information)
+{
+ if (GTK_IS_ENTRY (information->widget_alias)) {
+ gtk_entry_set_text (GTK_ENTRY (information->widget_alias),
+ empathy_contact_get_name (information->contact));
+ } else {
+ gtk_label_set_label (GTK_LABEL (information->widget_alias),
+ empathy_contact_get_name (information->contact));
+ }
+}
+
+static void
+contact_widget_presence_notify_cb (EmpathyContactWidget *information)
+{
+ gtk_label_set_text (GTK_LABEL (information->label_status),
+ empathy_contact_get_status (information->contact));
+ gtk_image_set_from_icon_name (GTK_IMAGE (information->image_state),
+ empathy_icon_name_for_contact (information->contact),
+ GTK_ICON_SIZE_BUTTON);
+
+}
+
+static void
+contact_widget_avatar_notify_cb (EmpathyContactWidget *information)
+{
+ EmpathyAvatar *avatar = NULL;
+
+ if (information->contact) {
+ avatar = empathy_contact_get_avatar (information->contact);
+ }
+ if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_AVATAR) {
+ g_signal_handlers_block_by_func (information->widget_avatar,
+ contact_widget_avatar_changed_cb,
+ information);
+ 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);
+ } else {
+ empathy_avatar_image_set (EMPATHY_AVATAR_IMAGE (information->widget_avatar),
+ avatar);
+ }
+}
+
+static void
+contact_widget_groups_setup (EmpathyContactWidget *information)
+{
+ if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_GROUPS) {
+ information->manager = empathy_contact_manager_new ();
+ contact_widget_model_setup (information);
+ }
+}
+
+static void
+contact_widget_groups_update (EmpathyContactWidget *information)
+{
+ if (information->flags & EMPATHY_CONTACT_WIDGET_EDIT_GROUPS &&
+ information->contact) {
+ g_signal_connect_swapped (information->contact, "notify::groups",
+ G_CALLBACK (contact_widget_groups_notify_cb),
+ information);
+ contact_widget_groups_populate_data (information);
+
+ gtk_widget_show (information->vbox_groups);
+ } else {
+ gtk_widget_hide (information->vbox_groups);
+ }
+}
+
+static void
+contact_widget_model_setup (EmpathyContactWidget *information)
+{
+ GtkTreeView *view;
+ GtkListStore *store;
+ GtkTreeSelection *selection;
+
+ view = GTK_TREE_VIEW (information->treeview_groups);
+
+ store = gtk_list_store_new (COL_COUNT,
+ G_TYPE_STRING, /* name */
+ G_TYPE_BOOLEAN, /* enabled */
+ G_TYPE_BOOLEAN); /* editable */
+
+ gtk_tree_view_set_model (view, GTK_TREE_MODEL (store));
+
+ selection = gtk_tree_view_get_selection (view);
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+ contact_widget_model_populate_columns (information);
+
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
+ COL_NAME, GTK_SORT_ASCENDING);
+
+ g_object_unref (store);
+}
+
+static void
+contact_widget_model_populate_columns (EmpathyContactWidget *information)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ guint col_offset;
+
+ view = GTK_TREE_VIEW (information->treeview_groups);
+ model = gtk_tree_view_get_model (view);
+
+ renderer = gtk_cell_renderer_toggle_new ();
+ g_signal_connect (renderer, "toggled",
+ G_CALLBACK (contact_widget_cell_toggled),
+ information);
+
+ column = gtk_tree_view_column_new_with_attributes (_("Select"), renderer,
+ "active", COL_ENABLED,
+ NULL);
+
+ gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_fixed_width (column, 50);
+ gtk_tree_view_append_column (view, column);
+
+ renderer = gtk_cell_renderer_text_new ();
+ col_offset = gtk_tree_view_insert_column_with_attributes (view,
+ -1, _("Group"),
+ renderer,
+ "text", COL_NAME,
+ /* "editable", COL_EDITABLE, */
+ NULL);
+
+ g_object_set_data (G_OBJECT (renderer),
+ "column", GINT_TO_POINTER (COL_NAME));
+
+ column = gtk_tree_view_get_column (view, col_offset - 1);
+ gtk_tree_view_column_set_sort_column_id (column, COL_NAME);
+ gtk_tree_view_column_set_resizable (column,FALSE);
+ gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
+
+ if (information->renderer) {
+ g_object_unref (information->renderer);
+ }
+
+ information->renderer = g_object_ref (renderer);
+}
+
+static void
+contact_widget_groups_populate_data (EmpathyContactWidget *information)
+{
+ GtkTreeView *view;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GList *my_groups, *l;
+ GList *all_groups;
+
+ view = GTK_TREE_VIEW (information->treeview_groups);
+ store = GTK_LIST_STORE (gtk_tree_view_get_model (view));
+ gtk_list_store_clear (store);
+
+ all_groups = empathy_contact_list_get_all_groups (EMPATHY_CONTACT_LIST (information->manager));
+ my_groups = empathy_contact_list_get_groups (EMPATHY_CONTACT_LIST (information->manager),
+ information->contact);
+
+ for (l = all_groups; l; l = l->next) {
+ const gchar *group_str;
+ gboolean enabled;
+
+ group_str = l->data;
+
+ enabled = g_list_find_custom (my_groups,
+ group_str,
+ (GCompareFunc) strcmp) != NULL;
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_NAME, group_str,
+ COL_EDITABLE, TRUE,
+ COL_ENABLED, enabled,
+ -1);
+ }
+
+ g_list_foreach (all_groups, (GFunc) g_free, NULL);
+ g_list_foreach (my_groups, (GFunc) g_free, NULL);
+ g_list_free (all_groups);
+ g_list_free (my_groups);
+}
+
+static void
+contact_widget_groups_notify_cb (EmpathyContactWidget *information)
+{
+ /* FIXME: not implemented */
+}
+
+static gboolean
+contact_widget_model_find_name (EmpathyContactWidget *information,
+ const gchar *name,
+ GtkTreeIter *iter)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ FindName data;
+
+ if (G_STR_EMPTY (name)) {
+ return FALSE;
+ }
+
+ data.information = information;
+ data.name = name;
+ data.found = FALSE;
+
+ view = GTK_TREE_VIEW (information->treeview_groups);
+ model = gtk_tree_view_get_model (view);
+
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc) contact_widget_model_find_name_foreach,
+ &data);
+
+ if (data.found == TRUE) {
+ *iter = data.found_iter;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static gboolean
+contact_widget_model_find_name_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ FindName *data)
+{
+ gchar *name;
+
+ gtk_tree_model_get (model, iter,
+ COL_NAME, &name,
+ -1);
+
+ if (!name) {
+ return FALSE;
+ }
+
+ if (data->name && strcmp (data->name, name) == 0) {
+ data->found = TRUE;
+ data->found_iter = *iter;
+
+ g_free (name);
+
+ return TRUE;
+ }
+
+ g_free (name);
+
+ return FALSE;
+}
+
+static void
+contact_widget_cell_toggled (GtkCellRendererToggle *cell,
+ gchar *path_string,
+ EmpathyContactWidget *information)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkListStore *store;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gboolean enabled;
+ gchar *group;
+
+ view = GTK_TREE_VIEW (information->treeview_groups);
+ model = gtk_tree_view_get_model (view);
+ store = GTK_LIST_STORE (model);
+
+ path = gtk_tree_path_new_from_string (path_string);
+
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get (model, &iter,
+ COL_ENABLED, &enabled,
+ COL_NAME, &group,
+ -1);
+
+ gtk_list_store_set (store, &iter, COL_ENABLED, !enabled, -1);
+ gtk_tree_path_free (path);
+
+ if (group) {
+ if (enabled) {
+ empathy_contact_list_remove_from_group (EMPATHY_CONTACT_LIST (information->manager),
+ information->contact,
+ group);
+ } else {
+ empathy_contact_list_add_to_group (EMPATHY_CONTACT_LIST (information->manager),
+ information->contact,
+ group);
+ }
+
+ g_free (group);
+ }
+}
+
+static void
+contact_widget_entry_group_changed_cb (GtkEditable *editable,
+ EmpathyContactWidget *information)
+{
+ GtkTreeIter iter;
+ const gchar *group;
+
+ group = gtk_entry_get_text (GTK_ENTRY (information->entry_group));
+
+ if (contact_widget_model_find_name (information, group, &iter)) {
+ gtk_widget_set_sensitive (GTK_WIDGET (information->button_group), FALSE);
+
+ } else {
+ gtk_widget_set_sensitive (GTK_WIDGET (information->button_group),
+ !G_STR_EMPTY (group));
+ }
+}
+
+static void
+contact_widget_entry_group_activate_cb (GtkEntry *entry,
+ EmpathyContactWidget *information)
+{
+ gtk_widget_activate (GTK_WIDGET (information->button_group));
+}
+
+static void
+contact_widget_button_group_clicked_cb (GtkButton *button,
+ EmpathyContactWidget *information)
+{
+ GtkTreeView *view;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ const gchar *group;
+
+ view = GTK_TREE_VIEW (information->treeview_groups);
+ store = GTK_LIST_STORE (gtk_tree_view_get_model (view));
+
+ group = gtk_entry_get_text (GTK_ENTRY (information->entry_group));
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_NAME, group,
+ COL_ENABLED, TRUE,
+ -1);
+
+ empathy_contact_list_add_to_group (EMPATHY_CONTACT_LIST (information->manager),
+ information->contact,
+ group);
+}
+
+static void
+contact_widget_details_setup (EmpathyContactWidget *information)
+{
+ /* FIXME: Needs new telepathy spec */
+ gtk_widget_hide (information->vbox_details);
+}
+
+static void
+contact_widget_details_update (EmpathyContactWidget *information)
+{
+ /* FIXME: Needs new telepathy spec */
+}
+
+static void
+contact_widget_client_setup (EmpathyContactWidget *information)
+{
+ /* FIXME: Needs new telepathy spec */
+ gtk_widget_hide (information->vbox_client);
+}
+
+static void
+contact_widget_client_update (EmpathyContactWidget *information)
+{
+ /* FIXME: Needs new telepathy spec */
+}
+
diff --git a/trunk/libempathy-gtk/empathy-contact-widget.glade b/trunk/libempathy-gtk/empathy-contact-widget.glade
new file mode 100644
index 000000000..26cd6a2e8
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-widget.glade
@@ -0,0 +1,558 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="contact_window">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Contact information</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_contact_widget">
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_contact">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label654">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Contact&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkAlignment" id="alignment31">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkHBox" id="hbox189">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkVBox" id="vbox225">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table_contact">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label680">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Account:</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label655">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" comments="Identifier to connect to Instant Messaging network">Identifier:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_alias">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Alias:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox_presence">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkImage" id="image_state">
+ <property name="visible">True</property>
+ <property name="stock">gtk-missing-image</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_status">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="xalign">0</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ <property name="selectable">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox_avatar">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox_groups">
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label672">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Groups&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkAlignment" id="alignment33">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox224">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label679">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Select the groups you want this contact to appear in, you can select more than one group or no groups.</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox188">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <widget class="GtkEntry" id="entry_group">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_group">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="label">_Add Group</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow17">
+ <property name="height_request">100</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview_groups">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ <property name="enable_search">False</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox_details">
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label649">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Contact Details&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkAlignment" id="alignment30">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox218">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table_details">
+ <property name="n_rows">4</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label670">
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Fullname:</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label650">
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Email:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label651">
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Web site:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label652">
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Birthday:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox_details_requested">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkImage" id="image885">
+ <property name="visible">True</property>
+ <property name="stock">gtk-dialog-info</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label653">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Information requested...</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox_client">
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label662">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;b&gt;Client Information&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkAlignment" id="alignment32">
+ <property name="visible">True</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox222">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkTable" id="table_client">
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label668">
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">OS:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label667">
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">Version:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label666">
+ <property name="xalign">0</property>
+ <property name="yalign">0</property>
+ <property name="label" translatable="yes">Client:</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_client">
+ <property name="can_focus">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">2</property>
+ <property name="wrap">True</property>
+ <property name="selectable">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_version">
+ <property name="can_focus">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">2</property>
+ <property name="wrap">True</property>
+ <property name="selectable">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_os">
+ <property name="can_focus">True</property>
+ <property name="xalign">0</property>
+ <property name="xpad">2</property>
+ <property name="wrap">True</property>
+ <property name="selectable">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox_client_requested">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkImage" id="image887">
+ <property name="visible">True</property>
+ <property name="stock">gtk-dialog-info</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label669">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Information requested...</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-contact-widget.h b/trunk/libempathy-gtk/empathy-contact-widget.h
new file mode 100644
index 000000000..595f68fc5
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-contact-widget.h
@@ -0,0 +1,52 @@
+/* -*- 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_WIDGET_H__
+#define __EMPATHY_CONTACT_WIDGET_H__
+
+#include <gtk/gtk.h>
+
+#include <libempathy/empathy-contact.h>
+#include "empathy-account-chooser.h"
+
+G_BEGIN_DECLS
+
+typedef enum {
+ EMPATHY_CONTACT_WIDGET_EDIT_NONE = 0,
+ EMPATHY_CONTACT_WIDGET_EDIT_ALIAS = 1 << 0,
+ EMPATHY_CONTACT_WIDGET_EDIT_AVATAR = 1 << 1,
+ EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT = 1 << 2,
+ EMPATHY_CONTACT_WIDGET_EDIT_ID = 1 << 3,
+ EMPATHY_CONTACT_WIDGET_EDIT_GROUPS = 1 << 4,
+} EmpathyContactWidgetFlags;
+
+GtkWidget * empathy_contact_widget_new (EmpathyContact *contact,
+ EmpathyContactWidgetFlags flags);
+EmpathyContact *empathy_contact_widget_get_contact (GtkWidget *widget);
+void empathy_contact_widget_set_contact (GtkWidget *widget,
+ EmpathyContact *contact);
+void empathy_contact_widget_set_account_filter (GtkWidget *widget,
+ EmpathyAccountChooserFilterFunc filter,
+ gpointer user_data);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CONTACT_WIDGET_H__ */
diff --git a/trunk/libempathy-gtk/empathy-geometry.c b/trunk/libempathy-gtk/empathy-geometry.c
new file mode 100644
index 000000000..b3bd09ca1
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-geometry.c
@@ -0,0 +1,182 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <sys/stat.h>
+
+#include <glib.h>
+#include <gdk/gdk.h>
+
+#include "empathy-geometry.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+#define GEOMETRY_DIR_CREATE_MODE (S_IRUSR | S_IWUSR | S_IXUSR)
+#define GEOMETRY_FILE_CREATE_MODE (S_IRUSR | S_IWUSR)
+
+#define GEOMETRY_KEY_FILENAME "geometry.ini"
+#define GEOMETRY_FORMAT "%d,%d,%d,%d"
+#define GEOMETRY_GROUP_NAME "geometry"
+
+static gchar *geometry_get_filename (void);
+
+static gchar *
+geometry_get_filename (void)
+{
+ gchar *dir;
+ gchar *filename;
+
+ dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+ if (!g_file_test (dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
+ DEBUG ("Creating directory:'%s'", dir);
+ g_mkdir_with_parents (dir, GEOMETRY_DIR_CREATE_MODE);
+ }
+
+ filename = g_build_filename (dir, GEOMETRY_KEY_FILENAME, NULL);
+ g_free (dir);
+
+ return filename;
+}
+
+void
+empathy_geometry_save (const gchar *name,
+ gint x,
+ gint y,
+ gint w,
+ gint h)
+{
+ GError *error = NULL;
+ GKeyFile *key_file;
+ gchar *filename;
+ GdkScreen *screen;
+ gint max_width;
+ gint max_height;
+ gchar *content;
+ gsize length;
+ gchar *str;
+
+ DEBUG ("Saving window geometry: x:%d, y:%d, w:%d, h:%d\n",
+ x, y, w, h);
+
+ screen = gdk_screen_get_default ();
+ max_width = gdk_screen_get_width (screen);
+ max_height = gdk_screen_get_height (screen);
+
+ w = CLAMP (w, 100, max_width);
+ h = CLAMP (h, 100, max_height);
+
+ x = CLAMP (x, 0, max_width - w);
+ y = CLAMP (y, 0, max_height - h);
+
+ str = g_strdup_printf (GEOMETRY_FORMAT, x, y, w, h);
+
+ key_file = g_key_file_new ();
+
+ filename = geometry_get_filename ();
+
+ g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, NULL);
+ g_key_file_set_string (key_file, GEOMETRY_GROUP_NAME, name, str);
+
+ g_free (str);
+
+ content = g_key_file_to_data (key_file, &length, NULL);
+ if (!g_file_set_contents (filename, content, length, &error)) {
+ g_warning ("Couldn't save window geometry, error:%d->'%s'",
+ error->code, error->message);
+ g_error_free (error);
+ }
+
+ g_free (content);
+ g_free (filename);
+ g_key_file_free (key_file);
+}
+
+void
+empathy_geometry_load (const gchar *name,
+ gint *x,
+ gint *y,
+ gint *w,
+ gint *h)
+{
+ GKeyFile *key_file;
+ gchar *filename;
+ gchar *str = NULL;
+
+ if (x) {
+ *x = -1;
+ }
+
+ if (y) {
+ *y = -1;
+ }
+
+ if (w) {
+ *w = -1;
+ }
+
+ if (h) {
+ *h = -1;
+ }
+
+ key_file = g_key_file_new ();
+
+ filename = geometry_get_filename ();
+
+ if (g_key_file_load_from_file (key_file, filename, G_KEY_FILE_NONE, NULL)) {
+ str = g_key_file_get_string (key_file, GEOMETRY_GROUP_NAME, name, NULL);
+ }
+
+ if (str) {
+ gint tmp_x, tmp_y, tmp_w, tmp_h;
+
+ sscanf (str, GEOMETRY_FORMAT, &tmp_x, &tmp_y, &tmp_w, &tmp_h);
+
+ if (x) {
+ *x = tmp_x;
+ }
+
+ if (y) {
+ *y = tmp_y;
+ }
+
+ if (w) {
+ *w = tmp_w;
+ }
+
+ if (h) {
+ *h = tmp_h;
+ }
+
+ g_free (str);
+ }
+
+ DEBUG ("Loading window geometry: x:%d, y:%d, w:%d, h:%d\n",
+ x ? *x : -1, y ? *y : -1, w ? *w : -1, h ? *h : -1);
+
+ g_free (filename);
+ g_key_file_free (key_file);
+}
+
diff --git a/trunk/libempathy-gtk/empathy-geometry.h b/trunk/libempathy-gtk/empathy-geometry.h
new file mode 100644
index 000000000..1b711c2ec
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-geometry.h
@@ -0,0 +1,45 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_GEOMETRY_H__
+#define __EMPATHY_GEOMETRY_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+void empathy_geometry_save (const gchar *name,
+ gint x,
+ gint y,
+ gint w,
+ gint h);
+void empathy_geometry_load (const gchar *name,
+ gint *x,
+ gint *y,
+ gint *w,
+ gint *h);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_GEOMETRY_H__ */
diff --git a/trunk/libempathy-gtk/empathy-images.h b/trunk/libempathy-gtk/empathy-images.h
new file mode 100644
index 000000000..9ce8a8fe4
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-images.h
@@ -0,0 +1,45 @@
+/* -*- 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_IMAGES_H__
+#define __EMPATHY_IMAGES_H__
+
+G_BEGIN_DECLS
+
+#define EMPATHY_IMAGE_OFFLINE "empathy-offline"
+#define EMPATHY_IMAGE_HIDDEN "empathy-offline"
+#define EMPATHY_IMAGE_AVAILABLE "empathy-available"
+#define EMPATHY_IMAGE_BUSY "empathy-busy"
+#define EMPATHY_IMAGE_AWAY "empathy-away"
+#define EMPATHY_IMAGE_EXT_AWAY "empathy-extended-away"
+#define EMPATHY_IMAGE_UNKNOWN "empathy-pending"
+
+#define EMPATHY_IMAGE_MESSAGE "im-message"
+#define EMPATHY_IMAGE_NEW_MESSAGE "im-message-new"
+#define EMPATHY_IMAGE_TYPING "user-typing"
+#define EMPATHY_IMAGE_CONTACT_INFORMATION "gtk-info"
+#define EMPATHY_IMAGE_GROUP_MESSAGE "system-users"
+#define EMPATHY_IMAGE_VOIP "audio-input-microphone"
+#define EMPATHY_IMAGE_LOG "document-open-recent"
+
+G_END_DECLS
+
+#endif /* __EMPATHY_IMAGES_ICONS_H__ */
diff --git a/trunk/libempathy-gtk/empathy-irc-network-dialog.c b/trunk/libempathy-gtk/empathy-irc-network-dialog.c
new file mode 100644
index 000000000..7c6e27d30
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-irc-network-dialog.c
@@ -0,0 +1,580 @@
+/*
+ * Copyright (C) 2007-2008 Guillaume Desmottes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <gdesmott@gnome.org>
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mc-protocol.h>
+
+#include <libempathy/empathy-utils.h>
+
+#include <libempathy/empathy-irc-network-manager.h>
+#include "empathy-ui-utils.h"
+#include "totem-subtitle-encoding.h"
+
+#include "empathy-irc-network-dialog.h"
+
+typedef struct {
+ EmpathyIrcNetwork *network;
+
+ GtkWidget *dialog;
+ GtkWidget *button_close;
+
+ GtkWidget *entry_network;
+ GtkWidget *combobox_charset;
+
+ GtkWidget *treeview_servers;
+ GtkWidget *button_add;
+ GtkWidget *button_remove;
+ GtkWidget *button_up;
+ GtkWidget *button_down;
+} EmpathyIrcNetworkDialog;
+
+static void
+irc_network_dialog_destroy_cb (GtkWidget *widget,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ g_object_unref (dialog->network);
+
+ g_slice_free (EmpathyIrcNetworkDialog, dialog);
+}
+
+static void
+irc_network_dialog_close_clicked_cb (GtkWidget *widget,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ gtk_widget_destroy (dialog->dialog);
+}
+
+enum {
+ COL_SRV_OBJ,
+ COL_ADR,
+ COL_PORT,
+ COL_SSL
+};
+
+static void
+add_server_to_store (GtkListStore *store,
+ EmpathyIrcServer *server,
+ GtkTreeIter *iter)
+{
+ gchar *address;
+ guint port;
+ gboolean ssl;
+
+ g_object_get (server,
+ "address", &address,
+ "port", &port,
+ "ssl", &ssl,
+ NULL);
+
+ gtk_list_store_insert_with_values (store, iter, -1,
+ COL_SRV_OBJ, server,
+ COL_ADR, address,
+ COL_PORT, port,
+ COL_SSL, ssl,
+ -1);
+
+ g_free (address);
+}
+
+static void
+irc_network_dialog_setup (EmpathyIrcNetworkDialog *dialog)
+{
+ gchar *name, *charset;
+ GSList *servers, *l;
+ GtkListStore *store;
+
+ g_object_get (dialog->network,
+ "name", &name,
+ "charset", &charset,
+ NULL);
+ gtk_entry_set_text (GTK_ENTRY (dialog->entry_network), name);
+
+ store = GTK_LIST_STORE (gtk_tree_view_get_model (
+ GTK_TREE_VIEW (dialog->treeview_servers)));
+
+ servers = empathy_irc_network_get_servers (dialog->network);
+ for (l = servers; l != NULL; l = g_slist_next (l))
+ {
+ EmpathyIrcServer *server = l->data;
+ GtkTreeIter iter;
+
+ add_server_to_store (store, server, &iter);
+ }
+
+ totem_subtitle_encoding_set (GTK_COMBO_BOX (dialog->combobox_charset),
+ charset);
+
+ g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
+ g_slist_free (servers);
+ g_free (name);
+ g_free (charset);
+}
+
+static void
+irc_network_dialog_address_edited_cb (GtkCellRendererText *renderer,
+ gchar *path,
+ gchar *new_text,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ EmpathyIrcServer *server;
+ GtkTreeModel *model;
+ GtkTreePath *treepath;
+ GtkTreeIter iter;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview_servers));
+ treepath = gtk_tree_path_new_from_string (path);
+ gtk_tree_model_get_iter (model, &iter, treepath);
+ gtk_tree_model_get (model, &iter,
+ COL_SRV_OBJ, &server,
+ -1);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ COL_ADR, new_text,
+ -1);
+
+ g_object_set (server, "address", new_text, NULL);
+
+ gtk_tree_path_free (treepath);
+ g_object_unref (server);
+}
+
+static void
+irc_network_dialog_port_edited_cb (GtkCellRendererText *renderer,
+ gchar *path,
+ gchar *new_text,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ EmpathyIrcServer *server;
+ GtkTreeModel *model;
+ GtkTreePath *treepath;
+ GtkTreeIter iter;
+ guint port;
+
+ port = strtoul (new_text, NULL, 10);
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview_servers));
+ treepath = gtk_tree_path_new_from_string (path);
+ gtk_tree_model_get_iter (model, &iter, treepath);
+ gtk_tree_model_get (model, &iter,
+ COL_SRV_OBJ, &server,
+ -1);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ COL_PORT, port,
+ -1);
+
+ g_object_set (server, "port", port, NULL);
+
+ gtk_tree_path_free (treepath);
+ g_object_unref (server);
+}
+
+static void
+irc_network_dialog_ssl_toggled_cb (GtkCellRendererText *renderer,
+ gchar *path,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ EmpathyIrcServer *server;
+ GtkTreeModel *model;
+ GtkTreePath *treepath;
+ GtkTreeIter iter;
+ gboolean ssl;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview_servers));
+ treepath = gtk_tree_path_new_from_string (path);
+ gtk_tree_model_get_iter (model, &iter, treepath);
+ gtk_tree_model_get (model, &iter,
+ COL_SRV_OBJ, &server,
+ COL_SSL, &ssl,
+ -1);
+ ssl = !ssl;
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+ COL_SSL, ssl,
+ -1);
+
+ g_object_set (server, "ssl", ssl, NULL);
+
+ gtk_tree_path_free (treepath);
+ g_object_unref (server);
+}
+
+static gboolean
+irc_network_dialog_network_focus_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ const gchar *str;
+
+ str = gtk_entry_get_text (GTK_ENTRY (widget));
+
+ g_object_set (dialog->network, "name", str, NULL);
+
+ return FALSE;
+}
+
+static void
+irc_network_dialog_network_update_buttons (EmpathyIrcNetworkDialog *dialog)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gboolean can_remove = FALSE, can_move_up = FALSE, can_move_down = FALSE;
+ int selected;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (
+ dialog->treeview_servers));
+
+ if (gtk_tree_selection_get_selected (selection, &model, &iter))
+ {
+ path = gtk_tree_model_get_path (model, &iter);
+
+ selected = gtk_tree_path_get_indices (path)[0];
+
+ can_remove = TRUE;
+ can_move_up = selected > 0;
+ can_move_down =
+ selected < gtk_tree_model_iter_n_children (model, NULL) - 1;
+
+ gtk_tree_path_free (path);
+ }
+
+ gtk_widget_set_sensitive (dialog->button_remove, can_remove);
+ gtk_widget_set_sensitive (dialog->button_up, can_move_up);
+ gtk_widget_set_sensitive (dialog->button_down, can_move_down);
+}
+
+static void
+irc_network_dialog_button_add_clicked_cb (GtkWidget *widget,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ EmpathyIrcServer *server;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ GtkTreeViewColumn *column;
+
+ store = GTK_LIST_STORE (gtk_tree_view_get_model (
+ GTK_TREE_VIEW (dialog->treeview_servers)));
+
+ server = empathy_irc_server_new (_("new server"), 6667, FALSE);
+ empathy_irc_network_append_server (dialog->network, server);
+ add_server_to_store (store, server, &iter);
+
+ path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &iter);
+ column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->treeview_servers),
+ 0);
+ gtk_tree_view_set_cursor (GTK_TREE_VIEW (dialog->treeview_servers), path,
+ column, TRUE);
+
+ irc_network_dialog_network_update_buttons (dialog);
+
+ gtk_tree_path_free (path);
+ g_object_unref (server);
+}
+
+static void
+irc_network_dialog_button_remove_clicked_cb (GtkWidget *widget,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ EmpathyIrcServer *server;
+
+ selection = gtk_tree_view_get_selection (
+ GTK_TREE_VIEW (dialog->treeview_servers));
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+ return;
+
+ gtk_tree_model_get (model, &iter, COL_SRV_OBJ, &server, -1);
+
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+ empathy_irc_network_remove_server (dialog->network, server);
+
+ irc_network_dialog_network_update_buttons (dialog);
+
+ g_object_unref (server);
+}
+
+static void
+irc_network_dialog_button_up_clicked_cb (GtkWidget *widget,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter, iter_prev;
+ GtkTreePath *path;
+ gint *pos;
+ EmpathyIrcServer *server;
+
+ selection = gtk_tree_view_get_selection (
+ GTK_TREE_VIEW (dialog->treeview_servers));
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+ return;
+
+ path = gtk_tree_model_get_path (model, &iter);
+
+ if (!gtk_tree_path_prev (path))
+ {
+ gtk_tree_path_free (path);
+ return;
+ }
+
+ gtk_tree_model_get (model, &iter, COL_SRV_OBJ, &server, -1);
+
+ gtk_tree_model_get_iter (model, &iter_prev, path);
+ gtk_list_store_swap (GTK_LIST_STORE (model), &iter_prev, &iter);
+
+ pos = gtk_tree_path_get_indices (path);
+ empathy_irc_network_set_server_position (dialog->network, server, *pos);
+
+ irc_network_dialog_network_update_buttons (dialog);
+
+ g_object_unref (server);
+ gtk_tree_path_free (path);
+}
+
+static void
+irc_network_dialog_button_down_clicked_cb (GtkWidget *widget,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter, iter_prev;
+ GtkTreePath *path;
+ EmpathyIrcServer *server;
+ gint *pos;
+
+ selection = gtk_tree_view_get_selection (
+ GTK_TREE_VIEW (dialog->treeview_servers));
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+ return;
+
+ path = gtk_tree_model_get_path (model, &iter);
+
+ gtk_tree_path_next (path);
+ if (!gtk_tree_model_get_iter (model, &iter_prev, path))
+ {
+ gtk_tree_path_free (path);
+ return;
+ }
+
+ gtk_tree_model_get (model, &iter, COL_SRV_OBJ, &server, -1);
+
+ gtk_list_store_swap (GTK_LIST_STORE (model), &iter_prev, &iter);
+
+ pos = gtk_tree_path_get_indices (path);
+ empathy_irc_network_set_server_position (dialog->network, server, *pos);
+
+ irc_network_dialog_network_update_buttons (dialog);
+
+ gtk_tree_path_free (path);
+}
+
+static void
+irc_network_dialog_selection_changed_cb (GtkTreeSelection *treeselection,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ irc_network_dialog_network_update_buttons (dialog);
+}
+
+static void
+irc_network_dialog_combobox_charset_changed_cb (GtkWidget *combobox,
+ EmpathyIrcNetworkDialog *dialog)
+{
+ const gchar *charset;
+
+ charset = totem_subtitle_encoding_get_selected (GTK_COMBO_BOX (combobox));
+ g_object_set (dialog->network, "charset", charset, NULL);
+}
+
+static void
+change_network (EmpathyIrcNetworkDialog *dialog,
+ EmpathyIrcNetwork *network)
+{
+ GtkListStore *store;
+
+ if (dialog->network == network)
+ /* No need to change */
+ return;
+
+ if (dialog->network != NULL)
+ {
+ g_object_unref (dialog->network);
+ }
+
+ dialog->network = network;
+ g_object_ref (network);
+
+ store = GTK_LIST_STORE (gtk_tree_view_get_model (
+ GTK_TREE_VIEW (dialog->treeview_servers)));
+ gtk_list_store_clear (store);
+
+ irc_network_dialog_setup (dialog);
+}
+
+/**
+ * empathy_irc_network_dialog_show:
+ * @network: the #EmpathyIrcNetwork to configure
+ * @parent: the parent of this dialog
+ *
+ * Display a dialog to configure a given #EmpathyIrcNetwork.
+ * This function is a singleton so if a configuration dialog already
+ * exists we use this one to edit the network.
+ *
+ * Returns: The displayed #GtkDialog
+ */
+GtkWidget *
+empathy_irc_network_dialog_show (EmpathyIrcNetwork *network,
+ GtkWidget *parent)
+{
+ static EmpathyIrcNetworkDialog *dialog = NULL;
+ GladeXML *glade;
+ GtkListStore *store;
+ GtkCellRenderer *renderer;
+ GtkAdjustment *adjustment;
+ GtkTreeSelection *selection;
+ GtkTreeViewColumn *column;
+ gchar *filename;
+
+ g_return_val_if_fail (network != NULL, NULL);
+
+ if (dialog != NULL)
+ {
+ change_network (dialog, network);
+ gtk_window_present (GTK_WINDOW (dialog->dialog));
+
+ return dialog->dialog;
+ }
+
+ dialog = g_slice_new0 (EmpathyIrcNetworkDialog);
+
+ dialog->network = network;
+ g_object_ref (dialog->network);
+
+ filename = empathy_file_lookup ("empathy-account-widget-irc.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "irc_network_dialog",
+ NULL,
+ "irc_network_dialog", &dialog->dialog,
+ "button_close", &dialog->button_close,
+ "entry_network", &dialog->entry_network,
+ "combobox_charset", &dialog->combobox_charset,
+ "treeview_servers", &dialog->treeview_servers,
+ "button_add", &dialog->button_add,
+ "button_remove", &dialog->button_remove,
+ "button_up", &dialog->button_up,
+ "button_down", &dialog->button_down,
+ NULL);
+ g_free (filename);
+
+ store = gtk_list_store_new (4, G_TYPE_OBJECT, G_TYPE_STRING,
+ G_TYPE_UINT, G_TYPE_BOOLEAN);
+ gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->treeview_servers),
+ GTK_TREE_MODEL (store));
+ g_object_unref (store);
+
+ /* address */
+ renderer = gtk_cell_renderer_text_new ();
+ g_object_set (renderer, "editable", TRUE, NULL);
+ g_signal_connect (renderer, "edited",
+ G_CALLBACK (irc_network_dialog_address_edited_cb), dialog);
+ gtk_tree_view_insert_column_with_attributes (
+ GTK_TREE_VIEW (dialog->treeview_servers),
+ -1, _("Server"), renderer, "text", COL_ADR,
+ NULL);
+
+ /* port */
+ adjustment = (GtkAdjustment *) gtk_adjustment_new (6667, 1, G_MAXUINT16,
+ 1, 10, 0);
+ renderer = gtk_cell_renderer_spin_new ();
+ g_object_set (renderer,
+ "editable", TRUE,
+ "adjustment", adjustment,
+ NULL);
+ g_signal_connect (renderer, "edited",
+ G_CALLBACK (irc_network_dialog_port_edited_cb), dialog);
+ gtk_tree_view_insert_column_with_attributes (
+ GTK_TREE_VIEW (dialog->treeview_servers),
+ -1, _("Port"), renderer, "text", COL_PORT,
+ NULL);
+ column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->treeview_servers),
+ 1);
+ gtk_tree_view_column_set_expand (column, TRUE);
+
+ /* SSL */
+ renderer = gtk_cell_renderer_toggle_new ();
+ g_object_set (renderer, "activatable", TRUE, NULL);
+ g_signal_connect (renderer, "toggled",
+ G_CALLBACK (irc_network_dialog_ssl_toggled_cb), dialog);
+ gtk_tree_view_insert_column_with_attributes (
+ GTK_TREE_VIEW (dialog->treeview_servers),
+ -1, _("SSL"), renderer, "active", COL_SSL,
+ NULL);
+
+ selection = gtk_tree_view_get_selection (
+ GTK_TREE_VIEW (dialog->treeview_servers));
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+ /* charset */
+ totem_subtitle_encoding_init (GTK_COMBO_BOX (dialog->combobox_charset));
+
+ irc_network_dialog_setup (dialog);
+
+ empathy_glade_connect (glade, dialog,
+ "irc_network_dialog", "destroy", irc_network_dialog_destroy_cb,
+ "button_close", "clicked", irc_network_dialog_close_clicked_cb,
+ "entry_network", "focus-out-event", irc_network_dialog_network_focus_cb,
+ "button_add", "clicked", irc_network_dialog_button_add_clicked_cb,
+ "button_remove", "clicked", irc_network_dialog_button_remove_clicked_cb,
+ "button_up", "clicked", irc_network_dialog_button_up_clicked_cb,
+ "button_down", "clicked", irc_network_dialog_button_down_clicked_cb,
+ "combobox_charset", "changed", irc_network_dialog_combobox_charset_changed_cb,
+ NULL);
+
+ g_object_unref (glade);
+
+ g_object_add_weak_pointer (G_OBJECT (dialog->dialog),
+ (gpointer) &dialog);
+
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (irc_network_dialog_selection_changed_cb),
+ dialog);
+
+ gtk_window_set_transient_for (GTK_WINDOW (dialog->dialog),
+ GTK_WINDOW (parent));
+ gtk_window_set_modal (GTK_WINDOW (dialog->dialog), TRUE);
+
+ irc_network_dialog_network_update_buttons (dialog);
+
+ return dialog->dialog;
+}
diff --git a/trunk/libempathy-gtk/empathy-irc-network-dialog.h b/trunk/libempathy-gtk/empathy-irc-network-dialog.h
new file mode 100644
index 000000000..985849696
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-irc-network-dialog.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2007-2008 Guillaume Desmottes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <gdesmott@gnome.org>
+ */
+
+#ifndef __EMPATHY_IRC_NETWORK_DIALOG_H__
+#define __EMPATHY_IRC_NETWORK_DIALOG_H__
+
+#include <gtk/gtkwidget.h>
+
+#include <libempathy/empathy-irc-network.h>
+
+G_BEGIN_DECLS
+
+GtkWidget * empathy_irc_network_dialog_show (EmpathyIrcNetwork *network,
+ GtkWidget *parent);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_IRC_NETWORK_DIALOG_H__ */
diff --git a/trunk/libempathy-gtk/empathy-log-window.c b/trunk/libempathy-gtk/empathy-log-window.c
new file mode 100644
index 000000000..f1d958a30
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-log-window.c
@@ -0,0 +1,1087 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+#include <libempathy/empathy-log-manager.h>
+#include <libempathy/empathy-chatroom-manager.h>
+#include <libempathy/empathy-chatroom.h>
+#include <libempathy/empathy-message.h>
+#include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-time.h>
+
+#include "empathy-log-window.h"
+#include "empathy-account-chooser.h"
+#include "empathy-chat-view.h"
+#include "empathy-ui-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+typedef struct {
+ GtkWidget *window;
+
+ GtkWidget *notebook;
+
+ GtkWidget *entry_find;
+ GtkWidget *button_find;
+ GtkWidget *treeview_find;
+ GtkWidget *scrolledwindow_find;
+ EmpathyChatView *chatview_find;
+ GtkWidget *button_previous;
+ GtkWidget *button_next;
+
+ GtkWidget *vbox_chats;
+ GtkWidget *account_chooser_chats;
+ GtkWidget *entry_chats;
+ GtkWidget *calendar_chats;
+ GtkWidget *treeview_chats;
+ GtkWidget *scrolledwindow_chats;
+ EmpathyChatView *chatview_chats;
+
+ gchar *last_find;
+
+ EmpathyLogManager *log_manager;
+} EmpathyLogWindow;
+
+static void log_window_destroy_cb (GtkWidget *widget,
+ EmpathyLogWindow *window);
+static void log_window_entry_find_changed_cb (GtkWidget *entry,
+ EmpathyLogWindow *window);
+static void log_window_find_changed_cb (GtkTreeSelection *selection,
+ EmpathyLogWindow *window);
+static void log_window_find_populate (EmpathyLogWindow *window,
+ const gchar *search_criteria);
+static void log_window_find_setup (EmpathyLogWindow *window);
+static void log_window_button_find_clicked_cb (GtkWidget *widget,
+ EmpathyLogWindow *window);
+static void log_window_button_next_clicked_cb (GtkWidget *widget,
+ EmpathyLogWindow *window);
+static void log_window_button_previous_clicked_cb (GtkWidget *widget,
+ EmpathyLogWindow *window);
+static void log_window_chats_changed_cb (GtkTreeSelection *selection,
+ EmpathyLogWindow *window);
+static void log_window_chats_populate (EmpathyLogWindow *window);
+static void log_window_chats_setup (EmpathyLogWindow *window);
+static void log_window_chats_accounts_changed_cb (GtkWidget *combobox,
+ EmpathyLogWindow *window);
+static void log_window_chats_set_selected (EmpathyLogWindow *window,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean is_chatroom);
+static gboolean log_window_chats_get_selected (EmpathyLogWindow *window,
+ McAccount **account,
+ gchar **chat_id,
+ gboolean *is_chatroom);
+static void log_window_chats_get_messages (EmpathyLogWindow *window,
+ const gchar *date_to_show);
+static void log_window_calendar_chats_day_selected_cb (GtkWidget *calendar,
+ EmpathyLogWindow *window);
+static void log_window_calendar_chats_month_changed_cb (GtkWidget *calendar,
+ EmpathyLogWindow *window);
+static void log_window_entry_chats_changed_cb (GtkWidget *entry,
+ EmpathyLogWindow *window);
+static void log_window_entry_chats_activate_cb (GtkWidget *entry,
+ EmpathyLogWindow *window);
+
+enum {
+ COL_FIND_ACCOUNT_ICON,
+ COL_FIND_ACCOUNT_NAME,
+ COL_FIND_ACCOUNT,
+ COL_FIND_CHAT_NAME,
+ COL_FIND_CHAT_ID,
+ COL_FIND_IS_CHATROOM,
+ COL_FIND_DATE,
+ COL_FIND_DATE_READABLE,
+ COL_FIND_COUNT
+};
+
+enum {
+ COL_CHAT_ICON,
+ COL_CHAT_NAME,
+ COL_CHAT_ACCOUNT,
+ COL_CHAT_ID,
+ COL_CHAT_IS_CHATROOM,
+ COL_CHAT_COUNT
+};
+
+GtkWidget *
+empathy_log_window_show (McAccount *account,
+ const gchar *chat_id,
+ gboolean is_chatroom,
+ GtkWindow *parent)
+{
+ static EmpathyLogWindow *window = NULL;
+ EmpathyAccountChooser *account_chooser;
+ GList *accounts;
+ gint account_num;
+ GladeXML *glade;
+ gchar *filename;
+
+ if (window) {
+ gtk_window_present (GTK_WINDOW (window->window));
+
+ if (account && chat_id) {
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (window->notebook), 1);
+ log_window_chats_set_selected (window, account,
+ chat_id, is_chatroom);
+ }
+
+ return window->window;
+ }
+
+ window = g_new0 (EmpathyLogWindow, 1);
+ window->log_manager = empathy_log_manager_new ();
+
+ filename = empathy_file_lookup ("empathy-log-window.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "log_window",
+ NULL,
+ "log_window", &window->window,
+ "notebook", &window->notebook,
+ "entry_find", &window->entry_find,
+ "button_find", &window->button_find,
+ "treeview_find", &window->treeview_find,
+ "scrolledwindow_find", &window->scrolledwindow_find,
+ "button_previous", &window->button_previous,
+ "button_next", &window->button_next,
+ "entry_chats", &window->entry_chats,
+ "calendar_chats", &window->calendar_chats,
+ "vbox_chats", &window->vbox_chats,
+ "treeview_chats", &window->treeview_chats,
+ "scrolledwindow_chats", &window->scrolledwindow_chats,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ window,
+ "log_window", "destroy", log_window_destroy_cb,
+ "entry_find", "changed", log_window_entry_find_changed_cb,
+ "button_previous", "clicked", log_window_button_previous_clicked_cb,
+ "button_next", "clicked", log_window_button_next_clicked_cb,
+ "button_find", "clicked", log_window_button_find_clicked_cb,
+ "entry_chats", "changed", log_window_entry_chats_changed_cb,
+ "entry_chats", "activate", log_window_entry_chats_activate_cb,
+ NULL);
+
+ g_object_unref (glade);
+
+ g_object_add_weak_pointer (G_OBJECT (window->window),
+ (gpointer) &window);
+
+ /* We set this up here so we can block it when needed. */
+ g_signal_connect (window->calendar_chats, "day-selected",
+ G_CALLBACK (log_window_calendar_chats_day_selected_cb),
+ window);
+ g_signal_connect (window->calendar_chats, "month-changed",
+ G_CALLBACK (log_window_calendar_chats_month_changed_cb),
+ window);
+
+ /* Configure Search EmpathyChatView */
+ window->chatview_find = empathy_chat_view_new ();
+ gtk_container_add (GTK_CONTAINER (window->scrolledwindow_find),
+ GTK_WIDGET (window->chatview_find));
+ gtk_widget_show (GTK_WIDGET (window->chatview_find));
+
+ /* Configure Contacts EmpathyChatView */
+ window->chatview_chats = empathy_chat_view_new ();
+ gtk_container_add (GTK_CONTAINER (window->scrolledwindow_chats),
+ GTK_WIDGET (window->chatview_chats));
+ gtk_widget_show (GTK_WIDGET (window->chatview_chats));
+
+ /* Account chooser for chats */
+ window->account_chooser_chats = empathy_account_chooser_new ();
+ account_chooser = EMPATHY_ACCOUNT_CHOOSER (window->account_chooser_chats);
+
+ gtk_box_pack_start (GTK_BOX (window->vbox_chats),
+ window->account_chooser_chats,
+ FALSE, TRUE, 0);
+
+ g_signal_connect (window->account_chooser_chats, "changed",
+ G_CALLBACK (log_window_chats_accounts_changed_cb),
+ window);
+
+ /* Populate */
+ accounts = mc_accounts_list ();
+ account_num = g_list_length (accounts);
+ mc_accounts_list_free (accounts);
+
+ if (account_num > 1) {
+ gtk_widget_show (window->vbox_chats);
+ gtk_widget_show (window->account_chooser_chats);
+ } else {
+ gtk_widget_hide (window->vbox_chats);
+ gtk_widget_hide (window->account_chooser_chats);
+ }
+
+ /* Search List */
+ log_window_find_setup (window);
+
+ /* Contacts */
+ log_window_chats_setup (window);
+ log_window_chats_populate (window);
+
+ /* Select chat */
+ if (account && chat_id) {
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (window->notebook), 1);
+ log_window_chats_set_selected (window, account,
+ chat_id, is_chatroom);
+ }
+
+ if (parent) {
+ gtk_window_set_transient_for (GTK_WINDOW (window->window),
+ GTK_WINDOW (parent));
+ }
+
+ gtk_widget_show (window->window);
+
+ return window->window;
+}
+
+static void
+log_window_destroy_cb (GtkWidget *widget,
+ EmpathyLogWindow *window)
+{
+ g_free (window->last_find);
+ g_object_unref (window->log_manager);
+
+ g_free (window);
+}
+
+/*
+ * Search code.
+ */
+static void
+log_window_entry_find_changed_cb (GtkWidget *entry,
+ EmpathyLogWindow *window)
+{
+ const gchar *str;
+ gboolean is_sensitive = TRUE;
+
+ str = gtk_entry_get_text (GTK_ENTRY (window->entry_find));
+
+ is_sensitive &= !G_STR_EMPTY (str);
+ is_sensitive &=
+ !window->last_find ||
+ (window->last_find && strcmp (window->last_find, str) != 0);
+
+ gtk_widget_set_sensitive (window->button_find, is_sensitive);
+}
+
+static void
+log_window_find_changed_cb (GtkTreeSelection *selection,
+ EmpathyLogWindow *window)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ McAccount *account;
+ gchar *chat_id;
+ gboolean is_chatroom;
+ gchar *date;
+ EmpathyMessage *message;
+ GList *messages;
+ GList *l;
+ gboolean can_do_previous;
+ gboolean can_do_next;
+
+ /* Get selected information */
+ view = GTK_TREE_VIEW (window->treeview_find);
+ model = gtk_tree_view_get_model (view);
+
+ if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+ gtk_widget_set_sensitive (window->button_previous, FALSE);
+ gtk_widget_set_sensitive (window->button_next, FALSE);
+
+ empathy_chat_view_clear (window->chatview_find);
+
+ return;
+ }
+
+ gtk_widget_set_sensitive (window->button_previous, TRUE);
+ gtk_widget_set_sensitive (window->button_next, TRUE);
+
+ gtk_tree_model_get (model, &iter,
+ COL_FIND_ACCOUNT, &account,
+ COL_FIND_CHAT_ID, &chat_id,
+ COL_FIND_IS_CHATROOM, &is_chatroom,
+ COL_FIND_DATE, &date,
+ -1);
+
+ /* Clear all current messages shown in the textview */
+ empathy_chat_view_clear (window->chatview_find);
+
+ /* Turn off scrolling temporarily */
+ empathy_chat_view_scroll (window->chatview_find, FALSE);
+
+ /* Get messages */
+ messages = empathy_log_manager_get_messages_for_date (window->log_manager,
+ account,
+ chat_id,
+ is_chatroom,
+ date);
+ g_object_unref (account);
+ g_free (date);
+ g_free (chat_id);
+
+ for (l = messages; l; l = l->next) {
+ message = l->data;
+ empathy_chat_view_append_message (window->chatview_find, message);
+ g_object_unref (message);
+ }
+ g_list_free (messages);
+
+ /* Scroll to the most recent messages */
+ empathy_chat_view_scroll (window->chatview_find, TRUE);
+
+ /* Highlight and find messages */
+ empathy_chat_view_highlight (window->chatview_find,
+ window->last_find);
+ empathy_chat_view_find_next (window->chatview_find,
+ window->last_find,
+ TRUE);
+ empathy_chat_view_find_abilities (window->chatview_find,
+ window->last_find,
+ &can_do_previous,
+ &can_do_next);
+ gtk_widget_set_sensitive (window->button_previous, can_do_previous);
+ gtk_widget_set_sensitive (window->button_next, can_do_next);
+ gtk_widget_set_sensitive (window->button_find, FALSE);
+}
+
+static void
+log_window_find_populate (EmpathyLogWindow *window,
+ const gchar *search_criteria)
+{
+ GList *hits, *l;
+
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkListStore *store;
+ GtkTreeIter iter;
+
+ view = GTK_TREE_VIEW (window->treeview_find);
+ model = gtk_tree_view_get_model (view);
+ selection = gtk_tree_view_get_selection (view);
+ store = GTK_LIST_STORE (model);
+
+ empathy_chat_view_clear (window->chatview_find);
+
+ gtk_list_store_clear (store);
+
+ if (G_STR_EMPTY (search_criteria)) {
+ /* Just clear the search. */
+ return;
+ }
+
+ hits = empathy_log_manager_search_new (window->log_manager, search_criteria);
+
+ for (l = hits; l; l = l->next) {
+ EmpathyLogSearchHit *hit;
+ const gchar *account_name;
+ const gchar *account_icon;
+ gchar *date_readable;
+
+ hit = l->data;
+
+ /* Protect against invalid data (corrupt or old log files. */
+ if (!hit->account || !hit->chat_id) {
+ continue;
+ }
+
+ date_readable = empathy_log_manager_get_date_readable (hit->date);
+ account_name = mc_account_get_display_name (hit->account);
+ account_icon = empathy_icon_name_from_account (hit->account);
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_FIND_ACCOUNT_ICON, account_icon,
+ COL_FIND_ACCOUNT_NAME, account_name,
+ COL_FIND_ACCOUNT, hit->account,
+ COL_FIND_CHAT_NAME, hit->chat_id, /* FIXME */
+ COL_FIND_CHAT_ID, hit->chat_id,
+ COL_FIND_IS_CHATROOM, hit->is_chatroom,
+ COL_FIND_DATE, hit->date,
+ COL_FIND_DATE_READABLE, date_readable,
+ -1);
+
+ g_free (date_readable);
+
+ /* FIXME: Update COL_FIND_CHAT_NAME */
+ if (hit->is_chatroom) {
+ } else {
+ }
+ }
+
+ if (hits) {
+ empathy_log_manager_search_free (hits);
+ }
+}
+
+static void
+log_window_find_setup (EmpathyLogWindow *window)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeSortable *sortable;
+ GtkTreeViewColumn *column;
+ GtkListStore *store;
+ GtkCellRenderer *cell;
+ gint offset;
+
+ view = GTK_TREE_VIEW (window->treeview_find);
+ selection = gtk_tree_view_get_selection (view);
+
+ /* New store */
+ store = gtk_list_store_new (COL_FIND_COUNT,
+ G_TYPE_STRING, /* account icon name */
+ G_TYPE_STRING, /* account name */
+ MC_TYPE_ACCOUNT, /* account */
+ G_TYPE_STRING, /* chat name */
+ G_TYPE_STRING, /* chat id */
+ G_TYPE_BOOLEAN, /* is chatroom */
+ G_TYPE_STRING, /* date */
+ G_TYPE_STRING); /* date_readable */
+
+ model = GTK_TREE_MODEL (store);
+ sortable = GTK_TREE_SORTABLE (store);
+
+ gtk_tree_view_set_model (view, model);
+
+ /* New column */
+ column = gtk_tree_view_column_new ();
+
+ cell = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, cell, FALSE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "icon-name",
+ COL_FIND_ACCOUNT_ICON);
+
+ cell = gtk_cell_renderer_text_new ();
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "text",
+ COL_FIND_ACCOUNT_NAME);
+
+ gtk_tree_view_column_set_title (column, _("Account"));
+ gtk_tree_view_append_column (view, column);
+
+ gtk_tree_view_column_set_resizable (column, TRUE);
+ gtk_tree_view_column_set_clickable (column, TRUE);
+
+ cell = gtk_cell_renderer_text_new ();
+ offset = gtk_tree_view_insert_column_with_attributes (view, -1, _("Conversation"),
+ cell, "text", COL_FIND_CHAT_NAME,
+ NULL);
+
+ column = gtk_tree_view_get_column (view, offset - 1);
+ gtk_tree_view_column_set_sort_column_id (column, COL_FIND_CHAT_NAME);
+ gtk_tree_view_column_set_resizable (column, TRUE);
+ gtk_tree_view_column_set_clickable (column, TRUE);
+
+ cell = gtk_cell_renderer_text_new ();
+ offset = gtk_tree_view_insert_column_with_attributes (view, -1, _("Date"),
+ cell, "text", COL_FIND_DATE_READABLE,
+ NULL);
+
+ column = gtk_tree_view_get_column (view, offset - 1);
+ gtk_tree_view_column_set_sort_column_id (column, COL_FIND_DATE);
+ gtk_tree_view_column_set_resizable (column, TRUE);
+ gtk_tree_view_column_set_clickable (column, TRUE);
+
+ /* Set up treeview properties */
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+ gtk_tree_sortable_set_sort_column_id (sortable,
+ COL_FIND_DATE,
+ GTK_SORT_ASCENDING);
+
+ /* Set up signals */
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (log_window_find_changed_cb),
+ window);
+
+ g_object_unref (store);
+}
+
+static void
+log_window_button_find_clicked_cb (GtkWidget *widget,
+ EmpathyLogWindow *window)
+{
+ const gchar *str;
+
+ str = gtk_entry_get_text (GTK_ENTRY (window->entry_find));
+
+ /* Don't find the same crap again */
+ if (window->last_find && strcmp (window->last_find, str) == 0) {
+ return;
+ }
+
+ g_free (window->last_find);
+ window->last_find = g_strdup (str);
+
+ log_window_find_populate (window, str);
+}
+
+static void
+log_window_button_next_clicked_cb (GtkWidget *widget,
+ EmpathyLogWindow *window)
+{
+ if (window->last_find) {
+ gboolean can_do_previous;
+ gboolean can_do_next;
+
+ empathy_chat_view_find_next (window->chatview_find,
+ window->last_find,
+ FALSE);
+ empathy_chat_view_find_abilities (window->chatview_find,
+ window->last_find,
+ &can_do_previous,
+ &can_do_next);
+ gtk_widget_set_sensitive (window->button_previous, can_do_previous);
+ gtk_widget_set_sensitive (window->button_next, can_do_next);
+ }
+}
+
+static void
+log_window_button_previous_clicked_cb (GtkWidget *widget,
+ EmpathyLogWindow *window)
+{
+ if (window->last_find) {
+ gboolean can_do_previous;
+ gboolean can_do_next;
+
+ empathy_chat_view_find_previous (window->chatview_find,
+ window->last_find,
+ FALSE);
+ empathy_chat_view_find_abilities (window->chatview_find,
+ window->last_find,
+ &can_do_previous,
+ &can_do_next);
+ gtk_widget_set_sensitive (window->button_previous, can_do_previous);
+ gtk_widget_set_sensitive (window->button_next, can_do_next);
+ }
+}
+
+/*
+ * Chats Code
+ */
+
+static void
+log_window_chats_changed_cb (GtkTreeSelection *selection,
+ EmpathyLogWindow *window)
+{
+ /* Use last date by default */
+ gtk_calendar_clear_marks (GTK_CALENDAR (window->calendar_chats));
+
+ log_window_chats_get_messages (window, NULL);
+}
+
+static void
+log_window_chats_populate (EmpathyLogWindow *window)
+{
+ EmpathyAccountChooser *account_chooser;
+ McAccount *account;
+ GList *chats, *l;
+
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkListStore *store;
+ GtkTreeIter iter;
+
+ account_chooser = EMPATHY_ACCOUNT_CHOOSER (window->account_chooser_chats);
+ account = empathy_account_chooser_get_account (account_chooser);
+
+ view = GTK_TREE_VIEW (window->treeview_chats);
+ model = gtk_tree_view_get_model (view);
+ selection = gtk_tree_view_get_selection (view);
+ store = GTK_LIST_STORE (model);
+
+ /* Block signals to stop the logs being retrieved prematurely */
+ g_signal_handlers_block_by_func (selection,
+ log_window_chats_changed_cb,
+ window);
+
+ gtk_list_store_clear (store);
+
+ chats = empathy_log_manager_get_chats (window->log_manager, account);
+ for (l = chats; l; l = l->next) {
+ EmpathyLogSearchHit *hit;
+
+ hit = l->data;
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_CHAT_ICON, "empathy-available", /* FIXME */
+ COL_CHAT_NAME, hit->chat_id,
+ COL_CHAT_ACCOUNT, account,
+ COL_CHAT_ID, hit->chat_id,
+ COL_CHAT_IS_CHATROOM, hit->is_chatroom,
+ -1);
+
+ /* FIXME: Update COL_CHAT_ICON/NAME */
+ if (hit->is_chatroom) {
+ } else {
+ }
+ }
+ empathy_log_manager_search_free (chats);
+
+ /* Unblock signals */
+ g_signal_handlers_unblock_by_func (selection,
+ log_window_chats_changed_cb,
+ window);
+
+
+ g_object_unref (account);
+}
+
+static void
+log_window_chats_setup (EmpathyLogWindow *window)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeSortable *sortable;
+ GtkTreeViewColumn *column;
+ GtkListStore *store;
+ GtkCellRenderer *cell;
+
+ view = GTK_TREE_VIEW (window->treeview_chats);
+ selection = gtk_tree_view_get_selection (view);
+
+ /* new store */
+ store = gtk_list_store_new (COL_CHAT_COUNT,
+ G_TYPE_STRING, /* icon */
+ G_TYPE_STRING, /* name */
+ MC_TYPE_ACCOUNT, /* account */
+ G_TYPE_STRING, /* id */
+ G_TYPE_BOOLEAN); /* is chatroom */
+
+ model = GTK_TREE_MODEL (store);
+ sortable = GTK_TREE_SORTABLE (store);
+
+ gtk_tree_view_set_model (view, model);
+
+ /* new column */
+ column = gtk_tree_view_column_new ();
+
+ cell = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, cell, FALSE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "icon-name",
+ COL_CHAT_ICON);
+
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell, "ellipsize", PANGO_ELLIPSIZE_END, NULL);
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_add_attribute (column, cell,
+ "text",
+ COL_CHAT_NAME);
+
+ gtk_tree_view_append_column (view, column);
+
+ /* set up treeview properties */
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+ gtk_tree_sortable_set_sort_column_id (sortable,
+ COL_CHAT_NAME,
+ GTK_SORT_ASCENDING);
+
+ /* set up signals */
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (log_window_chats_changed_cb),
+ window);
+
+ g_object_unref (store);
+}
+
+static void
+log_window_chats_accounts_changed_cb (GtkWidget *combobox,
+ EmpathyLogWindow *window)
+{
+ /* Clear all current messages shown in the textview */
+ empathy_chat_view_clear (window->chatview_chats);
+
+ log_window_chats_populate (window);
+}
+
+static void
+log_window_chats_set_selected (EmpathyLogWindow *window,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean is_chatroom)
+{
+ EmpathyAccountChooser *account_chooser;
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ gboolean ok;
+
+ account_chooser = EMPATHY_ACCOUNT_CHOOSER (window->account_chooser_chats);
+ empathy_account_chooser_set_account (account_chooser, account);
+
+ view = GTK_TREE_VIEW (window->treeview_chats);
+ model = gtk_tree_view_get_model (view);
+ selection = gtk_tree_view_get_selection (view);
+
+ if (!gtk_tree_model_get_iter_first (model, &iter)) {
+ return;
+ }
+
+ for (ok = TRUE; ok; ok = gtk_tree_model_iter_next (model, &iter)) {
+ McAccount *this_account;
+ gchar *this_chat_id;
+ gboolean this_is_chatroom;
+
+ gtk_tree_model_get (model, &iter,
+ COL_CHAT_ACCOUNT, &this_account,
+ COL_CHAT_ID, &this_chat_id,
+ COL_CHAT_IS_CHATROOM, &this_is_chatroom,
+ -1);
+
+ if (empathy_account_equal (this_account, account) &&
+ strcmp (this_chat_id, chat_id) == 0 &&
+ this_is_chatroom == is_chatroom) {
+ gtk_tree_selection_select_iter (selection, &iter);
+ path = gtk_tree_model_get_path (model, &iter);
+ gtk_tree_view_scroll_to_cell (view, path, NULL, TRUE, 0.5, 0.0);
+ gtk_tree_path_free (path);
+ g_object_unref (this_account);
+ g_free (this_chat_id);
+ break;
+ }
+
+ g_object_unref (this_account);
+ g_free (this_chat_id);
+ }
+}
+
+static gboolean
+log_window_chats_get_selected (EmpathyLogWindow *window,
+ McAccount **account,
+ gchar **chat_id,
+ gboolean *is_chatroom)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ gchar *id = NULL;
+ McAccount *acc = NULL;
+ gboolean room = FALSE;
+
+ view = GTK_TREE_VIEW (window->treeview_chats);
+ model = gtk_tree_view_get_model (view);
+ selection = gtk_tree_view_get_selection (view);
+
+ if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) {
+ return FALSE;
+ }
+
+ gtk_tree_model_get (model, &iter,
+ COL_CHAT_ACCOUNT, &acc,
+ COL_CHAT_ID, &id,
+ COL_CHAT_IS_CHATROOM, &room,
+ -1);
+
+ if (chat_id) {
+ *chat_id = id;
+ } else {
+ g_free (id);
+ }
+ if (account) {
+ *account = acc;
+ } else {
+ g_object_unref (acc);
+ }
+ if (is_chatroom) {
+ *is_chatroom = room;
+ }
+
+ return TRUE;
+}
+
+static void
+log_window_chats_get_messages (EmpathyLogWindow *window,
+ const gchar *date_to_show)
+{
+ McAccount *account;
+ gchar *chat_id;
+ gboolean is_chatroom;
+ EmpathyMessage *message;
+ GList *messages;
+ GList *dates = NULL;
+ GList *l;
+ const gchar *date;
+ guint year_selected;
+ guint year;
+ guint month;
+ guint month_selected;
+ guint day;
+
+ if (!log_window_chats_get_selected (window, &account,
+ &chat_id, &is_chatroom)) {
+ return;
+ }
+
+ g_signal_handlers_block_by_func (window->calendar_chats,
+ log_window_calendar_chats_day_selected_cb,
+ window);
+
+ /* Either use the supplied date or get the last */
+ date = date_to_show;
+ if (!date) {
+ gboolean day_selected = FALSE;
+
+ /* Get a list of dates and show them on the calendar */
+ dates = empathy_log_manager_get_dates (window->log_manager,
+ account, chat_id,
+ is_chatroom);
+
+ for (l = dates; l; l = l->next) {
+ const gchar *str;
+
+ str = l->data;
+ if (!str) {
+ continue;
+ }
+
+ sscanf (str, "%4d%2d%2d", &year, &month, &day);
+ gtk_calendar_get_date (GTK_CALENDAR (window->calendar_chats),
+ &year_selected,
+ &month_selected,
+ NULL);
+
+ month_selected++;
+
+ if (!l->next) {
+ date = str;
+ }
+
+ if (year != year_selected || month != month_selected) {
+ continue;
+ }
+
+
+ DEBUG ("Marking date:'%s'", str);
+ gtk_calendar_mark_day (GTK_CALENDAR (window->calendar_chats), day);
+
+ if (l->next) {
+ continue;
+ }
+
+ day_selected = TRUE;
+
+ gtk_calendar_select_day (GTK_CALENDAR (window->calendar_chats), day);
+ }
+
+ if (!day_selected) {
+ /* Unselect the day in the calendar */
+ gtk_calendar_select_day (GTK_CALENDAR (window->calendar_chats), 0);
+ }
+ } else {
+ sscanf (date, "%4d%2d%2d", &year, &month, &day);
+ gtk_calendar_get_date (GTK_CALENDAR (window->calendar_chats),
+ &year_selected,
+ &month_selected,
+ NULL);
+
+ month_selected++;
+
+ if (year != year_selected && month != month_selected) {
+ day = 0;
+ }
+
+ gtk_calendar_select_day (GTK_CALENDAR (window->calendar_chats), day);
+ }
+
+ g_signal_handlers_unblock_by_func (window->calendar_chats,
+ log_window_calendar_chats_day_selected_cb,
+ window);
+
+ if (!date) {
+ goto OUT;
+ }
+
+ /* Clear all current messages shown in the textview */
+ empathy_chat_view_clear (window->chatview_chats);
+
+ /* Turn off scrolling temporarily */
+ empathy_chat_view_scroll (window->chatview_find, FALSE);
+
+ /* Get messages */
+ messages = empathy_log_manager_get_messages_for_date (window->log_manager,
+ account, chat_id,
+ is_chatroom,
+ date);
+
+ for (l = messages; l; l = l->next) {
+ message = l->data;
+
+ empathy_chat_view_append_message (window->chatview_chats,
+ message);
+ g_object_unref (message);
+ }
+ g_list_free (messages);
+
+ /* Turn back on scrolling */
+ empathy_chat_view_scroll (window->chatview_find, TRUE);
+
+ /* Give the search entry main focus */
+ gtk_widget_grab_focus (window->entry_chats);
+
+OUT:
+ g_list_foreach (dates, (GFunc) g_free, NULL);
+ g_list_free (dates);
+ g_object_unref (account);
+ g_free (chat_id);
+}
+
+static void
+log_window_calendar_chats_day_selected_cb (GtkWidget *calendar,
+ EmpathyLogWindow *window)
+{
+ guint year;
+ guint month;
+ guint day;
+
+ gchar *date;
+
+ gtk_calendar_get_date (GTK_CALENDAR (calendar), &year, &month, &day);
+
+ /* We need this hear because it appears that the months start from 0 */
+ month++;
+
+ date = g_strdup_printf ("%4.4d%2.2d%2.2d", year, month, day);
+
+ DEBUG ("Currently selected date is:'%s'", date);
+
+ log_window_chats_get_messages (window, date);
+
+ g_free (date);
+}
+
+static void
+log_window_calendar_chats_month_changed_cb (GtkWidget *calendar,
+ EmpathyLogWindow *window)
+{
+ McAccount *account;
+ gchar *chat_id;
+ gboolean is_chatroom;
+ guint year_selected;
+ guint month_selected;
+
+ GList *dates;
+ GList *l;
+
+ gtk_calendar_clear_marks (GTK_CALENDAR (calendar));
+
+ if (!log_window_chats_get_selected (window, &account,
+ &chat_id, &is_chatroom)) {
+ DEBUG ("No chat selected to get dates for...");
+ return;
+ }
+
+ g_object_get (calendar,
+ "month", &month_selected,
+ "year", &year_selected,
+ NULL);
+
+ /* We need this hear because it appears that the months start from 0 */
+ month_selected++;
+
+ /* Get the log object for this contact */
+ dates = empathy_log_manager_get_dates (window->log_manager, account,
+ chat_id, is_chatroom);
+ g_object_unref (account);
+ g_free (chat_id);
+
+ for (l = dates; l; l = l->next) {
+ const gchar *str;
+ guint year;
+ guint month;
+ guint day;
+
+ str = l->data;
+ if (!str) {
+ continue;
+ }
+
+ sscanf (str, "%4d%2d%2d", &year, &month, &day);
+
+ if (year == year_selected && month == month_selected) {
+ DEBUG ("Marking date:'%s'", str);
+ gtk_calendar_mark_day (GTK_CALENDAR (window->calendar_chats), day);
+ }
+ }
+
+ g_list_foreach (dates, (GFunc) g_free, NULL);
+ g_list_free (dates);
+
+ DEBUG ("Currently showing month %d and year %d", month_selected,
+ year_selected);
+}
+
+static void
+log_window_entry_chats_changed_cb (GtkWidget *entry,
+ EmpathyLogWindow *window)
+{
+ const gchar *str;
+
+ str = gtk_entry_get_text (GTK_ENTRY (window->entry_chats));
+ empathy_chat_view_highlight (window->chatview_chats, str);
+
+ if (str) {
+ empathy_chat_view_find_next (window->chatview_chats,
+ str,
+ TRUE);
+ }
+}
+
+static void
+log_window_entry_chats_activate_cb (GtkWidget *entry,
+ EmpathyLogWindow *window)
+{
+ const gchar *str;
+
+ str = gtk_entry_get_text (GTK_ENTRY (window->entry_chats));
+
+ if (str) {
+ empathy_chat_view_find_next (window->chatview_chats,
+ str,
+ FALSE);
+ }
+}
+
diff --git a/trunk/libempathy-gtk/empathy-log-window.glade b/trunk/libempathy-gtk/empathy-log-window.glade
new file mode 100644
index 000000000..9da6fa7a2
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-log-window.glade
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="log_window">
+ <property name="title" translatable="yes">Previous Conversations</property>
+ <property name="default_width">640</property>
+ <property name="default_height">450</property>
+ <property name="icon_name">document-open-recent</property>
+ <child>
+ <widget class="GtkNotebook" id="notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="border_width">2</property>
+ <child>
+ <widget class="GtkVBox" id="vbox192">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox144">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <widget class="GtkLabel" id="label628">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Searching *for* something">_For:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_find</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_find">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="activates_default">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_find">
+ <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="label">gtk-find</property>
+ <property name="use_stock">True</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVPaned" id="vpaned1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="position">120</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow14">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview_find">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="enable_search">False</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox215">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow_find">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox171">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_previous">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-go-back</property>
+ <property name="use_stock">True</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_next">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-go-forward</property>
+ <property name="use_stock">True</property>
+ <property name="focus_on_click">False</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label595">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Tab Label">Search</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkTable" id="table7">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_chats">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow_chats">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox191">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow13">
+ <property name="width_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview_chats">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkCalendar" id="calendar_chats">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox143">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkImage" id="image247">
+ <property name="visible">True</property>
+ <property name="stock">gtk-find</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_chats">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="activates_default">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label596">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes" comments="Tab Label">Conversations</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-log-window.h b/trunk/libempathy-gtk/empathy-log-window.h
new file mode 100644
index 000000000..266e0c30c
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-log-window.h
@@ -0,0 +1,39 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_LOG_WINDOW_H__
+#define __EMPATHY_LOG_WINDOW_H__
+
+#include <libmissioncontrol/mc-account.h>
+
+G_BEGIN_DECLS
+
+GtkWidget * empathy_log_window_show (McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom,
+ GtkWindow *parent);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_LOG_WINDOW_H__ */
diff --git a/trunk/libempathy-gtk/empathy-new-message-dialog.c b/trunk/libempathy-gtk/empathy-new-message-dialog.c
new file mode 100644
index 000000000..b07f13e21
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-new-message-dialog.c
@@ -0,0 +1,161 @@
+/* -*- 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 <stdlib.h>
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include <glib/gi18n.h>
+
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mission-control.h>
+
+#include <libempathy/empathy-contact-factory.h>
+#include <libempathy/empathy-utils.h>
+
+#include <libempathy-gtk/empathy-ui-utils.h>
+
+#include "empathy-new-message-dialog.h"
+#include "empathy-account-chooser.h"
+
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *table_contact;
+ GtkWidget *account_chooser;
+ GtkWidget *entry_id;
+ GtkWidget *button_chat;
+ GtkWidget *button_call;
+} EmpathyNewMessageDialog;
+
+static void
+new_message_dialog_response_cb (GtkWidget *widget,
+ gint response,
+ EmpathyNewMessageDialog *dialog)
+{
+ McAccount *account;
+ const gchar *id;
+
+ account = empathy_account_chooser_get_account (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser));
+ id = gtk_entry_get_text (GTK_ENTRY (dialog->entry_id));
+ if (!account || G_STR_EMPTY (id)) {
+ if (account) {
+ g_object_unref (account);
+ }
+ gtk_widget_destroy (widget);
+ return;
+ }
+
+ if (response == 1) {
+ empathy_call_with_contact_id (account, id);
+ }
+ else if (response == 2) {
+ empathy_chat_with_contact_id (account, id);
+ }
+
+ g_object_unref (account);
+ gtk_widget_destroy (widget);
+}
+
+static void
+new_message_change_state_button_cb (GtkEditable *editable,
+ EmpathyNewMessageDialog *dialog)
+{
+ const gchar *id;
+ gboolean sensitive;
+
+ id = gtk_entry_get_text (GTK_ENTRY (editable));
+ sensitive = !G_STR_EMPTY (id);
+
+ gtk_widget_set_sensitive (dialog->button_chat, sensitive);
+ gtk_widget_set_sensitive (dialog->button_call, sensitive);
+}
+
+static void
+new_message_dialog_destroy_cb (GtkWidget *widget,
+ EmpathyNewMessageDialog *dialog)
+{
+ g_free (dialog);
+}
+
+GtkWidget *
+empathy_new_message_dialog_show (GtkWindow *parent)
+{
+ static EmpathyNewMessageDialog *dialog = NULL;
+ GladeXML *glade;
+ gchar *filename;
+
+ if (dialog) {
+ gtk_window_present (GTK_WINDOW (dialog->dialog));
+ return dialog->dialog;
+ }
+
+ dialog = g_new0 (EmpathyNewMessageDialog, 1);
+
+ filename = empathy_file_lookup ("empathy-new-message-dialog.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "new_message_dialog",
+ NULL,
+ "new_message_dialog", &dialog->dialog,
+ "table_contact", &dialog->table_contact,
+ "entry_id", &dialog->entry_id,
+ "button_chat", &dialog->button_chat,
+ "button_call",&dialog->button_call,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ dialog,
+ "new_message_dialog", "destroy", new_message_dialog_destroy_cb,
+ "new_message_dialog", "response", new_message_dialog_response_cb,
+ "entry_id", "changed", new_message_change_state_button_cb,
+ NULL);
+
+ g_object_add_weak_pointer (G_OBJECT (dialog->dialog), (gpointer) &dialog);
+
+ g_object_unref (glade);
+
+ /* Create account chooser */
+ dialog->account_chooser = empathy_account_chooser_new ();
+ gtk_table_attach_defaults (GTK_TABLE (dialog->table_contact),
+ dialog->account_chooser,
+ 1, 2, 0, 1);
+ empathy_account_chooser_set_filter (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser),
+ empathy_account_chooser_filter_is_connected,
+ NULL);
+ gtk_widget_show (dialog->account_chooser);
+
+ if (parent) {
+ gtk_window_set_transient_for (GTK_WINDOW (dialog->dialog),
+ GTK_WINDOW (parent));
+ }
+
+ gtk_widget_set_sensitive (dialog->button_chat, FALSE);
+ gtk_widget_set_sensitive (dialog->button_call, FALSE);
+
+ gtk_widget_show (dialog->dialog);
+
+ return dialog->dialog;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-new-message-dialog.glade b/trunk/libempathy-gtk/empathy-new-message-dialog.glade
new file mode 100644
index 000000000..cfffc003c
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-new-message-dialog.glade
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkDialog" id="new_message_dialog">
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">New Conversation</property>
+ <property name="resizable">False</property>
+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox1">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkTable" id="table_contact">
+ <property name="visible">True</property>
+ <property name="n_rows">2</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Account:</property>
+ </widget>
+ <packing>
+ <property name="x_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Contact ID:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_id">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area1">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_call">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="response_id">1</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="icon_name">audio-input-microphone</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Call</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_chat">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="response_id">2</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment2">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox2">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkImage" id="image2">
+ <property name="visible">True</property>
+ <property name="icon_name">im-message-new</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Chat</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-new-message-dialog.h b/trunk/libempathy-gtk/empathy-new-message-dialog.h
new file mode 100644
index 000000000..c1781d0cf
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-new-message-dialog.h
@@ -0,0 +1,33 @@
+/* -*- 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_NEW_MESSAGE_DIALOG_H__
+#define __EMPATHY_NEW_MESSAGE_DIALOG_H__
+
+#include <gtk/gtkwidget.h>
+
+G_BEGIN_DECLS
+
+GtkWidget *empathy_new_message_dialog_show (GtkWindow *parent);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_NEW_MESSAGE_DIALOG_H__ */
diff --git a/trunk/libempathy-gtk/empathy-presence-chooser.c b/trunk/libempathy-gtk/empathy-presence-chooser.c
new file mode 100644
index 000000000..0af2238df
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-presence-chooser.c
@@ -0,0 +1,974 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+#include <telepathy-glib/util.h>
+#include <libmissioncontrol/mc-enum-types.h>
+
+#include <libempathy/empathy-idle.h>
+#include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-status-presets.h>
+
+#include "empathy-ui-utils.h"
+#include "empathy-images.h"
+#include "empathy-presence-chooser.h"
+
+/* Flashing delay for icons (milliseconds). */
+#define FLASH_TIMEOUT 500
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyPresenceChooser)
+typedef struct {
+ EmpathyIdle *idle;
+
+ GtkWidget *hbox;
+ GtkWidget *image;
+ GtkWidget *label;
+ GtkWidget *menu;
+
+ McPresence last_state;
+
+ McPresence flash_state_1;
+ McPresence flash_state_2;
+ guint flash_timeout_id;
+
+ /* The handle the kind of unnessecary scroll support. */
+ guint scroll_timeout_id;
+ McPresence scroll_state;
+ gchar *scroll_status;
+} EmpathyPresenceChooserPriv;
+
+typedef struct {
+ GtkWidget *dialog;
+ GtkWidget *checkbutton_save;
+ GtkWidget *comboboxentry_message;
+ GtkWidget *entry_message;
+ GtkWidget *combobox_status;
+ GtkTreeModel *model_status;
+} CustomMessageDialog;
+
+enum {
+ COL_ICON,
+ COL_LABEL,
+ COL_PRESENCE,
+ COL_COUNT
+};
+
+typedef struct {
+ McPresence state;
+ const gchar *status;
+} StateAndStatus;
+
+static CustomMessageDialog *message_dialog = NULL;
+/* States to be listed in the menu.
+ * Each state has a boolean telling if it can have custom message */
+static guint states[] = {MC_PRESENCE_AVAILABLE, TRUE,
+ MC_PRESENCE_DO_NOT_DISTURB, TRUE,
+ MC_PRESENCE_AWAY, TRUE,
+ MC_PRESENCE_HIDDEN, FALSE,
+ MC_PRESENCE_OFFLINE, FALSE};
+
+static void presence_chooser_finalize (GObject *object);
+static void presence_chooser_presence_changed_cb (EmpathyPresenceChooser *chooser);
+static void presence_chooser_reset_scroll_timeout (EmpathyPresenceChooser *chooser);
+static gboolean presence_chooser_scroll_timeout_cb (EmpathyPresenceChooser *chooser);
+static gboolean presence_chooser_scroll_event_cb (EmpathyPresenceChooser *chooser,
+ GdkEventScroll *event,
+ gpointer user_data);
+static GList * presence_chooser_get_presets (EmpathyPresenceChooser *chooser);
+static StateAndStatus *presence_chooser_state_and_status_new (McPresence state,
+ const gchar *status);
+static gboolean presence_chooser_flash_timeout_cb (EmpathyPresenceChooser *chooser);
+static void presence_chooser_flash_start (EmpathyPresenceChooser *chooser,
+ McPresence state_1,
+ McPresence state_2);
+static void presence_chooser_flash_stop (EmpathyPresenceChooser *chooser,
+ McPresence state);
+static gboolean presence_chooser_button_press_event_cb (GtkWidget *chooser,
+ GdkEventButton *event,
+ gpointer user_data);
+static void presence_chooser_toggled_cb (GtkWidget *chooser,
+ gpointer user_data);
+static void presence_chooser_menu_popup (EmpathyPresenceChooser *chooser);
+static void presence_chooser_menu_popdown (EmpathyPresenceChooser *chooser);
+static void presence_chooser_menu_selection_done_cb (GtkMenuShell *menushell,
+ EmpathyPresenceChooser *chooser);
+static void presence_chooser_menu_destroy_cb (GtkWidget *menu,
+ EmpathyPresenceChooser *chooser);
+static void presence_chooser_menu_detach (GtkWidget *attach_widget,
+ GtkMenu *menu);
+static void presence_chooser_menu_align_func (GtkMenu *menu,
+ gint *x,
+ gint *y,
+ gboolean *push_in,
+ GtkWidget *widget);
+static void presence_chooser_menu_add_item (GtkWidget *menu,
+ const gchar *str,
+ McPresence state);
+static void presence_chooser_noncustom_activate_cb (GtkWidget *item,
+ gpointer user_data);
+static void presence_chooser_set_state (McPresence state,
+ const gchar *status);
+static void presence_chooser_custom_activate_cb (GtkWidget *item,
+ gpointer user_data);
+static void presence_chooser_dialog_show (void);
+
+G_DEFINE_TYPE (EmpathyPresenceChooser, empathy_presence_chooser, GTK_TYPE_TOGGLE_BUTTON);
+
+static void
+empathy_presence_chooser_class_init (EmpathyPresenceChooserClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = presence_chooser_finalize;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyPresenceChooserPriv));
+}
+
+static void
+empathy_presence_chooser_init (EmpathyPresenceChooser *chooser)
+{
+ GtkWidget *arrow;
+ GtkWidget *alignment;
+ EmpathyPresenceChooserPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (chooser,
+ EMPATHY_TYPE_PRESENCE_CHOOSER, EmpathyPresenceChooserPriv);
+
+ chooser->priv = priv;
+ gtk_button_set_relief (GTK_BUTTON (chooser), GTK_RELIEF_NONE);
+ gtk_button_set_focus_on_click (GTK_BUTTON (chooser), FALSE);
+
+ alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
+ gtk_widget_show (alignment);
+ gtk_container_add (GTK_CONTAINER (chooser), alignment);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), 0, 0, 1, 0);
+
+ priv->hbox = gtk_hbox_new (FALSE, 1);
+ gtk_widget_show (priv->hbox);
+ gtk_container_add (GTK_CONTAINER (alignment), priv->hbox);
+
+ priv->image = gtk_image_new ();
+ gtk_widget_show (priv->image);
+ gtk_box_pack_start (GTK_BOX (priv->hbox), priv->image, FALSE, TRUE, 0);
+
+ priv->label = gtk_label_new (NULL);
+ gtk_widget_show (priv->label);
+ gtk_box_pack_start (GTK_BOX (priv->hbox), priv->label, TRUE, TRUE, 0);
+ gtk_label_set_ellipsize (GTK_LABEL (priv->label), PANGO_ELLIPSIZE_END);
+ gtk_misc_set_alignment (GTK_MISC (priv->label), 0, 0.5);
+ gtk_misc_set_padding (GTK_MISC (priv->label), 4, 1);
+
+ alignment = gtk_alignment_new (0.5, 0.5, 1, 1);
+ gtk_widget_show (alignment);
+ gtk_box_pack_start (GTK_BOX (priv->hbox), alignment, FALSE, FALSE, 0);
+
+ arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT);
+ gtk_widget_show (arrow);
+ gtk_container_add (GTK_CONTAINER (alignment), arrow);
+
+ g_signal_connect (chooser, "toggled",
+ G_CALLBACK (presence_chooser_toggled_cb),
+ NULL);
+ g_signal_connect (chooser, "button-press-event",
+ G_CALLBACK (presence_chooser_button_press_event_cb),
+ NULL);
+ g_signal_connect (chooser, "scroll-event",
+ G_CALLBACK (presence_chooser_scroll_event_cb),
+ NULL);
+
+ priv->idle = empathy_idle_new ();
+ presence_chooser_presence_changed_cb (chooser);
+ g_signal_connect_swapped (priv->idle, "notify",
+ G_CALLBACK (presence_chooser_presence_changed_cb),
+ chooser);
+}
+
+static void
+presence_chooser_finalize (GObject *object)
+{
+ EmpathyPresenceChooserPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ if (priv->flash_timeout_id) {
+ g_source_remove (priv->flash_timeout_id);
+ }
+
+ if (priv->scroll_timeout_id) {
+ g_source_remove (priv->scroll_timeout_id);
+ }
+
+ g_signal_handlers_disconnect_by_func (priv->idle,
+ presence_chooser_presence_changed_cb,
+ object);
+ g_object_unref (priv->idle);
+
+ G_OBJECT_CLASS (empathy_presence_chooser_parent_class)->finalize (object);
+}
+
+GtkWidget *
+empathy_presence_chooser_new (void)
+{
+ GtkWidget *chooser;
+
+ chooser = g_object_new (EMPATHY_TYPE_PRESENCE_CHOOSER, NULL);
+
+ return chooser;
+}
+
+static void
+presence_chooser_presence_changed_cb (EmpathyPresenceChooser *chooser)
+{
+ EmpathyPresenceChooserPriv *priv;
+ McPresence state;
+ McPresence flash_state;
+ const gchar *status;
+
+ priv = GET_PRIV (chooser);
+
+ state = empathy_idle_get_state (priv->idle);
+ status = empathy_idle_get_status (priv->idle);
+ flash_state = empathy_idle_get_flash_state (priv->idle);
+
+ presence_chooser_reset_scroll_timeout (chooser);
+ gtk_label_set_text (GTK_LABEL (priv->label), status);
+
+ if (flash_state != MC_PRESENCE_UNSET) {
+ presence_chooser_flash_start (chooser, state, flash_state);
+ } else {
+ presence_chooser_flash_stop (chooser, state);
+ }
+}
+
+static void
+presence_chooser_reset_scroll_timeout (EmpathyPresenceChooser *chooser)
+{
+ EmpathyPresenceChooserPriv *priv;
+
+ priv = GET_PRIV (chooser);
+
+ if (priv->scroll_timeout_id) {
+ g_source_remove (priv->scroll_timeout_id);
+ priv->scroll_timeout_id = 0;
+ }
+
+ g_free (priv->scroll_status);
+ priv->scroll_status = NULL;
+}
+
+static gboolean
+presence_chooser_scroll_timeout_cb (EmpathyPresenceChooser *chooser)
+{
+ EmpathyPresenceChooserPriv *priv;
+
+ priv = GET_PRIV (chooser);
+
+ priv->scroll_timeout_id = 0;
+
+ empathy_idle_set_presence (priv->idle,
+ priv->scroll_state,
+ priv->scroll_status);
+
+ g_free (priv->scroll_status);
+ priv->scroll_status = NULL;
+
+ return FALSE;
+}
+
+static gboolean
+presence_chooser_scroll_event_cb (EmpathyPresenceChooser *chooser,
+ GdkEventScroll *event,
+ gpointer user_data)
+{
+ EmpathyPresenceChooserPriv *priv;
+ GList *list, *l;
+ const gchar *current_status;
+ StateAndStatus *sas;
+ gboolean match;
+
+ priv = GET_PRIV (chooser);
+
+ switch (event->direction) {
+ case GDK_SCROLL_UP:
+ break;
+ case GDK_SCROLL_DOWN:
+ break;
+ default:
+ return FALSE;
+ }
+
+ current_status = gtk_label_get_text (GTK_LABEL (priv->label));
+
+ /* Get the list of presets, which in this context means all the items
+ * without a trailing "...".
+ */
+ list = presence_chooser_get_presets (chooser);
+ sas = NULL;
+ match = FALSE;
+ for (l = list; l; l = l->next) {
+ sas = l->data;
+
+ if (sas->state == priv->last_state &&
+ strcmp (sas->status, current_status) == 0) {
+ sas = NULL;
+ match = TRUE;
+ if (event->direction == GDK_SCROLL_UP) {
+ if (l->prev) {
+ sas = l->prev->data;
+ }
+ }
+ else if (event->direction == GDK_SCROLL_DOWN) {
+ if (l->next) {
+ sas = l->next->data;
+ }
+ }
+ break;
+ }
+
+ sas = NULL;
+ }
+
+ if (sas) {
+ presence_chooser_reset_scroll_timeout (chooser);
+
+ priv->scroll_status = g_strdup (sas->status);
+ priv->scroll_state = sas->state;
+
+ priv->scroll_timeout_id =
+ g_timeout_add_seconds (1,
+ (GSourceFunc) presence_chooser_scroll_timeout_cb,
+ chooser);
+
+ presence_chooser_flash_stop (chooser, sas->state);
+ gtk_label_set_text (GTK_LABEL (priv->label), sas->status);
+ }
+ else if (!match) {
+ const gchar *status;
+ /* If we didn't get any match at all, it means the last state
+ * was a custom one. Just switch to the first one.
+ */
+ status = empathy_presence_get_default_message (states[0]);
+
+ presence_chooser_reset_scroll_timeout (chooser);
+ empathy_idle_set_presence (priv->idle, states[0], status);
+ }
+
+ g_list_foreach (list, (GFunc) g_free, NULL);
+ g_list_free (list);
+
+ return TRUE;
+}
+
+static GList *
+presence_chooser_get_presets (EmpathyPresenceChooser *chooser)
+{
+ GList *list = NULL;
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (states); i += 2) {
+ GList *presets, *p;
+ StateAndStatus *sas;
+ const gchar *status;
+
+ status = empathy_presence_get_default_message (states[i]);
+ sas = presence_chooser_state_and_status_new (states[i], status);
+ list = g_list_prepend (list, sas);
+
+ /* Go to next state if we don't want messages for that state */
+ if (!states[i+1]) {
+ continue;
+ }
+
+ presets = empathy_status_presets_get (states[i], 5);
+ for (p = presets; p; p = p->next) {
+ sas = presence_chooser_state_and_status_new (states[i], p->data);
+ list = g_list_prepend (list, sas);
+ }
+ g_list_free (presets);
+ }
+ list = g_list_reverse (list);
+
+ return list;
+}
+
+static StateAndStatus *
+presence_chooser_state_and_status_new (McPresence state,
+ const gchar *status)
+{
+ StateAndStatus *sas;
+
+ sas = g_new0 (StateAndStatus, 1);
+
+ sas->state = state;
+ sas->status = status;
+
+ return sas;
+}
+
+static gboolean
+presence_chooser_flash_timeout_cb (EmpathyPresenceChooser *chooser)
+{
+ EmpathyPresenceChooserPriv *priv;
+ McPresence state;
+ static gboolean on = FALSE;
+
+ priv = GET_PRIV (chooser);
+
+ if (on) {
+ state = priv->flash_state_1;
+ } else {
+ state = priv->flash_state_2;
+ }
+
+ gtk_image_set_from_icon_name (GTK_IMAGE (priv->image),
+ empathy_icon_name_for_presence (state),
+ GTK_ICON_SIZE_MENU);
+
+ on = !on;
+
+ return TRUE;
+}
+
+static void
+presence_chooser_flash_start (EmpathyPresenceChooser *chooser,
+ McPresence state_1,
+ McPresence state_2)
+{
+ EmpathyPresenceChooserPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_PRESENCE_CHOOSER (chooser));
+
+ priv = GET_PRIV (chooser);
+
+ priv->flash_state_1 = state_1;
+ priv->flash_state_2 = state_2;
+
+ if (!priv->flash_timeout_id) {
+ priv->flash_timeout_id = g_timeout_add (FLASH_TIMEOUT,
+ (GSourceFunc) presence_chooser_flash_timeout_cb,
+ chooser);
+ }
+}
+
+static void
+presence_chooser_flash_stop (EmpathyPresenceChooser *chooser,
+ McPresence state)
+{
+ EmpathyPresenceChooserPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_PRESENCE_CHOOSER (chooser));
+
+ priv = GET_PRIV (chooser);
+
+ if (priv->flash_timeout_id) {
+ g_source_remove (priv->flash_timeout_id);
+ priv->flash_timeout_id = 0;
+ }
+
+ gtk_image_set_from_icon_name (GTK_IMAGE (priv->image),
+ empathy_icon_name_for_presence (state),
+ GTK_ICON_SIZE_MENU);
+
+ priv->last_state = state;
+}
+
+static gboolean
+presence_chooser_button_press_event_cb (GtkWidget *chooser,
+ GdkEventButton *event,
+ gpointer user_data)
+{
+ if (event->button != 1 || event->type != GDK_BUTTON_PRESS) {
+ return FALSE;
+ }
+
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chooser))) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chooser), TRUE);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+presence_chooser_toggled_cb (GtkWidget *chooser,
+ gpointer user_data)
+{
+ if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (chooser))) {
+ presence_chooser_menu_popup (EMPATHY_PRESENCE_CHOOSER (chooser));
+ } else {
+ presence_chooser_menu_popdown (EMPATHY_PRESENCE_CHOOSER (chooser));
+ }
+}
+
+static void
+presence_chooser_menu_popup (EmpathyPresenceChooser *chooser)
+{
+ EmpathyPresenceChooserPriv *priv;
+ GtkWidget *menu;
+
+ priv = GET_PRIV (chooser);
+
+ if (priv->menu) {
+ return;
+ }
+
+ menu = empathy_presence_chooser_create_menu ();
+
+ g_signal_connect_after (menu, "selection-done",
+ G_CALLBACK (presence_chooser_menu_selection_done_cb),
+ chooser);
+
+ g_signal_connect (menu, "destroy",
+ G_CALLBACK (presence_chooser_menu_destroy_cb),
+ chooser);
+
+ gtk_menu_attach_to_widget (GTK_MENU (menu),
+ GTK_WIDGET (chooser),
+ presence_chooser_menu_detach);
+
+ gtk_menu_popup (GTK_MENU (menu),
+ NULL, NULL,
+ (GtkMenuPositionFunc) presence_chooser_menu_align_func,
+ chooser,
+ 1,
+ gtk_get_current_event_time ());
+
+ priv->menu = menu;
+}
+
+static void
+presence_chooser_menu_popdown (EmpathyPresenceChooser *chooser)
+{
+ EmpathyPresenceChooserPriv *priv;
+
+ priv = GET_PRIV (chooser);
+
+ if (priv->menu) {
+ gtk_widget_destroy (priv->menu);
+ }
+}
+
+static void
+presence_chooser_menu_selection_done_cb (GtkMenuShell *menushell,
+ EmpathyPresenceChooser *chooser)
+{
+ gtk_widget_destroy (GTK_WIDGET (menushell));
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chooser), FALSE);
+}
+
+static void
+presence_chooser_menu_destroy_cb (GtkWidget *menu,
+ EmpathyPresenceChooser *chooser)
+{
+ EmpathyPresenceChooserPriv *priv;
+
+ priv = GET_PRIV (chooser);
+
+ priv->menu = NULL;
+}
+
+static void
+presence_chooser_menu_detach (GtkWidget *attach_widget,
+ GtkMenu *menu)
+{
+ /* We don't need to do anything, but attaching the menu means
+ * we don't own the ref count and it is cleaned up properly.
+ */
+}
+
+static void
+presence_chooser_menu_align_func (GtkMenu *menu,
+ gint *x,
+ gint *y,
+ gboolean *push_in,
+ GtkWidget *widget)
+{
+ GtkRequisition req;
+ GdkScreen *screen;
+ gint screen_height;
+
+ gtk_widget_size_request (GTK_WIDGET (menu), &req);
+
+ gdk_window_get_origin (widget->window, x, y);
+
+ *x += widget->allocation.x + 1;
+ *y += widget->allocation.y;
+
+ screen = gtk_widget_get_screen (GTK_WIDGET (menu));
+ screen_height = gdk_screen_get_height (screen);
+
+ if (req.height > screen_height) {
+ /* Too big for screen height anyway. */
+ *y = 0;
+ return;
+ }
+
+ if ((*y + req.height + widget->allocation.height) > screen_height) {
+ /* Can't put it below the button. */
+ *y -= req.height;
+ *y += 1;
+ } else {
+ /* Put menu below button. */
+ *y += widget->allocation.height;
+ *y -= 1;
+ }
+
+ *push_in = FALSE;
+}
+
+GtkWidget *
+empathy_presence_chooser_create_menu (void)
+{
+ const gchar *status;
+ GtkWidget *menu;
+ GtkWidget *item;
+ GtkWidget *image;
+ guint i;
+
+ menu = gtk_menu_new ();
+
+ for (i = 0; i < G_N_ELEMENTS (states); i += 2) {
+ GList *list, *l;
+
+ status = empathy_presence_get_default_message (states[i]);
+ presence_chooser_menu_add_item (menu,
+ status,
+ states[i]);
+
+ if (states[i+1]) {
+ /* Set custom messages if wanted */
+ list = empathy_status_presets_get (states[i], 5);
+ for (l = list; l; l = l->next) {
+ presence_chooser_menu_add_item (menu,
+ l->data,
+ states[i]);
+ }
+ g_list_free (list);
+ }
+
+ }
+
+ /* Separator. */
+ item = gtk_menu_item_new ();
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (item);
+
+ /* Custom messages */
+ item = gtk_image_menu_item_new_with_label (_("Custom messages..."));
+ image = gtk_image_new_from_stock (GTK_STOCK_EDIT, GTK_ICON_SIZE_MENU);
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show (image);
+ gtk_widget_show (item);
+
+ g_signal_connect (item,
+ "activate",
+ G_CALLBACK (presence_chooser_custom_activate_cb),
+ NULL);
+
+ return menu;
+}
+
+static void
+presence_chooser_menu_add_item (GtkWidget *menu,
+ const gchar *str,
+ McPresence state)
+{
+ GtkWidget *item;
+ GtkWidget *image;
+ const gchar *icon_name;
+
+ item = gtk_image_menu_item_new_with_label (str);
+ icon_name = empathy_icon_name_for_presence (state);
+
+ g_signal_connect (item, "activate",
+ G_CALLBACK (presence_chooser_noncustom_activate_cb),
+ NULL);
+
+ image = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image);
+
+ gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
+ gtk_widget_show (item);
+
+ g_object_set_data_full (G_OBJECT (item),
+ "status", g_strdup (str),
+ (GDestroyNotify) g_free);
+
+ g_object_set_data (G_OBJECT (item), "state", GINT_TO_POINTER (state));
+
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+}
+
+static void
+presence_chooser_noncustom_activate_cb (GtkWidget *item,
+ gpointer user_data)
+{
+ McPresence state;
+ const gchar *status;
+
+ status = g_object_get_data (G_OBJECT (item), "status");
+ state = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "state"));
+
+ presence_chooser_set_state (state, status);
+}
+
+static void
+presence_chooser_set_state (McPresence state,
+ const gchar *status)
+{
+ EmpathyIdle *idle;
+
+ idle = empathy_idle_new ();
+ empathy_idle_set_presence (idle, state, status);
+ g_object_unref (idle);
+}
+
+static void
+presence_chooser_custom_activate_cb (GtkWidget *item,
+ gpointer user_data)
+{
+ presence_chooser_dialog_show ();
+}
+
+static McPresence
+presence_chooser_dialog_get_selected (CustomMessageDialog *dialog)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ McPresence presence = LAST_MC_PRESENCE;
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (dialog->combobox_status));
+ if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (dialog->combobox_status), &iter)) {
+ gtk_tree_model_get (model, &iter,
+ COL_PRESENCE, &presence,
+ -1);
+ }
+
+ return presence;
+}
+
+static void
+presence_chooser_dialog_status_changed_cb (GtkWidget *widget,
+ CustomMessageDialog *dialog)
+{
+ GtkListStore *store;
+ GtkTreeIter iter;
+ McPresence presence = LAST_MC_PRESENCE;
+ GList *messages, *l;
+
+ presence = presence_chooser_dialog_get_selected (dialog);
+
+ store = gtk_list_store_new (1, G_TYPE_STRING);
+ messages = empathy_status_presets_get (presence, -1);
+ for (l = messages; l; l = l->next) {
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter, 0, l->data, -1);
+ }
+
+ gtk_entry_set_text (GTK_ENTRY (dialog->entry_message),
+ messages ? messages->data : "");
+
+ g_list_free (messages);
+
+ gtk_combo_box_set_model (GTK_COMBO_BOX (dialog->comboboxentry_message),
+ GTK_TREE_MODEL (store));
+
+ g_object_unref (store);
+}
+
+static void
+presence_chooser_dialog_message_changed_cb (GtkWidget *widget,
+ CustomMessageDialog *dialog)
+{
+ McPresence presence;
+ GList *messages, *l;
+ const gchar *text;
+ gboolean found = FALSE;
+
+ presence = presence_chooser_dialog_get_selected (dialog);
+ text = gtk_entry_get_text (GTK_ENTRY (dialog->entry_message));
+
+ messages = empathy_status_presets_get (presence, -1);
+ for (l = messages; l; l = l->next) {
+ if (!tp_strdiff (text, l->data)) {
+ found = TRUE;
+ break;
+ }
+ }
+ g_list_free (messages);
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_save),
+ found);
+}
+
+static void
+presence_chooser_dialog_save_toggled_cb (GtkWidget *widget,
+ CustomMessageDialog *dialog)
+{
+ gboolean active;
+ McPresence state;
+ const gchar *text;
+
+ active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->checkbutton_save));
+ state = presence_chooser_dialog_get_selected (dialog);
+ text = gtk_entry_get_text (GTK_ENTRY (dialog->entry_message));
+
+ if (active) {
+ empathy_status_presets_set_last (state, text);
+ } else {
+ empathy_status_presets_remove (state, text);
+ }
+}
+
+static void
+presence_chooser_dialog_setup (CustomMessageDialog *dialog)
+{
+ GtkListStore *store;
+ GtkCellRenderer *renderer;
+ GtkTreeIter iter;
+ guint i;
+
+ store = gtk_list_store_new (COL_COUNT,
+ G_TYPE_STRING, /* Icon name */
+ G_TYPE_STRING, /* Label */
+ MC_TYPE_PRESENCE); /* Presence */
+ gtk_combo_box_set_model (GTK_COMBO_BOX (dialog->combobox_status),
+ GTK_TREE_MODEL (store));
+
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (dialog->combobox_status), renderer, FALSE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (dialog->combobox_status), renderer,
+ "icon-name", COL_ICON,
+ NULL);
+ g_object_set (renderer, "stock-size", GTK_ICON_SIZE_BUTTON, NULL);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (dialog->combobox_status), renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (dialog->combobox_status), renderer,
+ "text", COL_LABEL,
+ NULL);
+
+ for (i = 0; i < G_N_ELEMENTS (states); i += 2) {
+ if (!states[i+1]) {
+ continue;
+ }
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_ICON, empathy_icon_name_for_presence (states[i]),
+ COL_LABEL, empathy_presence_get_default_message (states[i]),
+ COL_PRESENCE, states[i],
+ -1);
+ }
+
+ gtk_combo_box_set_active (GTK_COMBO_BOX (dialog->combobox_status), 0);
+}
+
+static void
+presence_chooser_dialog_response_cb (GtkWidget *widget,
+ gint response,
+ CustomMessageDialog *dialog)
+{
+ if (response == GTK_RESPONSE_APPLY) {
+ McPresence state;
+ const gchar *text;
+
+ state = presence_chooser_dialog_get_selected (dialog);
+ text = gtk_entry_get_text (GTK_ENTRY (dialog->entry_message));
+
+ presence_chooser_set_state (state, text);
+ }
+
+ gtk_widget_destroy (widget);
+}
+
+static void
+presence_chooser_dialog_destroy_cb (GtkWidget *widget,
+ CustomMessageDialog *dialog)
+{
+
+ g_free (dialog);
+ message_dialog = NULL;
+}
+
+static void
+presence_chooser_dialog_show (void)
+{
+ GladeXML *glade;
+ gchar *filename;
+
+ if (message_dialog) {
+ gtk_window_present (GTK_WINDOW (message_dialog->dialog));
+ return;
+ }
+
+ message_dialog = g_new0 (CustomMessageDialog, 1);
+
+ filename = empathy_file_lookup ("empathy-presence-chooser.glade",
+ "libempathy-gtk");
+ glade = empathy_glade_get_file (filename,
+ "custom_message_dialog",
+ NULL,
+ "custom_message_dialog", &message_dialog->dialog,
+ "checkbutton_save", &message_dialog->checkbutton_save,
+ "comboboxentry_message", &message_dialog->comboboxentry_message,
+ "combobox_status", &message_dialog->combobox_status,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ message_dialog,
+ "custom_message_dialog", "destroy", presence_chooser_dialog_destroy_cb,
+ "custom_message_dialog", "response", presence_chooser_dialog_response_cb,
+ "combobox_status", "changed", presence_chooser_dialog_status_changed_cb,
+ "checkbutton_save", "toggled", presence_chooser_dialog_save_toggled_cb,
+ NULL);
+
+ g_object_unref (glade);
+
+ /* Setup the message combobox */
+ message_dialog->entry_message = GTK_BIN (message_dialog->comboboxentry_message)->child;
+ gtk_entry_set_activates_default (GTK_ENTRY (message_dialog->entry_message), TRUE);
+ gtk_entry_set_width_chars (GTK_ENTRY (message_dialog->entry_message), 25);
+ g_signal_connect (message_dialog->entry_message, "changed",
+ G_CALLBACK (presence_chooser_dialog_message_changed_cb),
+ message_dialog);
+
+ presence_chooser_dialog_setup (message_dialog);
+
+ gtk_combo_box_entry_set_text_column (GTK_COMBO_BOX_ENTRY (message_dialog->comboboxentry_message), 0);
+
+ /* FIXME: Set transian for a window ? */
+
+ gtk_widget_show_all (message_dialog->dialog);
+}
+
diff --git a/trunk/libempathy-gtk/empathy-presence-chooser.glade b/trunk/libempathy-gtk/empathy-presence-chooser.glade
new file mode 100644
index 000000000..ba79529f6
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-presence-chooser.glade
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkDialog" id="custom_message_dialog">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Custom message</property>
+ <property name="resizable">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox6">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkTable" id="table1">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <widget class="GtkComboBox" id="combobox_status">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBoxEntry" id="comboboxentry_message">
+ <property name="visible">True</property>
+ <child internal-child="entry">
+ <widget class="GtkEntry" id="comboboxentry-entry1">
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_save">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Save message</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label472">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Message:</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label471">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Status:</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area6">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="closebutton1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-apply</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-10</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-presence-chooser.h b/trunk/libempathy-gtk/empathy-presence-chooser.h
new file mode 100644
index 000000000..8bf8de5b5
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-presence-chooser.h
@@ -0,0 +1,58 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_PRESENCE_CHOOSER_H__
+#define __EMPATHY_PRESENCE_CHOOSER_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_PRESENCE_CHOOSER (empathy_presence_chooser_get_type ())
+#define EMPATHY_PRESENCE_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_PRESENCE_CHOOSER, EmpathyPresenceChooser))
+#define EMPATHY_PRESENCE_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_PRESENCE_CHOOSER, EmpathyPresenceChooserClass))
+#define EMPATHY_IS_PRESENCE_CHOOSER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_PRESENCE_CHOOSER))
+#define EMPATHY_IS_PRESENCE_CHOOSER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_PRESENCE_CHOOSER))
+#define EMPATHY_PRESENCE_CHOOSER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_PRESENCE_CHOOSER, EmpathyPresenceChooserClass))
+
+typedef struct _EmpathyPresenceChooser EmpathyPresenceChooser;
+typedef struct _EmpathyPresenceChooserClass EmpathyPresenceChooserClass;
+
+struct _EmpathyPresenceChooser {
+ GtkToggleButton parent;
+ gpointer priv;
+};
+
+struct _EmpathyPresenceChooserClass {
+ GtkToggleButtonClass parent_class;
+};
+
+GType empathy_presence_chooser_get_type (void) G_GNUC_CONST;
+GtkWidget *empathy_presence_chooser_new (void);
+GtkWidget *empathy_presence_chooser_create_menu (void);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_PRESENCE_CHOOSER_H__ */
+
diff --git a/trunk/libempathy-gtk/empathy-profile-chooser.c b/trunk/libempathy-gtk/empathy-profile-chooser.c
new file mode 100644
index 000000000..6c46b6cc5
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-profile-chooser.c
@@ -0,0 +1,190 @@
+/* -*- 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 <gtk/gtk.h>
+#include <libmissioncontrol/mc-profile.h>
+#include <libmissioncontrol/mc-protocol.h>
+
+#include "empathy-profile-chooser.h"
+#include "empathy-ui-utils.h"
+
+enum {
+ COL_ICON,
+ COL_LABEL,
+ COL_PROFILE,
+ COL_COUNT
+};
+
+McProfile*
+empathy_profile_chooser_get_selected (GtkWidget *widget)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ McProfile *profile = NULL;
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget));
+ if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (widget), &iter)) {
+ gtk_tree_model_get (model, &iter,
+ COL_PROFILE, &profile,
+ -1);
+ }
+
+ return profile;
+}
+
+gint
+empathy_profile_chooser_n_profiles (GtkWidget *widget)
+{
+ GtkTreeModel *model;
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget));
+
+ return gtk_tree_model_iter_n_children (model, NULL);
+}
+
+static gint
+profile_chooser_sort_profile_value (McProfile *profile)
+{
+ guint i;
+ const gchar *profile_name;
+ const gchar *names[] = {"jabber",
+ "salut",
+ "gtalk",
+ NULL};
+
+ profile_name = mc_profile_get_unique_name (profile);
+
+ for (i = 0 ; names[i]; i++) {
+ if (strcmp (profile_name, names[i]) == 0) {
+ return i;
+ }
+ }
+
+ return i;
+}
+
+static gint
+profile_chooser_sort_func (GtkTreeModel *model,
+ GtkTreeIter *iter_a,
+ GtkTreeIter *iter_b,
+ gpointer user_data)
+{
+ McProfile *profile_a;
+ McProfile *profile_b;
+ gint cmp;
+
+ gtk_tree_model_get (model, iter_a,
+ COL_PROFILE, &profile_a,
+ -1);
+ gtk_tree_model_get (model, iter_b,
+ COL_PROFILE, &profile_b,
+ -1);
+
+ cmp = profile_chooser_sort_profile_value (profile_a);
+ cmp -= profile_chooser_sort_profile_value (profile_b);
+ if (cmp == 0) {
+ cmp = strcmp (mc_profile_get_display_name (profile_a),
+ mc_profile_get_display_name (profile_b));
+ }
+
+ g_object_unref (profile_a);
+ g_object_unref (profile_b);
+
+ return cmp;
+}
+
+GtkWidget *
+empathy_profile_chooser_new (void)
+{
+ GList *profiles, *l;
+ GtkListStore *store;
+ GtkCellRenderer *renderer;
+ GtkWidget *combo_box;
+ GtkTreeIter iter;
+ gboolean iter_set = FALSE;
+
+ /* set up combo box with new store */
+ store = gtk_list_store_new (COL_COUNT,
+ G_TYPE_STRING, /* Icon name */
+ G_TYPE_STRING, /* Label */
+ MC_TYPE_PROFILE); /* Profile */
+ combo_box = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
+
+
+ renderer = gtk_cell_renderer_pixbuf_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, FALSE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), renderer,
+ "icon-name", COL_ICON,
+ NULL);
+ g_object_set (renderer, "stock-size", GTK_ICON_SIZE_BUTTON, NULL);
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), renderer,
+ "text", COL_LABEL,
+ NULL);
+
+ profiles = mc_profiles_list ();
+ for (l = profiles; l; l = l->next) {
+ McProfile *profile;
+ McProtocol *protocol;
+
+ profile = l->data;
+
+ /* Check if the CM is installed, otherwise skip that profile.
+ * Workaround SF bug #1688779 */
+ protocol = mc_profile_get_protocol (profile);
+ if (!protocol) {
+ continue;
+ }
+ g_object_unref (protocol);
+
+ gtk_list_store_insert_with_values (store, &iter, 0,
+ COL_ICON, mc_profile_get_icon_name (profile),
+ COL_LABEL, mc_profile_get_display_name (profile),
+ COL_PROFILE, profile,
+ -1);
+ iter_set = TRUE;
+ }
+
+ /* Set the profile sort function */
+ gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (store),
+ COL_PROFILE,
+ profile_chooser_sort_func,
+ NULL, NULL);
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
+ COL_PROFILE,
+ GTK_SORT_ASCENDING);
+
+ if (iter_set) {
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combo_box), &iter);
+ }
+
+ mc_profiles_free_list (profiles);
+ g_object_unref (store);
+
+ return combo_box;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-profile-chooser.h b/trunk/libempathy-gtk/empathy-profile-chooser.h
new file mode 100644
index 000000000..8cdc33d67
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-profile-chooser.h
@@ -0,0 +1,34 @@
+/* -*- 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_PROTOCOL_CHOOSER_H__
+#define __EMPATHY_PROTOCOL_CHOOSER_H__
+
+#include <libmissioncontrol/mc-profile.h>
+
+G_BEGIN_DECLS
+
+GtkWidget * empathy_profile_chooser_new (void);
+McProfile * empathy_profile_chooser_get_selected (GtkWidget *widget);
+gint empathy_profile_chooser_n_profiles (GtkWidget *widget);
+
+G_END_DECLS
+#endif /* __EMPATHY_PROTOCOL_CHOOSER_H__ */
diff --git a/trunk/libempathy-gtk/empathy-smiley-manager.c b/trunk/libempathy-gtk/empathy-smiley-manager.c
new file mode 100644
index 000000000..c9322c8eb
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-smiley-manager.c
@@ -0,0 +1,349 @@
+/* -*- 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: Dafydd Harrie <dafydd.harries@collabora.co.uk>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <libempathy/empathy-utils.h>
+#include "empathy-smiley-manager.h"
+#include "empathy-ui-utils.h"
+
+typedef struct _SmileyManagerTree SmileyManagerTree;
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathySmileyManager)
+typedef struct {
+ SmileyManagerTree *tree;
+ GSList *smileys;
+} EmpathySmileyManagerPriv;
+
+struct _SmileyManagerTree {
+ gunichar c;
+ GdkPixbuf *pixbuf;
+ GSList *childrens;
+};
+
+G_DEFINE_TYPE (EmpathySmileyManager, empathy_smiley_manager, G_TYPE_OBJECT);
+
+static SmileyManagerTree *
+smiley_manager_tree_new (gunichar c)
+{
+ SmileyManagerTree *tree;
+
+ tree = g_slice_new0 (SmileyManagerTree);
+ tree->c = c;
+ tree->pixbuf = NULL;
+ tree->childrens = NULL;
+
+ return tree;
+}
+
+static void
+smiley_manager_tree_free (SmileyManagerTree *tree)
+{
+ GSList *l;
+
+ if (!tree) {
+ return;
+ }
+
+ for (l = tree->childrens; l; l = l->next) {
+ smiley_manager_tree_free (l->data);
+ }
+
+ if (tree->pixbuf) {
+ g_object_unref (tree->pixbuf);
+ }
+ g_slist_free (tree->childrens);
+ g_slice_free (SmileyManagerTree, tree);
+}
+
+static EmpathySmiley *
+smiley_new (GdkPixbuf *pixbuf, const gchar *str)
+{
+ EmpathySmiley *smiley;
+
+ smiley = g_slice_new0 (EmpathySmiley);
+ if (pixbuf) {
+ smiley->pixbuf = g_object_ref (pixbuf);
+ }
+ smiley->str = g_strdup (str);
+
+ return smiley;
+}
+
+void
+empathy_smiley_free (EmpathySmiley *smiley)
+{
+ if (!smiley) {
+ return;
+ }
+
+ if (smiley->pixbuf) {
+ g_object_unref (smiley->pixbuf);
+ }
+ g_free (smiley->str);
+ g_slice_free (EmpathySmiley, smiley);
+}
+
+static void
+smiley_manager_finalize (GObject *object)
+{
+ EmpathySmileyManagerPriv *priv = GET_PRIV (object);
+
+ smiley_manager_tree_free (priv->tree);
+ g_slist_foreach (priv->smileys, (GFunc) empathy_smiley_free, NULL);
+ g_slist_free (priv->smileys);
+}
+
+static void
+empathy_smiley_manager_class_init (EmpathySmileyManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = smiley_manager_finalize;
+
+ g_type_class_add_private (object_class, sizeof (EmpathySmileyManagerPriv));
+}
+
+static void
+empathy_smiley_manager_init (EmpathySmileyManager *manager)
+{
+ EmpathySmileyManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
+ EMPATHY_TYPE_SMILEY_MANAGER, EmpathySmileyManagerPriv);
+
+ manager->priv = priv;
+ priv->tree = smiley_manager_tree_new ('\0');
+ priv->smileys = NULL;
+}
+
+EmpathySmileyManager *
+empathy_smiley_manager_new (void)
+{
+ static EmpathySmileyManager *manager = NULL;
+
+ if (!manager) {
+ manager = g_object_new (EMPATHY_TYPE_SMILEY_MANAGER, NULL);
+ g_object_add_weak_pointer (G_OBJECT (manager), (gpointer) &manager);
+ empathy_smiley_manager_load (manager);
+ } else {
+ g_object_ref (manager);
+ }
+
+ return manager;
+}
+
+static SmileyManagerTree *
+smiley_manager_tree_find_child (SmileyManagerTree *tree, gunichar c)
+{
+ GSList *l;
+
+ for (l = tree->childrens; l; l = l->next) {
+ SmileyManagerTree *child = l->data;
+
+ if (child->c == c) {
+ return child;
+ }
+ }
+
+ return NULL;
+}
+
+static SmileyManagerTree *
+smiley_manager_tree_find_or_insert_child (SmileyManagerTree *tree, gunichar c)
+{
+ SmileyManagerTree *child;
+
+ child = smiley_manager_tree_find_child (tree, c);
+
+ if (!child) {
+ child = smiley_manager_tree_new (c);
+ tree->childrens = g_slist_prepend (tree->childrens, child);
+ }
+
+ return child;
+}
+
+static void
+smiley_manager_tree_insert (SmileyManagerTree *tree,
+ GdkPixbuf *smiley,
+ const gchar *str)
+{
+ SmileyManagerTree *child;
+
+ child = smiley_manager_tree_find_or_insert_child (tree, g_utf8_get_char (str));
+
+ str = g_utf8_next_char (str);
+ if (*str) {
+ smiley_manager_tree_insert (child, smiley, str);
+ return;
+ }
+
+ child->pixbuf = g_object_ref (smiley);
+}
+
+static void
+smiley_manager_add_valist (EmpathySmileyManager *manager,
+ GdkPixbuf *smiley,
+ const gchar *first_str,
+ va_list var_args)
+{
+ EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
+ const gchar *str;
+
+ for (str = first_str; str; str = va_arg (var_args, gchar*)) {
+ smiley_manager_tree_insert (priv->tree, smiley, str);
+ }
+
+ priv->smileys = g_slist_prepend (priv->smileys, smiley_new (smiley, first_str));
+}
+
+void
+empathy_smiley_manager_add (EmpathySmileyManager *manager,
+ const gchar *icon_name,
+ const gchar *first_str,
+ ...)
+{
+ GdkPixbuf *smiley;
+ va_list var_args;
+
+ g_return_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager));
+ g_return_if_fail (!G_STR_EMPTY (icon_name));
+ g_return_if_fail (!G_STR_EMPTY (first_str));
+
+ smiley = empathy_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_MENU);
+ if (smiley) {
+ va_start (var_args, first_str);
+ smiley_manager_add_valist (manager, smiley, first_str, var_args);
+ va_end (var_args);
+ g_object_unref (smiley);
+ }
+}
+
+void
+empathy_smiley_manager_add_from_pixbuf (EmpathySmileyManager *manager,
+ GdkPixbuf *smiley,
+ const gchar *first_str,
+ ...)
+{
+ va_list var_args;
+
+ g_return_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager));
+ g_return_if_fail (GDK_IS_PIXBUF (smiley));
+ g_return_if_fail (!G_STR_EMPTY (first_str));
+
+ va_start (var_args, first_str);
+ smiley_manager_add_valist (manager, smiley, first_str, var_args);
+ va_end (var_args);
+}
+
+void
+empathy_smiley_manager_load (EmpathySmileyManager *manager)
+{
+ g_return_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager));
+
+ /* From fd.o icon-naming spec */
+ empathy_smiley_manager_add (manager, "face-angel", "O:-)", "O:)", NULL);
+ empathy_smiley_manager_add (manager, "face-cool", "B-)", "B)", NULL);
+ empathy_smiley_manager_add (manager, "face-crying", ":'(", NULL);
+ empathy_smiley_manager_add (manager, "face-devilish", ">:-)", ">:)", NULL);
+ empathy_smiley_manager_add (manager, "face-embarrassed",":-[", ":[", ":-$", ":$", NULL);
+ empathy_smiley_manager_add (manager, "face-kiss", ":-*", ":*", NULL);
+ empathy_smiley_manager_add (manager, "face-monkey", ":-(|)", ":(|)", NULL);
+ empathy_smiley_manager_add (manager, "face-plain", ":-|", ":|", NULL);
+ empathy_smiley_manager_add (manager, "face-raspberry", ":-P", ":P", ":-p", ":p", NULL);
+ empathy_smiley_manager_add (manager, "face-sad", ":-(", ":(", NULL);
+ empathy_smiley_manager_add (manager, "face-smile", ":-)", ":)", NULL);
+ empathy_smiley_manager_add (manager, "face-smile-big", ":-D", ":D", ":-d", ":d", NULL);
+ empathy_smiley_manager_add (manager, "face-smirk", ":-!", ":!", NULL);
+ empathy_smiley_manager_add (manager, "face-surprise", ":-O", ":O", NULL);
+ empathy_smiley_manager_add (manager, "face-wink", ";-)", ";)", NULL);
+}
+
+GSList *
+empathy_smiley_manager_parse (EmpathySmileyManager *manager,
+ const gchar *text)
+{
+ EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
+ EmpathySmiley *smiley;
+ SmileyManagerTree *cur_tree = priv->tree;
+ const gchar *t;
+ const gchar *cur_str = text;
+ GSList *smileys = NULL;
+
+ g_return_val_if_fail (EMPATHY_IS_SMILEY_MANAGER (manager), NULL);
+ g_return_val_if_fail (text != NULL, NULL);
+
+ for (t = text; *t; t = g_utf8_next_char (t)) {
+ SmileyManagerTree *child;
+ gunichar c;
+
+ c = g_utf8_get_char (t);
+ child = smiley_manager_tree_find_child (cur_tree, c);
+
+ if (cur_tree == priv->tree) {
+ if (child) {
+ if (t > cur_str) {
+ smiley = smiley_new (NULL, g_strndup (cur_str, t - cur_str));
+ smileys = g_slist_prepend (smileys, smiley);
+ }
+ cur_str = t;
+ cur_tree = child;
+ }
+
+ continue;
+ }
+
+ if (child) {
+ cur_tree = child;
+ continue;
+ }
+
+ smiley = smiley_new (cur_tree->pixbuf, g_strndup (cur_str, t - cur_str));
+ smileys = g_slist_prepend (smileys, smiley);
+ if (cur_tree->pixbuf) {
+ cur_str = t;
+ cur_tree = smiley_manager_tree_find_child (priv->tree, c);
+
+ if (!cur_tree) {
+ cur_tree = priv->tree;
+ }
+ } else {
+ cur_str = t;
+ cur_tree = priv->tree;
+ }
+ }
+
+ smiley = smiley_new (cur_tree->pixbuf, g_strndup (cur_str, t - cur_str));
+ smileys = g_slist_prepend (smileys, smiley);
+
+ return g_slist_reverse (smileys);
+}
+
+GSList *
+empathy_smiley_manager_get_all (EmpathySmileyManager *manager)
+{
+ EmpathySmileyManagerPriv *priv = GET_PRIV (manager);
+
+ return priv->smileys;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-smiley-manager.h b/trunk/libempathy-gtk/empathy-smiley-manager.h
new file mode 100644
index 000000000..394215ed6
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-smiley-manager.h
@@ -0,0 +1,74 @@
+/* -*- 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: Dafydd Harrie <dafydd.harries@collabora.co.uk>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_SMILEY_MANAGER__H__
+#define __EMPATHY_SMILEY_MANAGER_H__
+
+#include <glib-object.h>
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_SMILEY_MANAGER (empathy_smiley_manager_get_type ())
+#define EMPATHY_SMILEY_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_SMILEY_MANAGER, EmpathySmileyManager))
+#define EMPATHY_SMILEY_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_SMILEY_MANAGER, EmpathySmileyManagerClass))
+#define EMPATHY_IS_SMILEY_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_SMILEY_MANAGER))
+#define EMPATHY_IS_SMILEY_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_SMILEY_MANAGER))
+#define EMPATHY_SMILEY_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_SMILEY_MANAGER, EmpathySmileyManagerClass))
+
+typedef struct _EmpathySmileyManager EmpathySmileyManager;
+typedef struct _EmpathySmileyManagerClass EmpathySmileyManagerClass;
+
+struct _EmpathySmileyManager {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathySmileyManagerClass {
+ GObjectClass parent_class;
+};
+
+typedef struct {
+ GdkPixbuf *pixbuf;
+ gchar *str;
+} EmpathySmiley;
+
+GType empathy_smiley_manager_get_type (void) G_GNUC_CONST;
+EmpathySmileyManager *empathy_smiley_manager_new (void);
+void empathy_smiley_manager_load (EmpathySmileyManager *manager);
+void empathy_smiley_manager_add (EmpathySmileyManager *manager,
+ const gchar *icon_name,
+ const gchar *first_str,
+ ...);
+void empathy_smiley_manager_add_from_pixbuf (EmpathySmileyManager *manager,
+ GdkPixbuf *smiley,
+ const gchar *first_str,
+ ...);
+GSList * empathy_smiley_manager_get_all (EmpathySmileyManager *manager);
+GSList * empathy_smiley_manager_parse (EmpathySmileyManager *manager,
+ const gchar *text);
+void empathy_smiley_free (EmpathySmiley *smiley);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_SMILEY_MANAGER_H__ */
+
diff --git a/trunk/libempathy-gtk/empathy-spell-dialog.c b/trunk/libempathy-gtk/empathy-spell-dialog.c
new file mode 100644
index 000000000..19531cf76
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-spell-dialog.c
@@ -0,0 +1,274 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtkcellrenderertext.h>
+#include <gtk/gtkdialog.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkliststore.h>
+#include <gtk/gtktreeview.h>
+#include <gtk/gtktreeselection.h>
+#include <gtk/gtksizegroup.h>
+#include <glade/glade.h>
+
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-chat.h"
+#include "empathy-spell.h"
+#include "empathy-spell-dialog.h"
+#include "empathy-ui-utils.h"
+
+typedef struct {
+ GtkWidget *window;
+ GtkWidget *button_replace;
+ GtkWidget *label_word;
+ GtkWidget *treeview_words;
+
+ EmpathyChat *chat;
+
+ gchar *word;
+ GtkTextIter start;
+ GtkTextIter end;
+} EmpathySpellDialog;
+
+enum {
+ COL_SPELL_WORD,
+ COL_SPELL_COUNT
+};
+
+static void spell_dialog_model_populate_columns (EmpathySpellDialog *dialog);
+static void spell_dialog_model_populate_suggestions (EmpathySpellDialog *dialog);
+static void spell_dialog_model_row_activated_cb (GtkTreeView *tree_view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ EmpathySpellDialog *dialog);
+static void spell_dialog_model_selection_changed_cb (GtkTreeSelection *treeselection,
+ EmpathySpellDialog *dialog);
+static void spell_dialog_model_setup (EmpathySpellDialog *dialog);
+static void spell_dialog_response_cb (GtkWidget *widget,
+ gint response,
+ EmpathySpellDialog *dialog);
+static void spell_dialog_destroy_cb (GtkWidget *widget,
+ EmpathySpellDialog *dialog);
+
+static void
+spell_dialog_model_populate_columns (EmpathySpellDialog *dialog)
+{
+ GtkTreeModel *model;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ guint col_offset;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview_words));
+
+ renderer = gtk_cell_renderer_text_new ();
+ col_offset = gtk_tree_view_insert_column_with_attributes (
+ GTK_TREE_VIEW (dialog->treeview_words),
+ -1, _("Word"),
+ renderer,
+ "text", COL_SPELL_WORD,
+ NULL);
+
+ g_object_set_data (G_OBJECT (renderer),
+ "column", GINT_TO_POINTER (COL_SPELL_WORD));
+
+ column = gtk_tree_view_get_column (GTK_TREE_VIEW (dialog->treeview_words), col_offset - 1);
+ gtk_tree_view_column_set_sort_column_id (column, COL_SPELL_WORD);
+ gtk_tree_view_column_set_resizable (column, FALSE);
+ gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
+}
+
+static void
+spell_dialog_model_populate_suggestions (EmpathySpellDialog *dialog)
+{
+ GtkTreeModel *model;
+ GtkListStore *store;
+ GList *suggestions, *l;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (dialog->treeview_words));
+ store = GTK_LIST_STORE (model);
+
+ suggestions = empathy_spell_get_suggestions (dialog->word);
+ for (l = suggestions; l; l=l->next) {
+ GtkTreeIter iter;
+ gchar *word;
+
+ word = l->data;
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_SPELL_WORD, word,
+ -1);
+ }
+
+ empathy_spell_free_suggestions (suggestions);
+}
+
+static void
+spell_dialog_model_row_activated_cb (GtkTreeView *tree_view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ EmpathySpellDialog *dialog)
+{
+ spell_dialog_response_cb (dialog->window, GTK_RESPONSE_OK, dialog);
+}
+
+static void
+spell_dialog_model_selection_changed_cb (GtkTreeSelection *treeselection,
+ EmpathySpellDialog *dialog)
+{
+ gint count;
+
+ count = gtk_tree_selection_count_selected_rows (treeselection);
+ gtk_widget_set_sensitive (dialog->button_replace, (count == 1));
+}
+
+static void
+spell_dialog_model_setup (EmpathySpellDialog *dialog)
+{
+ GtkTreeView *view;
+ GtkListStore *store;
+ GtkTreeSelection *selection;
+
+ view = GTK_TREE_VIEW (dialog->treeview_words);
+
+ g_signal_connect (view, "row-activated",
+ G_CALLBACK (spell_dialog_model_row_activated_cb),
+ dialog);
+
+ store = gtk_list_store_new (COL_SPELL_COUNT,
+ G_TYPE_STRING); /* word */
+
+ gtk_tree_view_set_model (view, GTK_TREE_MODEL (store));
+
+ selection = gtk_tree_view_get_selection (view);
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+ g_signal_connect (selection, "changed",
+ G_CALLBACK (spell_dialog_model_selection_changed_cb),
+ dialog);
+
+ spell_dialog_model_populate_columns (dialog);
+ spell_dialog_model_populate_suggestions (dialog);
+
+ g_object_unref (store);
+}
+
+static void
+spell_dialog_destroy_cb (GtkWidget *widget,
+ EmpathySpellDialog *dialog)
+{
+ g_object_unref (dialog->chat);
+ g_free (dialog->word);
+
+ g_free (dialog);
+}
+
+static void
+spell_dialog_response_cb (GtkWidget *widget,
+ gint response,
+ EmpathySpellDialog *dialog)
+{
+ if (response == GTK_RESPONSE_OK) {
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+
+ gchar *new_word;
+
+ view = GTK_TREE_VIEW (dialog->treeview_words);
+ selection = gtk_tree_view_get_selection (view);
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ return;
+ }
+
+ gtk_tree_model_get (model, &iter, COL_SPELL_WORD, &new_word, -1);
+
+ empathy_chat_correct_word (dialog->chat,
+ &dialog->start,
+ &dialog->end,
+ new_word);
+
+ g_free (new_word);
+ }
+
+ gtk_widget_destroy (dialog->window);
+}
+
+void
+empathy_spell_dialog_show (EmpathyChat *chat,
+ GtkTextIter *start,
+ GtkTextIter *end,
+ const gchar *word)
+{
+ EmpathySpellDialog *dialog;
+ GladeXML *gui;
+ gchar *str;
+ gchar *filename;
+
+ g_return_if_fail (chat != NULL);
+ g_return_if_fail (word != NULL);
+
+ dialog = g_new0 (EmpathySpellDialog, 1);
+
+ dialog->chat = g_object_ref (chat);
+
+ dialog->word = g_strdup (word);
+
+ dialog->start = *start;
+ dialog->end = *end;
+
+ filename = empathy_file_lookup ("empathy-spell-dialog.glade",
+ "libempathy-gtk");
+ gui = empathy_glade_get_file (filename,
+ "spell_dialog",
+ NULL,
+ "spell_dialog", &dialog->window,
+ "button_replace", &dialog->button_replace,
+ "label_word", &dialog->label_word,
+ "treeview_words", &dialog->treeview_words,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (gui,
+ dialog,
+ "spell_dialog", "response", spell_dialog_response_cb,
+ "spell_dialog", "destroy", spell_dialog_destroy_cb,
+ NULL);
+
+ g_object_unref (gui);
+
+ str = g_markup_printf_escaped ("%s:\n<b>%s</b>",
+ _("Suggestions for the word"),
+ word);
+
+ gtk_label_set_markup (GTK_LABEL (dialog->label_word), str);
+ g_free (str);
+
+ spell_dialog_model_setup (dialog);
+
+ gtk_widget_show (dialog->window);
+}
diff --git a/trunk/libempathy-gtk/empathy-spell-dialog.glade b/trunk/libempathy-gtk/empathy-spell-dialog.glade
new file mode 100644
index 000000000..3ce1d5b56
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-spell-dialog.glade
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkDialog" id="spell_dialog">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Spell Checker</property>
+ <property name="modal">True</property>
+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+ <property name="default_width">275</property>
+ <property name="default_height">225</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox7">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkVBox" id="vbox128">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label_word">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Suggestions for the word:</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow9">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview_words">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area7">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button_cancel">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_replace">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="response_id">-5</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment6">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox135">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkImage" id="image245">
+ <property name="visible">True</property>
+ <property name="stock">gtk-convert</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label594">
+ <property name="visible">True</property>
+ <property name="label">_Replace</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/libempathy-gtk/empathy-spell-dialog.h b/trunk/libempathy-gtk/empathy-spell-dialog.h
new file mode 100644
index 000000000..ce0218812
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-spell-dialog.h
@@ -0,0 +1,39 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ */
+
+#ifndef __EMPATHY_SPELL_DIALOG_H__
+#define __EMPATHY_SPELL_DIALOG_H__
+
+#include <gtk/gtktextiter.h>
+#include "empathy-chat.h"
+
+G_BEGIN_DECLS
+
+void empathy_spell_dialog_show (EmpathyChat *chat,
+ GtkTextIter *start,
+ GtkTextIter *end,
+ const gchar *word);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_SPELL_DIALOG_H__ */
diff --git a/trunk/libempathy-gtk/empathy-spell.c b/trunk/libempathy-gtk/empathy-spell.c
new file mode 100644
index 000000000..c1c630354
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-spell.c
@@ -0,0 +1,445 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <glib/gi18n.h>
+
+#ifdef HAVE_ENCHANT
+#include <enchant.h>
+#endif
+
+#include "empathy-spell.h"
+#include "empathy-conf.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+#ifdef HAVE_ENCHANT
+
+typedef struct {
+ EnchantBroker *config;
+ EnchantDict *speller;
+} SpellLanguage;
+
+#define ISO_CODES_DATADIR ISO_CODES_PREFIX "/share/xml/iso-codes"
+#define ISO_CODES_LOCALESDIR ISO_CODES_PREFIX "/share/locale"
+
+static GHashTable *iso_code_names = NULL;
+static GList *languages = NULL;
+static gboolean empathy_conf_notify_inited = FALSE;
+
+static void
+spell_iso_codes_parse_start_tag (GMarkupParseContext *ctx,
+ const gchar *element_name,
+ const gchar **attr_names,
+ const gchar **attr_values,
+ gpointer data,
+ GError **error)
+{
+ const gchar *ccode_longB, *ccode_longT, *ccode;
+ const gchar *lang_name;
+
+ if (!g_str_equal (element_name, "iso_639_entry") ||
+ attr_names == NULL || attr_values == NULL) {
+ return;
+ }
+
+ ccode = NULL;
+ ccode_longB = NULL;
+ ccode_longT = NULL;
+ lang_name = NULL;
+
+ while (*attr_names && *attr_values) {
+ if (g_str_equal (*attr_names, "iso_639_1_code")) {
+ if (**attr_values) {
+ ccode = *attr_values;
+ }
+ }
+ else if (g_str_equal (*attr_names, "iso_639_2B_code")) {
+ if (**attr_values) {
+ ccode_longB = *attr_values;
+ }
+ }
+ else if (g_str_equal (*attr_names, "iso_639_2T_code")) {
+ if (**attr_values) {
+ ccode_longT = *attr_values;
+ }
+ }
+ else if (g_str_equal (*attr_names, "name")) {
+ lang_name = *attr_values;
+ }
+
+ attr_names++;
+ attr_values++;
+ }
+
+ if (!lang_name) {
+ return;
+ }
+
+ if (ccode) {
+ g_hash_table_insert (iso_code_names,
+ g_strdup (ccode),
+ g_strdup (lang_name));
+ }
+
+ if (ccode_longB) {
+ g_hash_table_insert (iso_code_names,
+ g_strdup (ccode_longB),
+ g_strdup (lang_name));
+ }
+
+ if (ccode_longT) {
+ g_hash_table_insert (iso_code_names,
+ g_strdup (ccode_longT),
+ g_strdup (lang_name));
+ }
+}
+
+static void
+spell_iso_code_names_init (void)
+{
+ GError *err = NULL;
+ gchar *buf;
+ gsize buf_len;
+
+ iso_code_names = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, g_free);
+
+ bindtextdomain ("iso_639", ISO_CODES_LOCALESDIR);
+ bind_textdomain_codeset ("iso_639", "UTF-8");
+
+ /* FIXME: We should read this in chunks and pass to the parser. */
+ if (g_file_get_contents (ISO_CODES_DATADIR "/iso_639.xml", &buf, &buf_len, &err)) {
+ GMarkupParseContext *ctx;
+ GMarkupParser parser = {
+ spell_iso_codes_parse_start_tag,
+ NULL, NULL, NULL, NULL
+ };
+
+ ctx = g_markup_parse_context_new (&parser, 0, NULL, NULL);
+ if (!g_markup_parse_context_parse (ctx, buf, buf_len, &err)) {
+ g_warning ("Failed to parse '%s': %s",
+ ISO_CODES_DATADIR"/iso_639.xml",
+ err->message);
+ g_error_free (err);
+ }
+
+ g_markup_parse_context_free (ctx);
+ g_free (buf);
+ } else {
+ g_warning ("Failed to load '%s': %s",
+ ISO_CODES_DATADIR"/iso_639.xml", err->message);
+ g_error_free (err);
+ }
+}
+
+static void
+spell_notify_languages_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ GList *l;
+
+ DEBUG ("Resetting languages due to config change");
+
+ /* We just reset the languages list. */
+ for (l = languages; l; l = l->next) {
+ SpellLanguage *lang;
+
+ lang = l->data;
+
+ enchant_broker_free_dict (lang->config, lang->speller);
+ enchant_broker_free (lang->config);
+
+ g_slice_free (SpellLanguage, lang);
+ }
+
+ g_list_free (languages);
+ languages = NULL;
+}
+
+static void
+spell_setup_languages (void)
+{
+ gchar *str;
+
+ if (!empathy_conf_notify_inited) {
+ empathy_conf_notify_add (empathy_conf_get (),
+ EMPATHY_PREFS_CHAT_SPELL_CHECKER_LANGUAGES,
+ spell_notify_languages_cb, NULL);
+
+ empathy_conf_notify_inited = TRUE;
+ }
+
+ if (languages) {
+ return;
+ }
+
+ if (empathy_conf_get_string (empathy_conf_get (),
+ EMPATHY_PREFS_CHAT_SPELL_CHECKER_LANGUAGES,
+ &str) && str) {
+ gchar **strv;
+ gint i;
+
+ strv = g_strsplit (str, ",", -1);
+
+ i = 0;
+ while (strv && strv[i]) {
+ SpellLanguage *lang;
+
+ DEBUG ("Setting up language:'%s'", strv[i]);
+
+ lang = g_slice_new0 (SpellLanguage);
+
+ lang->config = enchant_broker_init ();
+ lang->speller = enchant_broker_request_dict (lang->config, strv[i]);
+
+ languages = g_list_append (languages, lang);
+ i++;
+ }
+
+ if (strv) {
+ g_strfreev (strv);
+ }
+
+ g_free (str);
+ }
+}
+
+const gchar *
+empathy_spell_get_language_name (const gchar *code)
+{
+ const gchar *name;
+
+ g_return_val_if_fail (code != NULL, NULL);
+
+ if (!iso_code_names) {
+ spell_iso_code_names_init ();
+ }
+
+ name = g_hash_table_lookup (iso_code_names, code);
+ if (!name) {
+ return NULL;
+ }
+
+ return dgettext ("iso_639", name);
+}
+
+static void
+enumerate_dicts (const gchar * const lang_tag,
+ const gchar * const provider_name,
+ const gchar * const provider_desc,
+ const gchar * const provider_file,
+ gpointer user_data)
+{
+ GList **list = user_data;
+ gchar *lang = g_strdup (lang_tag);
+
+ if (strchr (lang, '_')) {
+ /* cut country part out of language */
+ strchr (lang, '_')[0] = '\0';
+ }
+
+ if (g_list_find_custom (*list, lang, (GCompareFunc) strcmp)) {
+ /* this language is already part of the list */
+ g_free (lang);
+ return;
+ }
+
+ *list = g_list_append (*list, g_strdup (lang));
+}
+
+GList *
+empathy_spell_get_language_codes (void)
+{
+ EnchantBroker *broker;
+ GList *list_langs = NULL;
+
+ broker = enchant_broker_init ();
+ enchant_broker_list_dicts (broker, enumerate_dicts, &list_langs);
+ enchant_broker_free (broker);
+
+ return list_langs;
+}
+
+void
+empathy_spell_free_language_codes (GList *codes)
+{
+ g_list_foreach (codes, (GFunc) g_free, NULL);
+ g_list_free (codes);
+}
+
+gboolean
+empathy_spell_check (const gchar *word)
+{
+ gint enchant_result = 1;
+ const gchar *p;
+ gboolean digit;
+ gunichar c;
+ gint len;
+ GList *l;
+
+ g_return_val_if_fail (word != NULL, FALSE);
+
+ spell_setup_languages ();
+
+ if (!languages) {
+ DEBUG ("No languages to check against");
+ return TRUE;
+ }
+
+ /* Ignore certain cases like numbers, etc. */
+ for (p = word, digit = TRUE; *p && digit; p = g_utf8_next_char (p)) {
+ c = g_utf8_get_char (p);
+ digit = g_unichar_isdigit (c);
+ }
+
+ if (digit) {
+ /* We don't spell check digits. */
+ DEBUG ("Not spell checking word:'%s', it is all digits", word);
+ return TRUE;
+ }
+
+ len = strlen (word);
+ for (l = languages; l; l = l->next) {
+ SpellLanguage *lang;
+
+ lang = l->data;
+
+ enchant_result = enchant_dict_check (lang->speller, word, len);
+
+ if (enchant_result == 0) {
+ break;
+ }
+ }
+
+ return (enchant_result == 0);
+}
+
+GList *
+empathy_spell_get_suggestions (const gchar *word)
+{
+ gint len;
+ GList *l1;
+ GList *suggestion_list = NULL;
+
+ g_return_val_if_fail (word != NULL, NULL);
+
+ spell_setup_languages ();
+
+ len = strlen (word);
+
+ for (l1 = languages; l1; l1 = l1->next) {
+ SpellLanguage *lang;
+ gchar **suggestions;
+ gsize i, number_of_suggestions;
+
+ lang = l1->data;
+
+ suggestions = enchant_dict_suggest (lang->speller, word, len,
+ &number_of_suggestions);
+
+ for (i = 0; i < number_of_suggestions; i++) {
+ suggestion_list = g_list_append (suggestion_list,
+ g_strdup (suggestions[i]));
+ }
+
+ if (suggestions) {
+ enchant_dict_free_string_list (lang->speller, suggestions);
+ }
+ }
+
+ return suggestion_list;
+}
+
+gboolean
+empathy_spell_supported (void)
+{
+ if (g_getenv ("EMPATHY_SPELL_DISABLED")) {
+ DEBUG ("EMPATHY_SPELL_DISABLE env variable defined");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+#else /* not HAVE_ENCHANT */
+
+gboolean
+empathy_spell_supported (void)
+{
+ return FALSE;
+}
+
+GList *
+empathy_spell_get_suggestions (const gchar *word)
+{
+ DEBUG ("Support disabled, could not get suggestions");
+
+ return NULL;
+}
+
+gboolean
+empathy_spell_check (const gchar *word)
+{
+ DEBUG ("Support disabled, could not check spelling");
+
+ return TRUE;
+}
+
+const gchar *
+empathy_spell_get_language_name (const gchar *lang)
+{
+ DEBUG ("Support disabled, could not get language name");
+
+ return NULL;
+}
+
+GList *
+empathy_spell_get_language_codes (void)
+{
+ DEBUG ("Support disabled, could not get language codes");
+
+ return NULL;
+}
+
+void
+empathy_spell_free_language_codes (GList *codes)
+{
+}
+
+#endif /* HAVE_ENCHANT */
+
+
+void
+empathy_spell_free_suggestions (GList *suggestions)
+{
+ g_list_foreach (suggestions, (GFunc) g_free, NULL);
+ g_list_free (suggestions);
+}
+
diff --git a/trunk/libempathy-gtk/empathy-spell.h b/trunk/libempathy-gtk/empathy-spell.h
new file mode 100644
index 000000000..797997c0a
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-spell.h
@@ -0,0 +1,41 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ */
+
+#ifndef __EMPATHY_SPELL_H__
+#define __EMPATHY_SPELL_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+gboolean empathy_spell_supported (void);
+const gchar *empathy_spell_get_language_name (const gchar *code);
+GList *empathy_spell_get_language_codes (void);
+void empathy_spell_free_language_codes (GList *codes);
+gboolean empathy_spell_check (const gchar *word);
+GList * empathy_spell_get_suggestions (const gchar *word);
+void empathy_spell_free_suggestions (GList *suggestions);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_SPELL_H__ */
diff --git a/trunk/libempathy-gtk/empathy-theme-boxes.c b/trunk/libempathy-gtk/empathy-theme-boxes.c
new file mode 100644
index 000000000..8d3a813bd
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-theme-boxes.c
@@ -0,0 +1,801 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <libempathy/empathy-utils.h>
+#include "empathy-ui-utils.h"
+#include "empathy-theme-boxes.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+#define MARGIN 4
+#define HEADER_PADDING 2
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyThemeBoxes)
+typedef struct {
+ gchar *header_foreground;
+ gchar *header_background;
+ gchar *header_line_background;
+ gchar *text_foreground;
+ gchar *text_background;
+ gchar *action_foreground;
+ gchar *highlight_foreground;
+ gchar *time_foreground;
+ gchar *event_foreground;
+ gchar *invite_foreground;
+ gchar *link_foreground;
+} EmpathyThemeBoxesPriv;
+
+static void theme_boxes_finalize (GObject *object);
+static void theme_boxes_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void theme_boxes_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void theme_boxes_define_theme_tags (EmpathyTheme *theme,
+ EmpathyChatView *view);
+static void theme_boxes_update_view (EmpathyTheme *theme,
+ EmpathyChatView *view);
+static void theme_boxes_append_message (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message);
+static void theme_boxes_append_event (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ const gchar *str);
+static void theme_boxes_append_timestamp (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message,
+ gboolean show_date,
+ gboolean show_time);
+static void theme_boxes_append_spacing (EmpathyTheme *theme,
+ EmpathyChatView *view);
+
+enum {
+ PROP_0,
+ PROP_HEADER_FOREGROUND,
+ PROP_HEADER_BACKGROUND,
+ PROP_HEADER_LINE_BACKGROUND,
+ PROP_TEXT_FOREGROUND,
+ PROP_TEXT_BACKGROUND,
+ PROP_ACTION_FOREGROUND,
+ PROP_HIGHLIGHT_FOREGROUND,
+ PROP_TIME_FOREGROUND,
+ PROP_EVENT_FOREGROUND,
+ PROP_INVITE_FOREGROUND,
+ PROP_LINK_FOREGROUND
+};
+
+enum {
+ PROP_FLOP,
+ PROP_MY_PROP
+};
+
+G_DEFINE_TYPE (EmpathyThemeBoxes, empathy_theme_boxes, EMPATHY_TYPE_THEME);
+
+static void
+empathy_theme_boxes_class_init (EmpathyThemeBoxesClass *class)
+{
+ GObjectClass *object_class;
+ EmpathyThemeClass *theme_class;
+
+ object_class = G_OBJECT_CLASS (class);
+ theme_class = EMPATHY_THEME_CLASS (class);
+
+ object_class->finalize = theme_boxes_finalize;
+ object_class->get_property = theme_boxes_get_property;
+ object_class->set_property = theme_boxes_set_property;
+
+ theme_class->update_view = theme_boxes_update_view;
+ theme_class->append_message = theme_boxes_append_message;
+ theme_class->append_event = theme_boxes_append_event;
+ theme_class->append_timestamp = theme_boxes_append_timestamp;
+ theme_class->append_spacing = theme_boxes_append_spacing;
+
+ g_object_class_install_property (object_class,
+ PROP_HEADER_FOREGROUND,
+ g_param_spec_string ("header-foreground",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_HEADER_BACKGROUND,
+ g_param_spec_string ("header-background",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_HEADER_LINE_BACKGROUND,
+ g_param_spec_string ("header-line-background",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
+
+
+ g_object_class_install_property (object_class,
+ PROP_TEXT_FOREGROUND,
+ g_param_spec_string ("text-foreground",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_TEXT_BACKGROUND,
+ g_param_spec_string ("text-background",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_ACTION_FOREGROUND,
+ g_param_spec_string ("action-foreground",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_HIGHLIGHT_FOREGROUND,
+ g_param_spec_string ("highlight-foreground",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_TIME_FOREGROUND,
+ g_param_spec_string ("time-foreground",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_EVENT_FOREGROUND,
+ g_param_spec_string ("event-foreground",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_INVITE_FOREGROUND,
+ g_param_spec_string ("invite-foreground",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_LINK_FOREGROUND,
+ g_param_spec_string ("link-foreground",
+ "",
+ "",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof (EmpathyThemeBoxesPriv));
+}
+
+static void
+empathy_theme_boxes_init (EmpathyThemeBoxes *theme)
+{
+ EmpathyThemeBoxesPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (theme,
+ EMPATHY_TYPE_THEME_BOXES, EmpathyThemeBoxesPriv);
+
+ theme->priv = priv;
+}
+
+static void
+theme_boxes_finalize (GObject *object)
+{
+ EmpathyThemeBoxesPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ g_free (priv->header_foreground);
+ g_free (priv->header_background);
+ g_free (priv->header_line_background);
+ g_free (priv->text_foreground);
+ g_free (priv->text_background);
+ g_free (priv->action_foreground);
+ g_free (priv->highlight_foreground);
+ g_free (priv->time_foreground);
+ g_free (priv->event_foreground);
+ g_free (priv->invite_foreground);
+ g_free (priv->link_foreground);
+
+ (G_OBJECT_CLASS (empathy_theme_boxes_parent_class)->finalize) (object);
+}
+
+static void
+theme_boxes_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyThemeBoxesPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_HEADER_FOREGROUND:
+ g_value_set_string (value, priv->header_foreground);
+ break;
+ case PROP_HEADER_BACKGROUND:
+ g_value_set_string (value, priv->header_background);
+ break;
+ case PROP_HEADER_LINE_BACKGROUND:
+ g_value_set_string (value, priv->header_line_background);
+ break;
+ case PROP_TEXT_FOREGROUND:
+ g_value_set_string (value, priv->text_foreground);
+ break;
+ case PROP_TEXT_BACKGROUND:
+ g_value_set_string (value, priv->text_background);
+ break;
+ case PROP_ACTION_FOREGROUND:
+ g_value_set_string (value, priv->action_foreground);
+ break;
+ case PROP_HIGHLIGHT_FOREGROUND:
+ g_value_set_string (value, priv->highlight_foreground);
+ break;
+ case PROP_TIME_FOREGROUND:
+ g_value_set_string (value, priv->time_foreground);
+ break;
+ case PROP_EVENT_FOREGROUND:
+ g_value_set_string (value, priv->event_foreground);
+ break;
+ case PROP_INVITE_FOREGROUND:
+ g_value_set_string (value, priv->invite_foreground);
+ break;
+ case PROP_LINK_FOREGROUND:
+ g_value_set_string (value, priv->link_foreground);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+static void
+theme_boxes_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyThemeBoxesPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_HEADER_FOREGROUND:
+ g_free (priv->header_foreground);
+ priv->header_foreground = g_value_dup_string (value);
+ g_object_notify (object, "header-foreground");
+ break;
+ case PROP_HEADER_BACKGROUND:
+ g_free (priv->header_background);
+ priv->header_background = g_value_dup_string (value);
+ g_object_notify (object, "header-background");
+ break;
+ case PROP_HEADER_LINE_BACKGROUND:
+ g_free (priv->header_line_background);
+ priv->header_line_background = g_value_dup_string (value);
+ g_object_notify (object, "header-line_background");
+ break;
+ case PROP_TEXT_FOREGROUND:
+ g_free (priv->text_foreground);
+ priv->text_foreground = g_value_dup_string (value);
+ g_object_notify (object, "text-foreground");
+ break;
+ case PROP_TEXT_BACKGROUND:
+ g_free (priv->text_background);
+ priv->text_background = g_value_dup_string (value);
+ g_object_notify (object, "text-background");
+ break;
+ case PROP_ACTION_FOREGROUND:
+ g_free (priv->action_foreground);
+ priv->action_foreground = g_value_dup_string (value);
+ g_object_notify (object, "action-foreground");
+ break;
+ case PROP_HIGHLIGHT_FOREGROUND:
+ g_free (priv->highlight_foreground);
+ priv->highlight_foreground = g_value_dup_string (value);
+ g_object_notify (object, "highlight-foreground");
+ break;
+ case PROP_TIME_FOREGROUND:
+ g_free (priv->time_foreground);
+ priv->time_foreground = g_value_dup_string (value);
+ g_object_notify (object, "time-foreground");
+ break;
+ case PROP_EVENT_FOREGROUND:
+ g_free (priv->event_foreground);
+ priv->event_foreground = g_value_dup_string (value);
+ g_object_notify (object, "event-foreground");
+ break;
+ case PROP_INVITE_FOREGROUND:
+ g_free (priv->invite_foreground);
+ priv->invite_foreground = g_value_dup_string (value);
+ g_object_notify (object, "invite-foreground");
+ break;
+ case PROP_LINK_FOREGROUND:
+ g_free (priv->link_foreground);
+ priv->link_foreground = g_value_dup_string (value);
+ g_object_notify (object, "link-foreground");
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+theme_boxes_define_theme_tags (EmpathyTheme *theme, EmpathyChatView *view)
+{
+ EmpathyThemeBoxesPriv *priv;
+ GtkTextBuffer *buffer;
+ GtkTextTag *tag;
+
+ priv = GET_PRIV (theme);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ empathy_text_buffer_tag_set (buffer, "fancy-spacing",
+ "size", 3000,
+ "pixels-above-lines", 8,
+ NULL);
+
+ tag = empathy_text_buffer_tag_set (buffer, "fancy-header",
+ "weight", PANGO_WEIGHT_BOLD,
+ "pixels-above-lines", HEADER_PADDING,
+ "pixels-below-lines", HEADER_PADDING,
+ NULL);
+ if (priv->header_foreground) {
+ g_object_set (tag,
+ "foreground", priv->header_foreground,
+ "paragraph-background", priv->header_background,
+ NULL);
+ }
+
+ tag = empathy_text_buffer_tag_set (buffer, "fancy-header-line",
+ "size", 1,
+ NULL);
+ if (priv->header_line_background) {
+ g_object_set (tag,
+ "paragraph-background", priv->header_line_background,
+ NULL);
+ }
+
+ tag = empathy_text_buffer_tag_set (buffer, "fancy-body",
+ "pixels-above-lines", 4,
+ NULL);
+ if (priv->text_background) {
+ g_object_set (tag,
+ "paragraph-background", priv->text_background,
+ NULL);
+ }
+
+ if (priv->text_foreground) {
+ g_object_set (tag,
+ "foreground", priv->text_foreground,
+ NULL);
+ }
+
+ tag = empathy_text_buffer_tag_set (buffer, "fancy-action",
+ "style", PANGO_STYLE_ITALIC,
+ "pixels-above-lines", 4,
+ NULL);
+
+ if (priv->text_background) {
+ g_object_set (tag,
+ "paragraph-background", priv->text_background,
+ NULL);
+ }
+
+ if (priv->action_foreground) {
+ g_object_set (tag,
+ "foreground", priv->action_foreground,
+ NULL);
+ }
+
+ tag = empathy_text_buffer_tag_set (buffer, "fancy-highlight",
+ "weight", PANGO_WEIGHT_BOLD,
+ "pixels-above-lines", 4,
+ NULL);
+ if (priv->text_background) {
+ g_object_set (tag,
+ "paragraph-background", priv->text_background,
+ NULL);
+ }
+
+
+ if (priv->highlight_foreground) {
+ g_object_set (tag,
+ "foreground", priv->highlight_foreground,
+ NULL);
+ }
+
+ tag = empathy_text_buffer_tag_set (buffer, "fancy-time",
+ "justification", GTK_JUSTIFY_CENTER,
+ NULL);
+ if (priv->time_foreground) {
+ g_object_set (tag,
+ "foreground", priv->time_foreground,
+ NULL);
+ }
+
+ tag = empathy_text_buffer_tag_set (buffer, "fancy-event",
+ "justification", GTK_JUSTIFY_LEFT,
+ NULL);
+ if (priv->event_foreground) {
+ g_object_set (tag,
+ "foreground", priv->event_foreground,
+ NULL);
+ }
+
+ tag = empathy_text_buffer_tag_set (buffer, "invite", NULL);
+ if (priv->invite_foreground) {
+ g_object_set (tag,
+ "foreground", priv->invite_foreground,
+ NULL);
+ }
+
+ tag = empathy_text_buffer_tag_set (buffer, "fancy-link",
+ "underline", PANGO_UNDERLINE_SINGLE,
+ NULL);
+ if (priv->link_foreground) {
+ g_object_set (tag,
+ "foreground", priv->link_foreground,
+ NULL);
+ }
+}
+
+static void
+theme_boxes_update_view (EmpathyTheme *theme, EmpathyChatView *view)
+{
+ EmpathyThemeBoxesPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_THEME_BOXES (theme));
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+
+ priv = GET_PRIV (theme);
+
+ theme_boxes_define_theme_tags (theme, view);
+
+ empathy_chat_view_set_margin (view, MARGIN);
+}
+
+static void
+table_size_allocate_cb (GtkWidget *view,
+ GtkAllocation *allocation,
+ GtkWidget *box)
+{
+ gint width, height;
+
+ gtk_widget_get_size_request (box, NULL, &height);
+
+ width = allocation->width;
+
+ width -= \
+ gtk_text_view_get_right_margin (GTK_TEXT_VIEW (view)) - \
+ gtk_text_view_get_left_margin (GTK_TEXT_VIEW (view));
+ width -= 2 * MARGIN;
+ width -= 2 * HEADER_PADDING;
+
+ gtk_widget_set_size_request (box, width, height);
+}
+
+static void
+theme_boxes_maybe_append_header (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *msg)
+{
+ EmpathyThemeBoxesPriv *priv;
+ EmpathyContact *contact;
+ EmpathyContact *last_contact;
+ GdkPixbuf *avatar = NULL;
+ GtkTextBuffer *buffer;
+ const gchar *name;
+ GtkTextIter iter;
+ GtkWidget *label1, *label2;
+ GtkTextChildAnchor *anchor;
+ GtkWidget *box;
+ gchar *str;
+ time_t time;
+ gchar *tmp;
+ GtkTextIter start;
+ GdkColor color;
+ gboolean parse_success;
+
+ priv = GET_PRIV (theme);
+
+ contact = empathy_message_get_sender (msg);
+ name = empathy_contact_get_name (contact);
+ last_contact = empathy_chat_view_get_last_contact (view);
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ DEBUG ("Maybe add fancy header");
+
+ /* Only insert a header if the previously inserted block is not the same
+ * as this one. This catches all the different cases:
+ */
+ if (last_contact && empathy_contact_equal (last_contact, contact)) {
+ return;
+ }
+
+ empathy_theme_append_spacing (theme, view);
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name (buffer,
+ &iter,
+ "\n",
+ -1,
+ "fancy-header-line",
+ NULL);
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ anchor = gtk_text_buffer_create_child_anchor (buffer, &iter);
+
+ box = gtk_hbox_new (FALSE, 0);
+
+
+ if (empathy_theme_get_show_avatars (theme)) {
+ avatar = empathy_chat_view_get_avatar_pixbuf_with_cache (contact);
+ if (avatar) {
+ GtkWidget *image;
+
+ image = gtk_image_new_from_pixbuf (avatar);
+
+ gtk_box_pack_start (GTK_BOX (box), image,
+ FALSE, TRUE, 2);
+ }
+ }
+
+ g_signal_connect_object (view, "size-allocate",
+ G_CALLBACK (table_size_allocate_cb),
+ box, 0);
+
+ str = g_markup_printf_escaped ("<b>%s</b>", name);
+
+ label1 = g_object_new (GTK_TYPE_LABEL,
+ "label", str,
+ "use-markup", TRUE,
+ "xalign", 0.0,
+ NULL);
+
+ parse_success = priv->header_foreground &&
+ gdk_color_parse (priv->header_foreground, &color);
+
+ if (parse_success) {
+ gtk_widget_modify_fg (label1, GTK_STATE_NORMAL, &color);
+ }
+
+ g_free (str);
+
+ time = empathy_message_get_timestamp (msg);
+
+ tmp = empathy_time_to_string_local (time,
+ EMPATHY_TIME_FORMAT_DISPLAY_SHORT);
+ str = g_strdup_printf ("<i>%s</i>", tmp);
+ g_free (tmp);
+
+ label2 = g_object_new (GTK_TYPE_LABEL,
+ "label", str,
+ "use-markup", TRUE,
+ "xalign", 1.0,
+ NULL);
+
+ if (parse_success) {
+ gtk_widget_modify_fg (label2, GTK_STATE_NORMAL, &color);
+ }
+
+ g_free (str);
+
+ gtk_misc_set_alignment (GTK_MISC (label1), 0.0, 0.5);
+ gtk_misc_set_alignment (GTK_MISC (label2), 1.0, 0.5);
+
+ gtk_box_pack_start (GTK_BOX (box), label1, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (box), label2, TRUE, TRUE, 0);
+
+ gtk_text_view_add_child_at_anchor (GTK_TEXT_VIEW (view),
+ box,
+ anchor);
+
+ gtk_widget_show_all (box);
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ start = iter;
+ gtk_text_iter_backward_char (&start);
+ gtk_text_buffer_apply_tag_by_name (buffer,
+ "fancy-header",
+ &start, &iter);
+
+ gtk_text_buffer_insert_with_tags_by_name (buffer,
+ &iter,
+ "\n",
+ -1,
+ "fancy-header",
+ NULL);
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name (buffer,
+ &iter,
+ "\n",
+ -1,
+ "fancy-header-line",
+ NULL);
+}
+
+static void
+theme_boxes_append_message (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message)
+{
+ EmpathyContact *sender;
+
+ empathy_theme_maybe_append_date_and_time (theme, view, message);
+ theme_boxes_maybe_append_header (theme, view, message);
+
+ sender = empathy_message_get_sender (message);
+
+ if (empathy_message_get_tptype (message) == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION) {
+ gchar *body;
+
+ body = g_strdup_printf (" * %s %s",
+ empathy_contact_get_name (sender),
+ empathy_message_get_body (message));
+ empathy_theme_append_text (theme, view, body,
+ "fancy-action", "fancy-link");
+ } else {
+ empathy_theme_append_text (theme, view,
+ empathy_message_get_body (message),
+ "fancy-body", "fancy-link");
+ }
+}
+
+static void
+theme_boxes_append_event (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ const gchar *str)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ gchar *msg;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ empathy_theme_maybe_append_date_and_time (theme, view, NULL);
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+
+ msg = g_strdup_printf (" - %s\n", str);
+
+ gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
+ msg, -1,
+ "fancy-event",
+ NULL);
+ g_free (msg);
+}
+
+static void
+theme_boxes_append_timestamp (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message,
+ gboolean show_date,
+ gboolean show_time)
+{
+ GtkTextBuffer *buffer;
+ time_t timestamp;
+ GDate *date;
+ GtkTextIter iter;
+ GString *str;
+
+ if (!show_date) {
+ return;
+ }
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ date = empathy_message_get_date_and_time (message, &timestamp);
+
+ str = g_string_new (NULL);
+
+ if (show_time || show_date) {
+ empathy_theme_append_spacing (theme, view);
+
+ g_string_append (str, "- ");
+ }
+
+ if (show_date) {
+ gchar buf[256];
+
+ g_date_strftime (buf, 256, _("%A %d %B %Y"), date);
+ g_string_append (str, buf);
+
+ if (show_time) {
+ g_string_append (str, ", ");
+ }
+ }
+
+ g_date_free (date);
+
+ if (show_time) {
+ gchar *tmp;
+
+ tmp = empathy_time_to_string_local (timestamp, EMPATHY_TIME_FORMAT_DISPLAY_SHORT);
+ g_string_append (str, tmp);
+ g_free (tmp);
+ }
+
+ if (show_time || show_date) {
+ g_string_append (str, " -\n");
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name (buffer,
+ &iter,
+ str->str, -1,
+ "fancy-time",
+ NULL);
+
+ empathy_chat_view_set_last_timestamp (view, timestamp);
+ }
+
+ g_string_free (str, TRUE);
+
+}
+
+static void
+theme_boxes_append_spacing (EmpathyTheme *theme,
+ EmpathyChatView *view)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ g_return_if_fail (EMPATHY_IS_THEME (theme));
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name (buffer,
+ &iter,
+ "\n",
+ -1,
+ "cut",
+ "fancy-spacing",
+ NULL);
+}
+
diff --git a/trunk/libempathy-gtk/empathy-theme-boxes.h b/trunk/libempathy-gtk/empathy-theme-boxes.h
new file mode 100644
index 000000000..5f6d15cd2
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-theme-boxes.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EMPATHY_THEME_BOXES_H__
+#define __EMPATHY_THEME_BOXES_H__
+
+#include <glib-object.h>
+
+#include "empathy-theme.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_THEME_BOXES (empathy_theme_boxes_get_type ())
+#define EMPATHY_THEME_BOXES(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_THEME_BOXES, EmpathyThemeBoxes))
+#define EMPATHY_THEME_BOXES_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_THEME_BOXES, EmpathyThemeBoxesClass))
+#define EMPATHY_IS_THEME_BOXES(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_THEME_BOXES))
+#define EMPATHY_IS_THEME_BOXES_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_THEME_BOXES))
+#define EMPATHY_THEME_BOXES_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_THEME_BOXES, EmpathyThemeBoxesClass))
+
+typedef struct _EmpathyThemeBoxes EmpathyThemeBoxes;
+typedef struct _EmpathyThemeBoxesClass EmpathyThemeBoxesClass;
+
+struct _EmpathyThemeBoxes {
+ EmpathyTheme parent;
+ gpointer priv;
+};
+
+struct _EmpathyThemeBoxesClass {
+ EmpathyThemeClass parent_class;
+};
+
+GType empathy_theme_boxes_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __EMPATHY_THEME_BOXES_H__ */
+
diff --git a/trunk/libempathy-gtk/empathy-theme-irc.c b/trunk/libempathy-gtk/empathy-theme-irc.c
new file mode 100644
index 000000000..fd315b2b1
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-theme-irc.c
@@ -0,0 +1,348 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <glib/gi18n.h>
+
+#include <libempathy/empathy-utils.h>
+#include "empathy-chat.h"
+#include "empathy-ui-utils.h"
+#include "empathy-theme-irc.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyThemeIrc)
+typedef struct {
+ gint my_prop;
+} EmpathyThemeIrcPriv;
+
+static void theme_irc_finalize (GObject *object);
+static void theme_irc_update_view (EmpathyTheme *theme,
+ EmpathyChatView *view);
+static void theme_irc_append_message (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message);
+static void theme_irc_append_event (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ const gchar *str);
+static void theme_irc_append_timestamp (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message,
+ gboolean show_date,
+ gboolean show_time);
+static void theme_irc_append_spacing (EmpathyTheme *theme,
+ EmpathyChatView *view);
+
+
+enum {
+ PROP_0,
+ PROP_MY_PROP
+};
+
+G_DEFINE_TYPE (EmpathyThemeIrc, empathy_theme_irc, EMPATHY_TYPE_THEME);
+
+static void
+empathy_theme_irc_class_init (EmpathyThemeIrcClass *class)
+{
+ GObjectClass *object_class;
+ EmpathyThemeClass *theme_class;
+
+ object_class = G_OBJECT_CLASS (class);
+ theme_class = EMPATHY_THEME_CLASS (class);
+
+ object_class->finalize = theme_irc_finalize;
+
+ theme_class->update_view = theme_irc_update_view;
+ theme_class->append_message = theme_irc_append_message;
+ theme_class->append_event = theme_irc_append_event;
+ theme_class->append_timestamp = theme_irc_append_timestamp;
+ theme_class->append_spacing = theme_irc_append_spacing;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyThemeIrcPriv));
+}
+
+static void
+empathy_theme_irc_init (EmpathyThemeIrc *theme)
+{
+ EmpathyThemeIrcPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (theme,
+ EMPATHY_TYPE_THEME_IRC, EmpathyThemeIrcPriv);
+
+ theme->priv = priv;
+}
+
+static void
+theme_irc_finalize (GObject *object)
+{
+ EmpathyThemeIrcPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ (G_OBJECT_CLASS (empathy_theme_irc_parent_class)->finalize) (object);
+}
+
+static void
+theme_irc_apply_theme_classic (EmpathyTheme *theme, EmpathyChatView *view)
+{
+ EmpathyThemeIrcPriv *priv;
+ GtkTextBuffer *buffer;
+
+ priv = GET_PRIV (theme);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ empathy_text_buffer_tag_set (buffer, "irc-spacing",
+ "size", 2000,
+ NULL);
+
+ empathy_text_buffer_tag_set (buffer, "irc-nick-self",
+ "foreground", "sea green",
+ NULL);
+
+ empathy_text_buffer_tag_set (buffer, "irc-body-self",
+ /* To get the default theme color: */
+ "foreground-set", FALSE,
+ NULL);
+
+ empathy_text_buffer_tag_set (buffer, "irc-action-self",
+ "foreground", "brown4",
+ "style", PANGO_STYLE_ITALIC,
+ NULL);
+
+ empathy_text_buffer_tag_set (buffer, "irc-nick-highlight",
+ "foreground", "indian red",
+ "weight", PANGO_WEIGHT_BOLD,
+ NULL);
+
+ empathy_text_buffer_tag_set (buffer, "irc-nick-other",
+ "foreground", "skyblue4",
+ NULL);
+
+ empathy_text_buffer_tag_set (buffer, "irc-body-other",
+ /* To get the default theme color: */
+ "foreground-set", FALSE,
+ NULL);
+
+ empathy_text_buffer_tag_set (buffer, "irc-action-other",
+ "foreground", "brown4",
+ "style", PANGO_STYLE_ITALIC,
+ NULL);
+
+ empathy_text_buffer_tag_set (buffer, "irc-time",
+ "foreground", "darkgrey",
+ "justification", GTK_JUSTIFY_CENTER,
+ NULL);
+
+ empathy_text_buffer_tag_set (buffer, "irc-event",
+ "foreground", "PeachPuff4",
+ "justification", GTK_JUSTIFY_LEFT,
+ NULL);
+
+ empathy_text_buffer_tag_set (buffer, "invite",
+ "foreground", "sienna",
+ NULL);
+
+ empathy_text_buffer_tag_set (buffer, "irc-link",
+ "foreground", "steelblue",
+ "underline", PANGO_UNDERLINE_SINGLE,
+ NULL);
+}
+
+
+static void
+theme_irc_update_view (EmpathyTheme *theme, EmpathyChatView *view)
+{
+ theme_irc_apply_theme_classic (theme, view);
+ empathy_chat_view_set_margin (view, 3);
+}
+
+static void
+theme_irc_append_message (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message)
+{
+ GtkTextBuffer *buffer;
+ const gchar *name;
+ const gchar *nick_tag;
+ const gchar *body_tag;
+ GtkTextIter iter;
+ gchar *tmp;
+ EmpathyContact *contact;
+
+ empathy_theme_maybe_append_date_and_time (theme, view, message);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ contact = empathy_message_get_sender (message);
+ name = empathy_contact_get_name (contact);
+
+ if (empathy_message_get_tptype (message) == TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION) {
+ if (empathy_contact_is_user (contact)) {
+ body_tag = "irc-action-self";
+ } else {
+ body_tag = "irc-action-other";
+ }
+
+ tmp = g_strdup_printf (" * %s %s",
+ empathy_contact_get_name (contact),
+ empathy_message_get_body (message));
+ empathy_theme_append_text (theme, view, tmp,
+ body_tag, "irc-link");
+ g_free (tmp);
+ return;
+ }
+
+ if (empathy_contact_is_user (contact)) {
+ nick_tag = "irc-nick-self";
+ body_tag = "irc-body-self";
+ } else {
+ if (empathy_message_should_highlight (message)) {
+ nick_tag = "irc-nick-highlight";
+ } else {
+ nick_tag = "irc-nick-other";
+ }
+
+ body_tag = "irc-body-other";
+ }
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+
+ /* The nickname. */
+ tmp = g_strdup_printf ("%s: ", name);
+ gtk_text_buffer_insert_with_tags_by_name (buffer,
+ &iter,
+ tmp,
+ -1,
+ "cut",
+ nick_tag,
+ NULL);
+ g_free (tmp);
+
+ /* The text body. */
+ empathy_theme_append_text (theme, view,
+ empathy_message_get_body (message),
+ body_tag, "irc-link");
+}
+
+static void
+theme_irc_append_event (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ const gchar *str)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ gchar *msg;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ empathy_theme_maybe_append_date_and_time (theme, view, NULL);
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+
+ msg = g_strdup_printf (" - %s\n", str);
+ gtk_text_buffer_insert_with_tags_by_name (buffer, &iter,
+ msg, -1,
+ "irc-event",
+ NULL);
+ g_free (msg);
+}
+
+static void
+theme_irc_append_timestamp (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message,
+ gboolean show_date,
+ gboolean show_time)
+{
+ GtkTextBuffer *buffer;
+ time_t timestamp;
+ GDate *date;
+ GtkTextIter iter;
+ GString *str;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ date = empathy_message_get_date_and_time (message, &timestamp);
+
+ str = g_string_new (NULL);
+
+ if (show_time || show_date) {
+ empathy_theme_append_spacing (theme, view);
+
+ g_string_append (str, "- ");
+ }
+
+ if (show_date) {
+ gchar buf[256];
+
+ g_date_strftime (buf, 256, _("%A %d %B %Y"), date);
+ g_string_append (str, buf);
+
+ if (show_time) {
+ g_string_append (str, ", ");
+ }
+ }
+
+ g_date_free (date);
+
+ if (show_time) {
+ gchar *tmp;
+
+ tmp = empathy_time_to_string_local (timestamp, EMPATHY_TIME_FORMAT_DISPLAY_SHORT);
+ g_string_append (str, tmp);
+ g_free (tmp);
+ }
+
+ if (show_time || show_date) {
+ g_string_append (str, " -\n");
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name (buffer,
+ &iter,
+ str->str, -1,
+ "irc-time",
+ NULL);
+
+ empathy_chat_view_set_last_timestamp (view, timestamp);
+ }
+
+ g_string_free (str, TRUE);
+}
+
+static void
+theme_irc_append_spacing (EmpathyTheme *theme,
+ EmpathyChatView *view)
+{
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+
+ g_return_if_fail (EMPATHY_IS_THEME (theme));
+ g_return_if_fail (EMPATHY_IS_CHAT_VIEW (view));
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert_with_tags_by_name (buffer,
+ &iter,
+ "\n",
+ -1,
+ "cut",
+ "irc-spacing",
+ NULL);
+}
+
diff --git a/trunk/libempathy-gtk/empathy-theme-irc.h b/trunk/libempathy-gtk/empathy-theme-irc.h
new file mode 100644
index 000000000..0dbe15528
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-theme-irc.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EMPATHY_THEME_IRC_H__
+#define __EMPATHY_THEME_IRC_H__
+
+#include <glib-object.h>
+
+#include "empathy-theme.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_THEME_IRC (empathy_theme_irc_get_type ())
+#define EMPATHY_THEME_IRC(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_THEME_IRC, EmpathyThemeIrc))
+#define EMPATHY_THEME_IRC_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_THEME_IRC, EmpathyThemeIrcClass))
+#define EMPATHY_IS_THEME_IRC(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_THEME_IRC))
+#define EMPATHY_IS_THEME_IRC_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_THEME_IRC))
+#define EMPATHY_THEME_IRC_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_THEME_IRC, EmpathyThemeIrcClass))
+
+typedef struct _EmpathyThemeIrc EmpathyThemeIrc;
+typedef struct _EmpathyThemeIrcClass EmpathyThemeIrcClass;
+
+struct _EmpathyThemeIrc {
+ EmpathyTheme parent;
+ gpointer priv;
+};
+
+struct _EmpathyThemeIrcClass {
+ EmpathyThemeClass parent_class;
+};
+
+GType empathy_theme_irc_get_type (void) G_GNUC_CONST;
+
+G_END_DECLS
+
+#endif /* __EMPATHY_THEME_IRC_H__ */
+
diff --git a/trunk/libempathy-gtk/empathy-theme-manager.c b/trunk/libempathy-gtk/empathy-theme-manager.c
new file mode 100644
index 000000000..1bcb4204f
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-theme-manager.c
@@ -0,0 +1,429 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-chat-view.h"
+#include "empathy-conf.h"
+#include "empathy-theme.h"
+#include "empathy-theme-boxes.h"
+#include "empathy-theme-irc.h"
+#include "empathy-theme-manager.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyThemeManager)
+typedef struct {
+ gchar *name;
+ guint name_notify_id;
+
+ gboolean show_avatars;
+ guint show_avatars_notify_id;
+
+ EmpathyTheme *clean_theme;
+ EmpathyTheme *simple_theme;
+ EmpathyTheme *blue_theme;
+ EmpathyTheme *classic_theme;
+
+ GtkSettings *settings;
+} EmpathyThemeManagerPriv;
+
+static void theme_manager_finalize (GObject *object);
+static void theme_manager_notify_name_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data);
+
+static void theme_manager_notify_show_avatars_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data);
+static void theme_manager_apply_theme (EmpathyThemeManager *manager,
+ EmpathyChatView *view,
+ const gchar *name);
+
+enum {
+ THEME_CHANGED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
+static const gchar *themes[] = {
+ "classic", N_("Classic"),
+ "simple", N_("Simple"),
+ "clean", N_("Clean"),
+ "blue", N_("Blue"),
+ NULL
+};
+
+G_DEFINE_TYPE (EmpathyThemeManager, empathy_theme_manager, G_TYPE_OBJECT);
+
+static void
+theme_manager_gdk_color_to_hex (GdkColor *gdk_color, gchar *str_color)
+{
+ g_snprintf (str_color, 10,
+ "#%02x%02x%02x",
+ gdk_color->red >> 8,
+ gdk_color->green >> 8,
+ gdk_color->blue >> 8);
+}
+
+ static void
+theme_manager_color_hash_notify_cb (EmpathyThemeManager *manager)
+{
+ EmpathyThemeManagerPriv *priv;
+ GtkStyle *style;
+ gchar color[10];
+
+ priv = GET_PRIV (manager);
+
+ style = gtk_widget_get_default_style ();
+
+ g_object_freeze_notify (G_OBJECT (priv->simple_theme));
+
+ theme_manager_gdk_color_to_hex (&style->base[GTK_STATE_SELECTED], color);
+ g_object_set (priv->simple_theme,
+ "action-foreground", color,
+ "link-foreground", color,
+ NULL);
+
+ theme_manager_gdk_color_to_hex (&style->bg[GTK_STATE_SELECTED], color);
+ g_object_set (priv->simple_theme,
+ "header-background", color,
+ NULL);
+
+ theme_manager_gdk_color_to_hex (&style->dark[GTK_STATE_SELECTED], color);
+ g_object_set (priv->simple_theme,
+ "header-line-background", color,
+ NULL);
+
+ theme_manager_gdk_color_to_hex (&style->fg[GTK_STATE_SELECTED], color);
+ g_object_set (priv->simple_theme,
+ "header-foreground", color,
+ NULL);
+
+ g_object_thaw_notify (G_OBJECT (priv->simple_theme));
+
+#if 0
+
+FIXME: Make that work, it should update color when theme changes but it
+ doesnt seems to work with all themes.
+
+ g_object_get (priv->settings,
+ "color-hash", &color_hash,
+ NULL);
+
+ /*
+ * base_color: #ffffffffffff
+ * fg_color: #000000000000
+ * bg_color: #e6e6e7e7e8e8
+ * text_color: #000000000000
+ * selected_bg_color: #58589a9adbdb
+ * selected_fg_color: #ffffffffffff
+ */
+
+ color = g_hash_table_lookup (color_hash, "base_color");
+ if (color) {
+ theme_manager_gdk_color_to_hex (color, color_str);
+ g_object_set (priv->simple_theme,
+ "action-foreground", color_str,
+ "link-foreground", color_str,
+ NULL);
+ }
+
+ color = g_hash_table_lookup (color_hash, "selected_bg_color");
+ if (color) {
+ theme_manager_gdk_color_to_hex (color, color_str);
+ g_object_set (priv->simple_theme,
+ "header-background", color_str,
+ NULL);
+ }
+
+ color = g_hash_table_lookup (color_hash, "bg_color");
+ if (color) {
+ GdkColor tmp;
+
+ tmp = *color;
+ tmp.red /= 2;
+ tmp.green /= 2;
+ tmp.blue /= 2;
+ theme_manager_gdk_color_to_hex (&tmp, color_str);
+ g_object_set (priv->simple_theme,
+ "header-line-background", color_str,
+ NULL);
+ }
+
+ color = g_hash_table_lookup (color_hash, "selected_fg_color");
+ if (color) {
+ theme_manager_gdk_color_to_hex (color, color_str);
+ g_object_set (priv->simple_theme,
+ "header-foreground", color_str,
+ NULL);
+ }
+
+ g_hash_table_unref (color_hash);
+
+#endif
+}
+
+static void
+empathy_theme_manager_class_init (EmpathyThemeManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ signals[THEME_CHANGED] =
+ g_signal_new ("theme-changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ g_type_class_add_private (object_class, sizeof (EmpathyThemeManagerPriv));
+
+ object_class->finalize = theme_manager_finalize;
+}
+
+static void
+empathy_theme_manager_init (EmpathyThemeManager *manager)
+{
+ EmpathyThemeManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
+ EMPATHY_TYPE_THEME_MANAGER, EmpathyThemeManagerPriv);
+
+ manager->priv = priv;
+ priv->name_notify_id =
+ empathy_conf_notify_add (empathy_conf_get (),
+ EMPATHY_PREFS_CHAT_THEME,
+ theme_manager_notify_name_cb,
+ manager);
+
+ empathy_conf_get_string (empathy_conf_get (),
+ EMPATHY_PREFS_CHAT_THEME,
+ &priv->name);
+
+ /* Unused right now, but will be used soon. */
+ priv->show_avatars_notify_id =
+ empathy_conf_notify_add (empathy_conf_get (),
+ EMPATHY_PREFS_UI_SHOW_AVATARS,
+ theme_manager_notify_show_avatars_cb,
+ manager);
+
+ empathy_conf_get_bool (empathy_conf_get (),
+ EMPATHY_PREFS_UI_SHOW_AVATARS,
+ &priv->show_avatars);
+
+ priv->settings = gtk_settings_get_default ();
+ g_signal_connect_swapped (priv->settings, "notify::color-hash",
+ G_CALLBACK (theme_manager_color_hash_notify_cb),
+ manager);
+
+ priv->simple_theme = g_object_new (EMPATHY_TYPE_THEME_BOXES, NULL);
+ theme_manager_color_hash_notify_cb (manager);
+
+ priv->clean_theme = g_object_new (EMPATHY_TYPE_THEME_BOXES,
+ "header-foreground", "black",
+ "header-background", "#efefdf",
+ "header_line_background", "#e3e3d3",
+ "action_foreground", "brown4",
+ "time_foreground", "darkgrey",
+ "event_foreground", "darkgrey",
+ "invite_foreground", "sienna",
+ "link_foreground","#49789e",
+ NULL);
+
+ priv->blue_theme = g_object_new (EMPATHY_TYPE_THEME_BOXES,
+ "header_foreground", "black",
+ "header_background", "#88a2b4",
+ "header_line_background", "#7f96a4",
+ "text_foreground", "black",
+ "text_background", "#adbdc8",
+ "highlight_foreground", "black",
+ "action_foreground", "brown4",
+ "time_foreground", "darkgrey",
+ "event_foreground", "#7f96a4",
+ "invite_foreground", "sienna",
+ "link_foreground", "#49789e",
+ NULL);
+
+ priv->classic_theme = g_object_new (EMPATHY_TYPE_THEME_IRC, NULL);
+}
+
+static void
+theme_manager_finalize (GObject *object)
+{
+ EmpathyThemeManagerPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ empathy_conf_notify_remove (empathy_conf_get (), priv->name_notify_id);
+ empathy_conf_notify_remove (empathy_conf_get (), priv->show_avatars_notify_id);
+
+ g_free (priv->name);
+
+ g_object_unref (priv->clean_theme);
+ g_object_unref (priv->simple_theme);
+ g_object_unref (priv->blue_theme);
+ g_object_unref (priv->classic_theme);
+
+ G_OBJECT_CLASS (empathy_theme_manager_parent_class)->finalize (object);
+}
+
+static void
+theme_manager_notify_name_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ EmpathyThemeManager *manager;
+ EmpathyThemeManagerPriv *priv;
+ gchar *name;
+
+ manager = user_data;
+ priv = GET_PRIV (manager);
+
+ g_free (priv->name);
+
+ name = NULL;
+ if (!empathy_conf_get_string (conf, key, &name) ||
+ name == NULL || name[0] == 0) {
+ priv->name = g_strdup ("classic");
+ g_free (name);
+ } else {
+ priv->name = name;
+ }
+
+ g_signal_emit (manager, signals[THEME_CHANGED], 0, NULL);
+}
+
+static void
+theme_manager_notify_show_avatars_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ EmpathyThemeManager *manager;
+ EmpathyThemeManagerPriv *priv;
+ gboolean value;
+
+ manager = user_data;
+ priv = GET_PRIV (manager);
+
+ if (!empathy_conf_get_bool (conf, key, &value)) {
+ priv->show_avatars = FALSE;
+ } else {
+ priv->show_avatars = value;
+ }
+}
+
+static gboolean
+theme_manager_ensure_theme_exists (const gchar *name)
+{
+ gint i;
+
+ if (G_STR_EMPTY (name)) {
+ return FALSE;
+ }
+
+ for (i = 0; themes[i]; i += 2) {
+ if (strcmp (themes[i], name) == 0) {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static void
+theme_manager_apply_theme (EmpathyThemeManager *manager,
+ EmpathyChatView *view,
+ const gchar *name)
+{
+ EmpathyThemeManagerPriv *priv;
+ EmpathyTheme *theme;
+
+ priv = GET_PRIV (manager);
+
+ /* Make sure all tags are present. Note: not useful now but when we have
+ * user defined theme it will be.
+ */
+ if (theme_manager_ensure_theme_exists (name)) {
+ if (strcmp (name, "clean") == 0) {
+ theme = priv->clean_theme;
+ }
+ else if (strcmp (name, "simple") == 0) {
+ theme = priv->simple_theme;
+ }
+ else if (strcmp (name, "blue") == 0) {
+ theme = priv->blue_theme;
+ } else {
+ theme = priv->classic_theme;
+ }
+ } else {
+ theme = priv->classic_theme;
+ }
+
+ empathy_chat_view_set_theme (view, theme);
+}
+
+EmpathyThemeManager *
+empathy_theme_manager_get (void)
+{
+ static EmpathyThemeManager *manager = NULL;
+
+ if (!manager) {
+ manager = g_object_new (EMPATHY_TYPE_THEME_MANAGER, NULL);
+ }
+
+ return manager;
+}
+
+const gchar **
+empathy_theme_manager_get_themes (void)
+{
+ return themes;
+}
+
+void
+empathy_theme_manager_apply (EmpathyThemeManager *manager,
+ EmpathyChatView *view,
+ const gchar *name)
+{
+ EmpathyThemeManagerPriv *priv;
+
+ priv = GET_PRIV (manager);
+
+ theme_manager_apply_theme (manager, view, name);
+}
+
+void
+empathy_theme_manager_apply_saved (EmpathyThemeManager *manager,
+ EmpathyChatView *view)
+{
+ EmpathyThemeManagerPriv *priv;
+
+ priv = GET_PRIV (manager);
+
+ theme_manager_apply_theme (manager, view, priv->name);
+}
+
diff --git a/trunk/libempathy-gtk/empathy-theme-manager.h b/trunk/libempathy-gtk/empathy-theme-manager.h
new file mode 100644
index 000000000..5c0f579b9
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-theme-manager.h
@@ -0,0 +1,58 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EMPATHY_THEME_MANAGER_H__
+#define __EMPATHY_THEME_MANAGER_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_THEME_MANAGER (empathy_theme_manager_get_type ())
+#define EMPATHY_THEME_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_THEME_MANAGER, EmpathyThemeManager))
+#define EMPATHY_THEME_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_THEME_MANAGER, EmpathyThemeManagerClass))
+#define EMPATHY_IS_THEME_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_THEME_MANAGER))
+#define EMPATHY_IS_THEME_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_THEME_MANAGER))
+#define EMPATHY_THEME_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_THEME_MANAGER, EmpathyThemeManagerClass))
+
+typedef struct _EmpathyThemeManager EmpathyThemeManager;
+typedef struct _EmpathyThemeManagerClass EmpathyThemeManagerClass;
+
+struct _EmpathyThemeManager {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyThemeManagerClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_theme_manager_get_type (void) G_GNUC_CONST;
+EmpathyThemeManager *empathy_theme_manager_get (void);
+const gchar ** empathy_theme_manager_get_themes (void);
+void empathy_theme_manager_apply (EmpathyThemeManager *manager,
+ EmpathyChatView *view,
+ const gchar *theme);
+void empathy_theme_manager_apply_saved (EmpathyThemeManager *manager,
+ EmpathyChatView *view);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_THEME_MANAGER_H__ */
diff --git a/trunk/libempathy-gtk/empathy-theme.c b/trunk/libempathy-gtk/empathy-theme.c
new file mode 100644
index 000000000..b1afa51ca
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-theme.c
@@ -0,0 +1,410 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+
+#include <libempathy/empathy-utils.h>
+
+#include "empathy-chat.h"
+#include "empathy-conf.h"
+#include "empathy-theme.h"
+#include "empathy-smiley-manager.h"
+
+/* Number of seconds between timestamps when using normal mode, 5 minutes. */
+#define TIMESTAMP_INTERVAL 300
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTheme)
+typedef struct {
+ EmpathySmileyManager *smiley_manager;
+ gboolean show_avatars;
+} EmpathyThemePriv;
+
+static void theme_finalize (GObject *object);
+static void theme_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void theme_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+
+
+G_DEFINE_TYPE (EmpathyTheme, empathy_theme, G_TYPE_OBJECT);
+
+enum {
+ PROP_0,
+ PROP_SHOW_AVATARS
+};
+
+static void
+empathy_theme_class_init (EmpathyThemeClass *class)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (class);
+
+ object_class->finalize = theme_finalize;
+ object_class->get_property = theme_get_property;
+ object_class->set_property = theme_set_property;
+
+ class->update_view = NULL;
+ class->append_message = NULL;
+ class->append_event = NULL;
+ class->append_timestamp = NULL;
+ class->append_spacing = NULL;
+
+ g_object_class_install_property (object_class,
+ PROP_SHOW_AVATARS,
+ g_param_spec_boolean ("show-avatars",
+ "", "",
+ TRUE,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof (EmpathyThemePriv));
+}
+
+static void
+empathy_theme_init (EmpathyTheme *theme)
+{
+ EmpathyThemePriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (theme,
+ EMPATHY_TYPE_THEME, EmpathyThemePriv);
+
+ theme->priv = priv;
+ priv->smiley_manager = empathy_smiley_manager_new ();
+}
+
+static void
+theme_finalize (GObject *object)
+{
+ EmpathyThemePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ if (priv->smiley_manager) {
+ g_object_unref (priv->smiley_manager);
+ }
+
+ (G_OBJECT_CLASS (empathy_theme_parent_class)->finalize) (object);
+}
+
+static void
+theme_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyThemePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_SHOW_AVATARS:
+ g_value_set_boolean (value, priv->show_avatars);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+static void
+theme_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyThemePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_SHOW_AVATARS:
+ empathy_theme_set_show_avatars (EMPATHY_THEME (object),
+ g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ }
+}
+
+void
+empathy_theme_maybe_append_date_and_time (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message)
+{
+ time_t timestamp;
+ GDate *date, *last_date;
+ gboolean append_date, append_time;
+
+ date = empathy_message_get_date_and_time (message, &timestamp);
+
+ last_date = g_date_new ();
+ g_date_set_time_t (last_date, empathy_chat_view_get_last_timestamp (view));
+
+ append_date = FALSE;
+ append_time = FALSE;
+
+ if (g_date_compare (date, last_date) > 0) {
+ append_date = TRUE;
+ append_time = TRUE;
+ }
+
+ g_date_free (last_date);
+ g_date_free (date);
+
+ if (empathy_chat_view_get_last_timestamp (view) + TIMESTAMP_INTERVAL < timestamp) {
+ append_time = TRUE;
+ }
+
+ if (append_time || append_date) {
+ empathy_theme_append_timestamp (theme, view, message,
+ append_date, append_time);
+ }
+}
+
+void
+empathy_theme_update_view (EmpathyTheme *theme,
+ EmpathyChatView *view)
+{
+ if (!EMPATHY_THEME_GET_CLASS(theme)->update_view) {
+ g_error ("Theme must override update_view");
+ }
+
+ return EMPATHY_THEME_GET_CLASS(theme)->update_view (theme, view);
+}
+
+void
+empathy_theme_append_message (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message)
+{
+ if (!EMPATHY_THEME_GET_CLASS(theme)->append_message) {
+ g_warning ("Theme should override append_message");
+ return;
+ }
+
+ EMPATHY_THEME_GET_CLASS(theme)->append_message (theme, view, message);
+}
+
+static void
+theme_insert_text_with_emoticons (GtkTextBuffer *buf,
+ GtkTextIter *iter,
+ const gchar *str,
+ EmpathySmileyManager *smiley_manager)
+{
+ gboolean use_smileys = FALSE;
+ GSList *smileys, *l;
+
+ empathy_conf_get_bool (empathy_conf_get (),
+ EMPATHY_PREFS_CHAT_SHOW_SMILEYS,
+ &use_smileys);
+
+ if (!use_smileys) {
+ gtk_text_buffer_insert (buf, iter, str, -1);
+ return;
+ }
+
+ smileys = empathy_smiley_manager_parse (smiley_manager, str);
+ for (l = smileys; l; l = l->next) {
+ EmpathySmiley *smiley;
+
+ smiley = l->data;
+ if (smiley->pixbuf) {
+ gtk_text_buffer_insert_pixbuf (buf, iter, smiley->pixbuf);
+ } else {
+ gtk_text_buffer_insert (buf, iter, smiley->str, -1);
+ }
+ empathy_smiley_free (smiley);
+ }
+ g_slist_free (smileys);
+}
+
+void
+empathy_theme_append_text (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ const gchar *body,
+ const gchar *tag,
+ const gchar *link_tag)
+{
+ EmpathyThemePriv *priv;
+ GtkTextBuffer *buffer;
+ GtkTextIter start_iter, end_iter;
+ GtkTextMark *mark;
+ GtkTextIter iter;
+ gint num_matches, i;
+ GArray *start, *end;
+
+ priv = GET_PRIV (theme);
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ gtk_text_buffer_get_end_iter (buffer, &start_iter);
+ mark = gtk_text_buffer_create_mark (buffer, NULL, &start_iter, TRUE);
+
+ start = g_array_new (FALSE, FALSE, sizeof (gint));
+ end = g_array_new (FALSE, FALSE, sizeof (gint));
+
+ num_matches = empathy_regex_match (EMPATHY_REGEX_ALL, body, start, end);
+
+ if (num_matches == 0) {
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ theme_insert_text_with_emoticons (buffer, &iter, body, priv->smiley_manager);
+ } else {
+ gint last = 0;
+ gint s = 0, e = 0;
+ gchar *tmp;
+
+ for (i = 0; i < num_matches; i++) {
+ s = g_array_index (start, gint, i);
+ e = g_array_index (end, gint, i);
+
+ if (s > last) {
+ tmp = empathy_substring (body, last, s);
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ theme_insert_text_with_emoticons (buffer,
+ &iter,
+ tmp,
+ priv->smiley_manager);
+ g_free (tmp);
+ }
+
+ tmp = empathy_substring (body, s, e);
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ if (!link_tag) {
+ gtk_text_buffer_insert (buffer, &iter,
+ tmp, -1);
+ } {
+ gtk_text_buffer_insert_with_tags_by_name (buffer,
+ &iter,
+ tmp,
+ -1,
+ link_tag,
+ "link",
+ NULL);
+ }
+
+ g_free (tmp);
+
+ last = e;
+ }
+
+ if (e < strlen (body)) {
+ tmp = empathy_substring (body, e, strlen (body));
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ theme_insert_text_with_emoticons (buffer,
+ &iter,
+ tmp,
+ priv->smiley_manager);
+ g_free (tmp);
+ }
+ }
+
+ g_array_free (start, TRUE);
+ g_array_free (end, TRUE);
+
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert (buffer, &iter, "\n", 1);
+
+ /* Apply the style to the inserted text. */
+ gtk_text_buffer_get_iter_at_mark (buffer, &start_iter, mark);
+ gtk_text_buffer_get_end_iter (buffer, &end_iter);
+
+ gtk_text_buffer_apply_tag_by_name (buffer,
+ tag,
+ &start_iter,
+ &end_iter);
+
+ gtk_text_buffer_delete_mark (buffer, mark);
+}
+
+void
+empathy_theme_append_event (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ const gchar *str)
+{
+ if (!EMPATHY_THEME_GET_CLASS(theme)->append_event) {
+ return;
+ }
+
+ EMPATHY_THEME_GET_CLASS(theme)->append_event (theme, view, str);
+}
+
+void
+empathy_theme_append_spacing (EmpathyTheme *theme,
+ EmpathyChatView *view)
+{
+ if (!EMPATHY_THEME_GET_CLASS(theme)->append_spacing) {
+ return;
+ }
+
+ EMPATHY_THEME_GET_CLASS(theme)->append_spacing (theme, view);
+}
+
+
+void
+empathy_theme_append_timestamp (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message,
+ gboolean show_date,
+ gboolean show_time)
+{
+ if (!EMPATHY_THEME_GET_CLASS(theme)->append_timestamp) {
+ return;
+ }
+
+ EMPATHY_THEME_GET_CLASS(theme)->append_timestamp (theme, view,
+ message, show_date,
+ show_time);
+}
+
+gboolean
+empathy_theme_get_show_avatars (EmpathyTheme *theme)
+{
+ EmpathyThemePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_THEME (theme), FALSE);
+
+ priv = GET_PRIV (theme);
+
+ return priv->show_avatars;
+}
+
+void
+empathy_theme_set_show_avatars (EmpathyTheme *theme, gboolean show)
+{
+ EmpathyThemePriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_THEME (theme));
+
+ priv = GET_PRIV (theme);
+
+ priv->show_avatars = show;
+
+ g_object_notify (G_OBJECT (theme), "show-avatars");
+}
+
diff --git a/trunk/libempathy-gtk/empathy-theme.h b/trunk/libempathy-gtk/empathy-theme.h
new file mode 100644
index 000000000..f82c18afc
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-theme.h
@@ -0,0 +1,98 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EMPATHY_THEME_H__
+#define __EMPATHY_THEME_H__
+
+#include <glib-object.h>
+#include <gtk/gtktextbuffer.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_THEME (empathy_theme_get_type ())
+#define EMPATHY_THEME(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_THEME, EmpathyTheme))
+#define EMPATHY_THEME_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_THEME, EmpathyThemeClass))
+#define EMPATHY_IS_THEME(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_THEME))
+#define EMPATHY_IS_THEME_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_THEME))
+#define EMPATHY_THEME_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_THEME, EmpathyThemeClass))
+
+typedef struct _EmpathyTheme EmpathyTheme;
+typedef struct _EmpathyThemeClass EmpathyThemeClass;
+
+#include "empathy-chat-view.h"
+
+struct _EmpathyTheme {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyThemeClass {
+ GObjectClass parent_class;
+
+ /* <vtable> */
+ void (*update_view) (EmpathyTheme *theme,
+ EmpathyChatView *view);
+ void (*append_message) (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message);
+ void (*append_event) (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ const gchar *str);
+ void (*append_timestamp) (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message,
+ gboolean show_date,
+ gboolean show_time);
+ void (*append_spacing) (EmpathyTheme *theme,
+ EmpathyChatView *view);
+};
+
+GType empathy_theme_get_type (void) G_GNUC_CONST;
+void empathy_theme_update_view (EmpathyTheme *theme,
+ EmpathyChatView *view);
+void empathy_theme_append_message (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *msg);
+void empathy_theme_append_text (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ const gchar *body,
+ const gchar *tag,
+ const gchar *link_tag);
+void empathy_theme_append_spacing (EmpathyTheme *theme,
+ EmpathyChatView *view);
+void empathy_theme_append_event (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ const gchar *str);
+void empathy_theme_append_timestamp (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message,
+ gboolean show_date,
+ gboolean show_time);
+void empathy_theme_maybe_append_date_and_time (EmpathyTheme *theme,
+ EmpathyChatView *view,
+ EmpathyMessage *message);
+gboolean empathy_theme_get_show_avatars (EmpathyTheme *theme);
+void empathy_theme_set_show_avatars (EmpathyTheme *theme,
+ gboolean show);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_THEME_H__ */
+
diff --git a/trunk/libempathy-gtk/empathy-ui-utils.c b/trunk/libempathy-gtk/empathy-ui-utils.c
new file mode 100644
index 000000000..bc4d7597b
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-ui-utils.c
@@ -0,0 +1,1423 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2002-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ *
+ * Part of this file is copied from GtkSourceView (gtksourceiter.c):
+ * Paolo Maggi
+ * Jeroen Zwartepoorte
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <X11/Xatom.h>
+#include <gdk/gdkx.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gio/gio.h>
+#include <glade/glade.h>
+
+#include <libmissioncontrol/mc-profile.h>
+
+#include "empathy-ui-utils.h"
+#include "empathy-images.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+struct SizeData {
+ gint width;
+ gint height;
+ gboolean preserve_aspect_ratio;
+};
+
+static GladeXML *
+get_glade_file (const gchar *filename,
+ const gchar *root,
+ const gchar *domain,
+ const gchar *first_required_widget,
+ va_list args)
+{
+ GladeXML *gui;
+ const char *name;
+ GtkWidget **widget_ptr;
+
+ DEBUG ("Loading glade file %s", filename);
+
+ gui = glade_xml_new (filename, root, domain);
+
+ if (!gui) {
+ g_warning ("Couldn't find necessary glade file '%s'", filename);
+ }
+
+ for (name = first_required_widget; name; name = va_arg (args, char *)) {
+ widget_ptr = va_arg (args, void *);
+
+ *widget_ptr = glade_xml_get_widget (gui, name);
+
+ if (!*widget_ptr) {
+ g_warning ("Glade file '%s' is missing widget '%s'.",
+ filename, name);
+ continue;
+ }
+ }
+
+ return gui;
+}
+
+void
+empathy_glade_get_file_simple (const gchar *filename,
+ const gchar *root,
+ const gchar *domain,
+ const gchar *first_required_widget, ...)
+{
+ va_list args;
+ GladeXML *gui;
+
+ va_start (args, first_required_widget);
+
+ gui = get_glade_file (filename,
+ root,
+ domain,
+ first_required_widget,
+ args);
+
+ va_end (args);
+
+ if (gui) {
+ g_object_unref (gui);
+ }
+}
+
+GladeXML *
+empathy_glade_get_file (const gchar *filename,
+ const gchar *root,
+ const gchar *domain,
+ const gchar *first_required_widget, ...)
+{
+ va_list args;
+ GladeXML *gui;
+
+ va_start (args, first_required_widget);
+
+ gui = get_glade_file (filename,
+ root,
+ domain,
+ first_required_widget,
+ args);
+
+ va_end (args);
+
+ if (!gui) {
+ return NULL;
+ }
+
+ return gui;
+}
+
+void
+empathy_glade_connect (GladeXML *gui,
+ gpointer user_data,
+ gchar *first_widget, ...)
+{
+ va_list args;
+ const gchar *name;
+ const gchar *signal;
+ GtkWidget *widget;
+ gpointer *callback;
+
+ va_start (args, first_widget);
+
+ for (name = first_widget; name; name = va_arg (args, char *)) {
+ signal = va_arg (args, void *);
+ callback = va_arg (args, void *);
+
+ widget = glade_xml_get_widget (gui, name);
+ if (!widget) {
+ g_warning ("Glade file is missing widget '%s', aborting",
+ name);
+ continue;
+ }
+
+ g_signal_connect (widget,
+ signal,
+ G_CALLBACK (callback),
+ user_data);
+ }
+
+ va_end (args);
+}
+
+void
+empathy_glade_setup_size_group (GladeXML *gui,
+ GtkSizeGroupMode mode,
+ gchar *first_widget, ...)
+{
+ va_list args;
+ GtkWidget *widget;
+ GtkSizeGroup *size_group;
+ const gchar *name;
+
+ va_start (args, first_widget);
+
+ size_group = gtk_size_group_new (mode);
+
+ for (name = first_widget; name; name = va_arg (args, char *)) {
+ widget = glade_xml_get_widget (gui, name);
+ if (!widget) {
+ g_warning ("Glade file is missing widget '%s'", name);
+ continue;
+ }
+
+ gtk_size_group_add_widget (size_group, widget);
+ }
+
+ g_object_unref (size_group);
+
+ va_end (args);
+}
+
+const gchar *
+empathy_icon_name_from_account (McAccount *account)
+{
+ McProfile *profile;
+
+ profile = mc_account_get_profile (account);
+
+ return mc_profile_get_icon_name (profile);
+}
+
+const gchar *
+empathy_icon_name_for_presence (McPresence presence)
+{
+ switch (presence) {
+ case MC_PRESENCE_AVAILABLE:
+ return EMPATHY_IMAGE_AVAILABLE;
+ case MC_PRESENCE_DO_NOT_DISTURB:
+ return EMPATHY_IMAGE_BUSY;
+ case MC_PRESENCE_AWAY:
+ return EMPATHY_IMAGE_AWAY;
+ case MC_PRESENCE_EXTENDED_AWAY:
+ return EMPATHY_IMAGE_EXT_AWAY;
+ case MC_PRESENCE_HIDDEN:
+ return EMPATHY_IMAGE_HIDDEN;
+ case MC_PRESENCE_OFFLINE:
+ case MC_PRESENCE_UNSET:
+ return EMPATHY_IMAGE_OFFLINE;
+ default:
+ g_assert_not_reached ();
+ }
+
+ return NULL;
+}
+
+const gchar *
+empathy_icon_name_for_contact (EmpathyContact *contact)
+{
+ McPresence presence;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact),
+ EMPATHY_IMAGE_OFFLINE);
+
+ presence = empathy_contact_get_presence (contact);
+ return empathy_icon_name_for_presence (presence);
+}
+
+GdkPixbuf *
+empathy_pixbuf_from_data (gchar *data,
+ gsize data_size)
+{
+ GdkPixbufLoader *loader;
+ GdkPixbuf *pixbuf = NULL;
+ GError *error = NULL;
+
+ if (!data) {
+ return NULL;
+ }
+
+ loader = gdk_pixbuf_loader_new ();
+ if (!gdk_pixbuf_loader_write (loader, data, data_size, &error)) {
+ DEBUG ("Failed to write to pixbuf loader: %s",
+ error ? error->message : "No error given");
+ g_clear_error (&error);
+ g_object_unref (loader);
+ return NULL;
+ }
+ if (!gdk_pixbuf_loader_close (loader, &error)) {
+ DEBUG ("Failed to close pixbuf loader: %s",
+ error ? error->message : "No error given");
+ g_clear_error (&error);
+ g_object_unref (loader);
+ return NULL;
+ }
+
+ pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
+ if (pixbuf) {
+ g_object_ref (pixbuf);
+ }
+
+ g_object_unref (loader);
+
+ return pixbuf;
+}
+
+static void
+pixbuf_from_avatar_size_prepared_cb (GdkPixbufLoader *loader,
+ int width,
+ int height,
+ struct SizeData *data)
+{
+ g_return_if_fail (width > 0 && height > 0);
+
+ if (data->preserve_aspect_ratio && (data->width > 0 || data->height > 0)) {
+ if (width < data->width && height < data->height) {
+ width = width;
+ height = height;
+ }
+
+ if (data->width < 0) {
+ width = width * (double) data->height / (gdouble) height;
+ height = data->height;
+ } else if (data->height < 0) {
+ height = height * (double) data->width / (double) width;
+ width = data->width;
+ } else if ((double) height * (double) data->width >
+ (double) width * (double) data->height) {
+ width = 0.5 + (double) width * (double) data->height / (double) height;
+ height = data->height;
+ } else {
+ height = 0.5 + (double) height * (double) data->width / (double) width;
+ width = data->width;
+ }
+ } else {
+ if (data->width > 0) {
+ width = data->width;
+ }
+
+ if (data->height > 0) {
+ height = data->height;
+ }
+ }
+
+ gdk_pixbuf_loader_set_size (loader, width, height);
+}
+
+static void
+empathy_avatar_pixbuf_roundify (GdkPixbuf *pixbuf)
+{
+ gint width, height, rowstride;
+ guchar *pixels;
+
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+ rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+ pixels = gdk_pixbuf_get_pixels (pixbuf);
+
+ if (width < 6 || height < 6) {
+ return;
+ }
+
+ /* Top left */
+ pixels[3] = 0;
+ pixels[7] = 0x80;
+ pixels[11] = 0xC0;
+ pixels[rowstride + 3] = 0x80;
+ pixels[rowstride * 2 + 3] = 0xC0;
+
+ /* Top right */
+ pixels[width * 4 - 1] = 0;
+ pixels[width * 4 - 5] = 0x80;
+ pixels[width * 4 - 9] = 0xC0;
+ pixels[rowstride + (width * 4) - 1] = 0x80;
+ pixels[(2 * rowstride) + (width * 4) - 1] = 0xC0;
+
+ /* Bottom left */
+ pixels[(height - 1) * rowstride + 3] = 0;
+ pixels[(height - 1) * rowstride + 7] = 0x80;
+ pixels[(height - 1) * rowstride + 11] = 0xC0;
+ pixels[(height - 2) * rowstride + 3] = 0x80;
+ pixels[(height - 3) * rowstride + 3] = 0xC0;
+
+ /* Bottom right */
+ pixels[height * rowstride - 1] = 0;
+ pixels[(height - 1) * rowstride - 1] = 0x80;
+ pixels[(height - 2) * rowstride - 1] = 0xC0;
+ pixels[height * rowstride - 5] = 0x80;
+ pixels[height * rowstride - 9] = 0xC0;
+}
+
+static gboolean
+empathy_gdk_pixbuf_is_opaque (GdkPixbuf *pixbuf)
+{
+ gint width, height, rowstride, i;
+ guchar *pixels;
+ guchar *row;
+
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+ rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+ pixels = gdk_pixbuf_get_pixels (pixbuf);
+
+ row = pixels;
+ for (i = 3; i < rowstride; i+=4) {
+ if (row[i] < 0xfe) {
+ return FALSE;
+ }
+ }
+
+ for (i = 1; i < height - 1; i++) {
+ row = pixels + (i*rowstride);
+ if (row[3] < 0xfe || row[rowstride-1] < 0xfe) {
+ return FALSE;
+ }
+ }
+
+ row = pixels + ((height-1) * rowstride);
+ for (i = 3; i < rowstride; i+=4) {
+ if (row[i] < 0xfe) {
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+GdkPixbuf *
+empathy_pixbuf_from_avatar_scaled (EmpathyAvatar *avatar,
+ gint width,
+ gint height)
+{
+ GdkPixbuf *pixbuf;
+ GdkPixbufLoader *loader;
+ struct SizeData data;
+ GError *error = NULL;
+
+ if (!avatar) {
+ return NULL;
+ }
+
+ data.width = width;
+ data.height = height;
+ data.preserve_aspect_ratio = TRUE;
+
+ loader = gdk_pixbuf_loader_new ();
+
+ g_signal_connect (loader, "size-prepared",
+ G_CALLBACK (pixbuf_from_avatar_size_prepared_cb),
+ &data);
+
+ if (!gdk_pixbuf_loader_write (loader, avatar->data, avatar->len, &error)) {
+ g_warning ("Couldn't write avatar image:%p with "
+ "length:%" G_GSIZE_FORMAT " to pixbuf loader: %s",
+ avatar->data, avatar->len, error->message);
+ g_error_free (error);
+ return NULL;
+ }
+
+ gdk_pixbuf_loader_close (loader, NULL);
+
+ pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
+ if (!gdk_pixbuf_get_has_alpha (pixbuf)) {
+ GdkPixbuf *rounded_pixbuf;
+
+ rounded_pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8,
+ gdk_pixbuf_get_width (pixbuf),
+ gdk_pixbuf_get_height (pixbuf));
+ gdk_pixbuf_copy_area (pixbuf, 0, 0,
+ gdk_pixbuf_get_width (pixbuf),
+ gdk_pixbuf_get_height (pixbuf),
+ rounded_pixbuf,
+ 0, 0);
+ pixbuf = rounded_pixbuf;
+ } else {
+ g_object_ref (pixbuf);
+ }
+
+ if (empathy_gdk_pixbuf_is_opaque (pixbuf)) {
+ empathy_avatar_pixbuf_roundify (pixbuf);
+ }
+
+ g_object_unref (loader);
+
+ return pixbuf;
+}
+
+GdkPixbuf *
+empathy_pixbuf_avatar_from_contact_scaled (EmpathyContact *contact,
+ gint width,
+ gint height)
+{
+ EmpathyAvatar *avatar;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ avatar = empathy_contact_get_avatar (contact);
+
+ return empathy_pixbuf_from_avatar_scaled (avatar, width, height);
+}
+
+GdkPixbuf *
+empathy_pixbuf_scale_down_if_necessary (GdkPixbuf *pixbuf, gint max_size)
+{
+ gint width, height;
+ gdouble factor;
+
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+
+ if (width > max_size || height > max_size) {
+ factor = (gdouble) max_size / MAX (width, height);
+
+ width = width * factor;
+ height = height * factor;
+
+ return gdk_pixbuf_scale_simple (pixbuf,
+ width, height,
+ GDK_INTERP_HYPER);
+ }
+
+ return g_object_ref (pixbuf);
+}
+
+GdkPixbuf *
+empathy_pixbuf_from_icon_name (const gchar *icon_name,
+ GtkIconSize icon_size)
+{
+ GtkIconTheme *theme;
+ GdkPixbuf *pixbuf = NULL;
+ GError *error = NULL;
+ gint w, h;
+ gint size = 48;
+
+ if (!icon_name) {
+ return NULL;
+ }
+
+ theme = gtk_icon_theme_get_default ();
+
+ if (gtk_icon_size_lookup (icon_size, &w, &h)) {
+ size = (w + h) / 2;
+ }
+
+ pixbuf = gtk_icon_theme_load_icon (theme,
+ icon_name,
+ size,
+ 0,
+ &error);
+ if (error) {
+ DEBUG ("Error loading icon: %s", error->message);
+ g_clear_error (&error);
+ }
+
+ return pixbuf;
+}
+
+/* Stolen from GtkSourceView, hence the weird intendation. Please keep it like
+ * that to make it easier to apply changes from the original code.
+ */
+#define GTK_TEXT_UNKNOWN_CHAR 0xFFFC
+
+/* this function acts like g_utf8_offset_to_pointer() except that if it finds a
+ * decomposable character it consumes the decomposition length from the given
+ * offset. So it's useful when the offset was calculated for the normalized
+ * version of str, but we need a pointer to str itself. */
+static const gchar *
+pointer_from_offset_skipping_decomp (const gchar *str, gint offset)
+{
+ gchar *casefold, *normal;
+ const gchar *p, *q;
+
+ p = str;
+ while (offset > 0)
+ {
+ q = g_utf8_next_char (p);
+ casefold = g_utf8_casefold (p, q - p);
+ normal = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
+ offset -= g_utf8_strlen (normal, -1);
+ g_free (casefold);
+ g_free (normal);
+ p = q;
+ }
+ return p;
+}
+
+static const gchar *
+g_utf8_strcasestr (const gchar *haystack, const gchar *needle)
+{
+ gsize needle_len;
+ gsize haystack_len;
+ const gchar *ret = NULL;
+ gchar *p;
+ gchar *casefold;
+ gchar *caseless_haystack;
+ gint i;
+
+ g_return_val_if_fail (haystack != NULL, NULL);
+ g_return_val_if_fail (needle != NULL, NULL);
+
+ casefold = g_utf8_casefold (haystack, -1);
+ caseless_haystack = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
+ g_free (casefold);
+
+ needle_len = g_utf8_strlen (needle, -1);
+ haystack_len = g_utf8_strlen (caseless_haystack, -1);
+
+ if (needle_len == 0)
+ {
+ ret = (gchar *)haystack;
+ goto finally_1;
+ }
+
+ if (haystack_len < needle_len)
+ {
+ ret = NULL;
+ goto finally_1;
+ }
+
+ p = (gchar*)caseless_haystack;
+ needle_len = strlen (needle);
+ i = 0;
+
+ while (*p)
+ {
+ if ((strncmp (p, needle, needle_len) == 0))
+ {
+ ret = pointer_from_offset_skipping_decomp (haystack, i);
+ goto finally_1;
+ }
+
+ p = g_utf8_next_char (p);
+ i++;
+ }
+
+finally_1:
+ g_free (caseless_haystack);
+
+ return ret;
+}
+
+static gboolean
+g_utf8_caselessnmatch (const char *s1, const char *s2,
+ gssize n1, gssize n2)
+{
+ gchar *casefold;
+ gchar *normalized_s1;
+ gchar *normalized_s2;
+ gint len_s1;
+ gint len_s2;
+ gboolean ret = FALSE;
+
+ g_return_val_if_fail (s1 != NULL, FALSE);
+ g_return_val_if_fail (s2 != NULL, FALSE);
+ g_return_val_if_fail (n1 > 0, FALSE);
+ g_return_val_if_fail (n2 > 0, FALSE);
+
+ casefold = g_utf8_casefold (s1, n1);
+ normalized_s1 = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
+ g_free (casefold);
+
+ casefold = g_utf8_casefold (s2, n2);
+ normalized_s2 = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
+ g_free (casefold);
+
+ len_s1 = strlen (normalized_s1);
+ len_s2 = strlen (normalized_s2);
+
+ if (len_s1 < len_s2)
+ goto finally_2;
+
+ ret = (strncmp (normalized_s1, normalized_s2, len_s2) == 0);
+
+finally_2:
+ g_free (normalized_s1);
+ g_free (normalized_s2);
+
+ return ret;
+}
+
+static void
+forward_chars_with_skipping (GtkTextIter *iter,
+ gint count,
+ gboolean skip_invisible,
+ gboolean skip_nontext,
+ gboolean skip_decomp)
+{
+ gint i;
+
+ g_return_if_fail (count >= 0);
+
+ i = count;
+
+ while (i > 0)
+ {
+ gboolean ignored = FALSE;
+
+ /* minimal workaround to avoid the infinite loop of bug #168247.
+ * It doesn't fix the problemjust the symptom...
+ */
+ if (gtk_text_iter_is_end (iter))
+ return;
+
+ if (skip_nontext && gtk_text_iter_get_char (iter) == GTK_TEXT_UNKNOWN_CHAR)
+ ignored = TRUE;
+
+ if (!ignored && skip_invisible &&
+ /* _gtk_text_btree_char_is_invisible (iter)*/ FALSE)
+ ignored = TRUE;
+
+ if (!ignored && skip_decomp)
+ {
+ /* being UTF8 correct sucks; this accounts for extra
+ offsets coming from canonical decompositions of
+ UTF8 characters (e.g. accented characters) which
+ g_utf8_normalize() performs */
+ gchar *normal;
+ gchar buffer[6];
+ gint buffer_len;
+
+ buffer_len = g_unichar_to_utf8 (gtk_text_iter_get_char (iter), buffer);
+ normal = g_utf8_normalize (buffer, buffer_len, G_NORMALIZE_NFD);
+ i -= (g_utf8_strlen (normal, -1) - 1);
+ g_free (normal);
+ }
+
+ gtk_text_iter_forward_char (iter);
+
+ if (!ignored)
+ --i;
+ }
+}
+
+static gboolean
+lines_match (const GtkTextIter *start,
+ const gchar **lines,
+ gboolean visible_only,
+ gboolean slice,
+ GtkTextIter *match_start,
+ GtkTextIter *match_end)
+{
+ GtkTextIter next;
+ gchar *line_text;
+ const gchar *found;
+ gint offset;
+
+ if (*lines == NULL || **lines == '\0')
+ {
+ if (match_start)
+ *match_start = *start;
+ if (match_end)
+ *match_end = *start;
+ return TRUE;
+ }
+
+ next = *start;
+ gtk_text_iter_forward_line (&next);
+
+ /* No more text in buffer, but *lines is nonempty */
+ if (gtk_text_iter_equal (start, &next))
+ return FALSE;
+
+ if (slice)
+ {
+ if (visible_only)
+ line_text = gtk_text_iter_get_visible_slice (start, &next);
+ else
+ line_text = gtk_text_iter_get_slice (start, &next);
+ }
+ else
+ {
+ if (visible_only)
+ line_text = gtk_text_iter_get_visible_text (start, &next);
+ else
+ line_text = gtk_text_iter_get_text (start, &next);
+ }
+
+ if (match_start) /* if this is the first line we're matching */
+ {
+ found = g_utf8_strcasestr (line_text, *lines);
+ }
+ else
+ {
+ /* If it's not the first line, we have to match from the
+ * start of the line.
+ */
+ if (g_utf8_caselessnmatch (line_text, *lines, strlen (line_text),
+ strlen (*lines)))
+ found = line_text;
+ else
+ found = NULL;
+ }
+
+ if (found == NULL)
+ {
+ g_free (line_text);
+ return FALSE;
+ }
+
+ /* Get offset to start of search string */
+ offset = g_utf8_strlen (line_text, found - line_text);
+
+ next = *start;
+
+ /* If match start needs to be returned, set it to the
+ * start of the search string.
+ */
+ forward_chars_with_skipping (&next, offset, visible_only, !slice, FALSE);
+ if (match_start)
+ {
+ *match_start = next;
+ }
+
+ /* Go to end of search string */
+ forward_chars_with_skipping (&next, g_utf8_strlen (*lines, -1), visible_only, !slice, TRUE);
+
+ g_free (line_text);
+
+ ++lines;
+
+ if (match_end)
+ *match_end = next;
+
+ /* pass NULL for match_start, since we don't need to find the
+ * start again.
+ */
+ return lines_match (&next, lines, visible_only, slice, NULL, match_end);
+}
+
+/* strsplit () that retains the delimiter as part of the string. */
+static gchar **
+strbreakup (const char *string,
+ const char *delimiter,
+ gint max_tokens)
+{
+ GSList *string_list = NULL, *slist;
+ gchar **str_array, *s, *casefold, *new_string;
+ guint i, n = 1;
+
+ g_return_val_if_fail (string != NULL, NULL);
+ g_return_val_if_fail (delimiter != NULL, NULL);
+
+ if (max_tokens < 1)
+ max_tokens = G_MAXINT;
+
+ s = strstr (string, delimiter);
+ if (s)
+ {
+ guint delimiter_len = strlen (delimiter);
+
+ do
+ {
+ guint len;
+
+ len = s - string + delimiter_len;
+ new_string = g_new (gchar, len + 1);
+ strncpy (new_string, string, len);
+ new_string[len] = 0;
+ casefold = g_utf8_casefold (new_string, -1);
+ g_free (new_string);
+ new_string = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
+ g_free (casefold);
+ string_list = g_slist_prepend (string_list, new_string);
+ n++;
+ string = s + delimiter_len;
+ s = strstr (string, delimiter);
+ } while (--max_tokens && s);
+ }
+
+ if (*string)
+ {
+ n++;
+ casefold = g_utf8_casefold (string, -1);
+ new_string = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
+ g_free (casefold);
+ string_list = g_slist_prepend (string_list, new_string);
+ }
+
+ str_array = g_new (gchar*, n);
+
+ i = n - 1;
+
+ str_array[i--] = NULL;
+ for (slist = string_list; slist; slist = slist->next)
+ str_array[i--] = slist->data;
+
+ g_slist_free (string_list);
+
+ return str_array;
+}
+
+gboolean
+empathy_text_iter_forward_search (const GtkTextIter *iter,
+ const gchar *str,
+ GtkTextIter *match_start,
+ GtkTextIter *match_end,
+ const GtkTextIter *limit)
+{
+ gchar **lines = NULL;
+ GtkTextIter match;
+ gboolean retval = FALSE;
+ GtkTextIter search;
+ gboolean visible_only;
+ gboolean slice;
+
+ g_return_val_if_fail (iter != NULL, FALSE);
+ g_return_val_if_fail (str != NULL, FALSE);
+
+ if (limit && gtk_text_iter_compare (iter, limit) >= 0)
+ return FALSE;
+
+ if (*str == '\0') {
+ /* If we can move one char, return the empty string there */
+ match = *iter;
+
+ if (gtk_text_iter_forward_char (&match)) {
+ if (limit && gtk_text_iter_equal (&match, limit)) {
+ return FALSE;
+ }
+
+ if (match_start) {
+ *match_start = match;
+ }
+ if (match_end) {
+ *match_end = match;
+ }
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ }
+
+ visible_only = TRUE;
+ slice = FALSE;
+
+ /* locate all lines */
+ lines = strbreakup (str, "\n", -1);
+
+ search = *iter;
+
+ do {
+ /* This loop has an inefficient worst-case, where
+ * gtk_text_iter_get_text () is called repeatedly on
+ * a single line.
+ */
+ GtkTextIter end;
+
+ if (limit && gtk_text_iter_compare (&search, limit) >= 0) {
+ break;
+ }
+
+ if (lines_match (&search, (const gchar**)lines,
+ visible_only, slice, &match, &end)) {
+ if (limit == NULL ||
+ (limit && gtk_text_iter_compare (&end, limit) <= 0)) {
+ retval = TRUE;
+
+ if (match_start) {
+ *match_start = match;
+ }
+ if (match_end) {
+ *match_end = end;
+ }
+ }
+ break;
+ }
+ } while (gtk_text_iter_forward_line (&search));
+
+ g_strfreev ((gchar**)lines);
+
+ return retval;
+}
+
+static const gchar *
+g_utf8_strrcasestr (const gchar *haystack, const gchar *needle)
+{
+ gsize needle_len;
+ gsize haystack_len;
+ const gchar *ret = NULL;
+ gchar *p;
+ gchar *casefold;
+ gchar *caseless_haystack;
+ gint i;
+
+ g_return_val_if_fail (haystack != NULL, NULL);
+ g_return_val_if_fail (needle != NULL, NULL);
+
+ casefold = g_utf8_casefold (haystack, -1);
+ caseless_haystack = g_utf8_normalize (casefold, -1, G_NORMALIZE_NFD);
+ g_free (casefold);
+
+ needle_len = g_utf8_strlen (needle, -1);
+ haystack_len = g_utf8_strlen (caseless_haystack, -1);
+
+ if (needle_len == 0)
+ {
+ ret = (gchar *)haystack;
+ goto finally_1;
+ }
+
+ if (haystack_len < needle_len)
+ {
+ ret = NULL;
+ goto finally_1;
+ }
+
+ i = haystack_len - needle_len;
+ p = g_utf8_offset_to_pointer (caseless_haystack, i);
+ needle_len = strlen (needle);
+
+ while (p >= caseless_haystack)
+ {
+ if (strncmp (p, needle, needle_len) == 0)
+ {
+ ret = pointer_from_offset_skipping_decomp (haystack, i);
+ goto finally_1;
+ }
+
+ p = g_utf8_prev_char (p);
+ i--;
+ }
+
+finally_1:
+ g_free (caseless_haystack);
+
+ return ret;
+}
+
+static gboolean
+backward_lines_match (const GtkTextIter *start,
+ const gchar **lines,
+ gboolean visible_only,
+ gboolean slice,
+ GtkTextIter *match_start,
+ GtkTextIter *match_end)
+{
+ GtkTextIter line, next;
+ gchar *line_text;
+ const gchar *found;
+ gint offset;
+
+ if (*lines == NULL || **lines == '\0')
+ {
+ if (match_start)
+ *match_start = *start;
+ if (match_end)
+ *match_end = *start;
+ return TRUE;
+ }
+
+ line = next = *start;
+ if (gtk_text_iter_get_line_offset (&next) == 0)
+ {
+ if (!gtk_text_iter_backward_line (&next))
+ return FALSE;
+ }
+ else
+ gtk_text_iter_set_line_offset (&next, 0);
+
+ if (slice)
+ {
+ if (visible_only)
+ line_text = gtk_text_iter_get_visible_slice (&next, &line);
+ else
+ line_text = gtk_text_iter_get_slice (&next, &line);
+ }
+ else
+ {
+ if (visible_only)
+ line_text = gtk_text_iter_get_visible_text (&next, &line);
+ else
+ line_text = gtk_text_iter_get_text (&next, &line);
+ }
+
+ if (match_start) /* if this is the first line we're matching */
+ {
+ found = g_utf8_strrcasestr (line_text, *lines);
+ }
+ else
+ {
+ /* If it's not the first line, we have to match from the
+ * start of the line.
+ */
+ if (g_utf8_caselessnmatch (line_text, *lines, strlen (line_text),
+ strlen (*lines)))
+ found = line_text;
+ else
+ found = NULL;
+ }
+
+ if (found == NULL)
+ {
+ g_free (line_text);
+ return FALSE;
+ }
+
+ /* Get offset to start of search string */
+ offset = g_utf8_strlen (line_text, found - line_text);
+
+ forward_chars_with_skipping (&next, offset, visible_only, !slice, FALSE);
+
+ /* If match start needs to be returned, set it to the
+ * start of the search string.
+ */
+ if (match_start)
+ {
+ *match_start = next;
+ }
+
+ /* Go to end of search string */
+ forward_chars_with_skipping (&next, g_utf8_strlen (*lines, -1), visible_only, !slice, TRUE);
+
+ g_free (line_text);
+
+ ++lines;
+
+ if (match_end)
+ *match_end = next;
+
+ /* try to match the rest of the lines forward, passing NULL
+ * for match_start so lines_match will try to match the entire
+ * line */
+ return lines_match (&next, lines, visible_only,
+ slice, NULL, match_end);
+}
+
+gboolean
+empathy_text_iter_backward_search (const GtkTextIter *iter,
+ const gchar *str,
+ GtkTextIter *match_start,
+ GtkTextIter *match_end,
+ const GtkTextIter *limit)
+{
+ gchar **lines = NULL;
+ GtkTextIter match;
+ gboolean retval = FALSE;
+ GtkTextIter search;
+ gboolean visible_only;
+ gboolean slice;
+
+ g_return_val_if_fail (iter != NULL, FALSE);
+ g_return_val_if_fail (str != NULL, FALSE);
+
+ if (limit && gtk_text_iter_compare (iter, limit) <= 0)
+ return FALSE;
+
+ if (*str == '\0')
+ {
+ /* If we can move one char, return the empty string there */
+ match = *iter;
+
+ if (gtk_text_iter_backward_char (&match))
+ {
+ if (limit && gtk_text_iter_equal (&match, limit))
+ return FALSE;
+
+ if (match_start)
+ *match_start = match;
+ if (match_end)
+ *match_end = match;
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+ }
+
+ visible_only = TRUE;
+ slice = TRUE;
+
+ /* locate all lines */
+ lines = strbreakup (str, "\n", -1);
+
+ search = *iter;
+
+ while (TRUE)
+ {
+ /* This loop has an inefficient worst-case, where
+ * gtk_text_iter_get_text () is called repeatedly on
+ * a single line.
+ */
+ GtkTextIter end;
+
+ if (limit && gtk_text_iter_compare (&search, limit) <= 0)
+ break;
+
+ if (backward_lines_match (&search, (const gchar**)lines,
+ visible_only, slice, &match, &end))
+ {
+ if (limit == NULL || (limit &&
+ gtk_text_iter_compare (&end, limit) > 0))
+ {
+ retval = TRUE;
+
+ if (match_start)
+ *match_start = match;
+ if (match_end)
+ *match_end = end;
+ }
+ break;
+ }
+
+ if (gtk_text_iter_get_line_offset (&search) == 0)
+ {
+ if (!gtk_text_iter_backward_line (&search))
+ break;
+ }
+ else
+ {
+ gtk_text_iter_set_line_offset (&search, 0);
+ }
+ }
+
+ g_strfreev ((gchar**)lines);
+
+ return retval;
+}
+
+gboolean
+empathy_window_get_is_visible (GtkWindow *window)
+{
+ GdkWindowState state;
+ GdkWindow *gdk_window;
+
+ g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
+
+ gdk_window = GTK_WIDGET (window)->window;
+ if (!gdk_window) {
+ return FALSE;
+ }
+
+ state = gdk_window_get_state (gdk_window);
+ if (state & (GDK_WINDOW_STATE_WITHDRAWN | GDK_WINDOW_STATE_ICONIFIED)) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void
+empathy_window_iconify (GtkWindow *window, GtkStatusIcon *status_icon)
+{
+ GdkRectangle icon_location;
+ gulong data[4];
+ Display *dpy;
+ GdkWindow *gdk_window;
+
+ gtk_status_icon_get_geometry (status_icon, NULL, &icon_location, NULL);
+ gdk_window = GTK_WIDGET (window)->window;
+ dpy = gdk_x11_drawable_get_xdisplay (gdk_window);
+
+ data[0] = icon_location.x;
+ data[1] = icon_location.y;
+ data[2] = icon_location.width;
+ data[3] = icon_location.height;
+
+ XChangeProperty (dpy,
+ GDK_WINDOW_XID (gdk_window),
+ gdk_x11_get_xatom_by_name_for_display (gdk_drawable_get_display (gdk_window),
+ "_NET_WM_ICON_GEOMETRY"),
+ XA_CARDINAL, 32, PropModeReplace,
+ (guchar *)&data, 4);
+
+ gtk_window_set_skip_taskbar_hint (window, TRUE);
+ gtk_window_iconify (window);
+}
+
+/* Takes care of moving the window to the current workspace. */
+void
+empathy_window_present (GtkWindow *window,
+ gboolean steal_focus)
+{
+ guint32 timestamp;
+
+ g_return_if_fail (GTK_IS_WINDOW (window));
+
+ /* There are three cases: hidden, visible, visible on another
+ * workspace.
+ */
+
+ if (!empathy_window_get_is_visible (window)) {
+ /* Hide it so present brings it to the current workspace. */
+ gtk_widget_hide (GTK_WIDGET (window));
+ }
+
+ timestamp = gtk_get_current_event_time ();
+ gtk_window_set_skip_taskbar_hint (window, FALSE);
+ gtk_window_present_with_time (window, timestamp);
+ /* FIXME: This shouldn't be required as gtk_window_present's doc says
+ * it deiconify automatically. */
+ gtk_window_deiconify (window);
+}
+
+GtkWindow *
+empathy_get_toplevel_window (GtkWidget *widget)
+{
+ GtkWidget *toplevel;
+
+ g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
+
+ toplevel = gtk_widget_get_toplevel (widget);
+ if (GTK_IS_WINDOW (toplevel) &&
+ GTK_WIDGET_TOPLEVEL (toplevel)) {
+ return GTK_WINDOW (toplevel);
+ }
+
+ return NULL;
+}
+
+/* The URL opening code can't handle schemeless strings, so we try to be
+ * smart and add http if there is no scheme or doesn't look like a mail
+ * address. This should work in most cases, and let us click on strings
+ * like "www.gnome.org".
+ */
+static gchar *
+fixup_url (const gchar *url)
+{
+ if (!g_str_has_prefix (url, "ghelp:") &&
+ !strstr (url, ":/") &&
+ !strstr (url, "@")) {
+ return g_strdup_printf ("http://%s", url);
+ } else {
+ return NULL;
+ }
+}
+
+void
+empathy_url_show (const char *url)
+{
+ gchar *real_url;
+ GError *error = NULL;
+
+ real_url = fixup_url (url);
+ if (real_url) {
+ url = real_url;
+ }
+
+ /* FIXME: this does not work for multihead, we should use
+ * GdkAppLaunchContext or gtk_show_url, see bug #514396.
+ */
+ g_app_info_launch_default_for_uri (url, NULL, &error);
+ if (error) {
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (NULL, 0,
+ GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
+ _("Unable to open URI"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ error->message);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy),
+ NULL);
+ gtk_window_present (GTK_WINDOW (dialog));
+
+ g_clear_error (&error);
+ }
+
+ g_free (real_url);
+}
+
+static void
+link_button_hook (GtkLinkButton *button,
+ const gchar *link,
+ gpointer user_data)
+{
+ empathy_url_show (link);
+}
+
+GtkWidget *
+empathy_link_button_new (const gchar *url,
+ const gchar *title)
+{
+ static gboolean hook = FALSE;
+
+ if (!hook) {
+ hook = TRUE;
+ gtk_link_button_set_uri_hook (link_button_hook, NULL, NULL);
+ }
+
+ return gtk_link_button_new_with_label (url, title);
+}
+
+void
+empathy_toggle_button_set_state_quietly (GtkWidget *widget,
+ GCallback callback,
+ gpointer user_data,
+ gboolean active)
+{
+ g_return_if_fail (GTK_IS_TOGGLE_BUTTON (widget));
+
+ g_signal_handlers_block_by_func (widget, callback, user_data);
+ g_object_set (widget, "active", active, NULL);
+ g_signal_handlers_unblock_by_func (widget, callback, user_data);
+}
+
+GtkTextTag *
+empathy_text_buffer_tag_set (GtkTextBuffer *buffer,
+ const gchar *tag_name,
+ const gchar *first_property_name,
+ ...)
+{
+ GtkTextTagTable *table;
+ GtkTextTag *tag;
+
+ g_return_val_if_fail (GTK_IS_TEXT_BUFFER (buffer), NULL);
+ g_return_val_if_fail (tag_name != NULL, NULL);
+
+ table = gtk_text_buffer_get_tag_table (buffer);
+ tag = gtk_text_tag_table_lookup (table, tag_name);
+
+ if (!tag) {
+ tag = gtk_text_tag_new (tag_name);
+ gtk_text_tag_table_add (table, tag);
+ g_object_unref (tag);
+ } else {
+ /* Clear the old values so that we don't affect the new theme. */
+ g_object_set (tag,
+ "background-set", FALSE,
+ "foreground-set", FALSE,
+ "invisible-set", FALSE,
+ "justification-set", FALSE,
+ "paragraph-background-set", FALSE,
+ "pixels-above-lines-set", FALSE,
+ "pixels-below-lines-set", FALSE,
+ "rise-set", FALSE,
+ "scale-set", FALSE,
+ "size-set", FALSE,
+ "style-set", FALSE,
+ "weight-set", FALSE,
+ NULL);
+ }
+
+ if (first_property_name) {
+ va_list list;
+
+ va_start (list, first_property_name);
+ g_object_set_valist (G_OBJECT (tag), first_property_name, list);
+ va_end (list);
+ }
+
+ return tag;
+}
+
diff --git a/trunk/libempathy-gtk/empathy-ui-utils.h b/trunk/libempathy-gtk/empathy-ui-utils.h
new file mode 100644
index 000000000..b7478140e
--- /dev/null
+++ b/trunk/libempathy-gtk/empathy-ui-utils.h
@@ -0,0 +1,116 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2002-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ *
+ * Part of this file is copied from GtkSourceView (gtksourceiter.c):
+ * Paolo Maggi
+ * Jeroen Zwartepoorte
+ */
+
+#ifndef __EMPATHY_UI_UTILS_H__
+#define __EMPATHY_UI_UTILS_H__
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mc-profile.h>
+
+#include <libempathy/empathy-contact.h>
+#include <libempathy/empathy-avatar.h>
+
+#include "empathy-chat-view.h"
+
+G_BEGIN_DECLS
+
+#define G_STR_EMPTY(x) ((x) == NULL || (x)[0] == '\0')
+
+/* Glade */
+void empathy_glade_get_file_simple (const gchar *filename,
+ const gchar *root,
+ const gchar *domain,
+ const gchar *first_required_widget,
+ ...);
+GladeXML * empathy_glade_get_file (const gchar *filename,
+ const gchar *root,
+ const gchar *domain,
+ const gchar *first_required_widget,
+ ...);
+void empathy_glade_connect (GladeXML *gui,
+ gpointer user_data,
+ gchar *first_widget,
+ ...);
+void empathy_glade_setup_size_group (GladeXML *gui,
+ GtkSizeGroupMode mode,
+ gchar *first_widget,
+ ...);
+/* Pixbufs */
+const gchar * empathy_icon_name_from_account (McAccount *account);
+const gchar * empathy_icon_name_for_presence (McPresence presence);
+const gchar * empathy_icon_name_for_contact (EmpathyContact *contact);
+GdkPixbuf * empathy_pixbuf_from_data (gchar *data,
+ gsize data_size);
+GdkPixbuf * empathy_pixbuf_from_avatar_scaled (EmpathyAvatar *avatar,
+ gint width,
+ gint height);
+GdkPixbuf * empathy_pixbuf_avatar_from_contact_scaled (EmpathyContact *contact,
+ gint width,
+ gint height);
+GdkPixbuf * empathy_pixbuf_scale_down_if_necessary (GdkPixbuf *pixbuf,
+ gint max_size);
+GdkPixbuf * empathy_pixbuf_from_icon_name (const gchar *icon_name,
+ GtkIconSize icon_size);
+/* Text view */
+gboolean empathy_text_iter_forward_search (const GtkTextIter*iter,
+ const gchar *str,
+ GtkTextIter *match_start,
+ GtkTextIter *match_end,
+ const GtkTextIter*limit);
+gboolean empathy_text_iter_backward_search (const GtkTextIter*iter,
+ const gchar *str,
+ GtkTextIter *match_start,
+ GtkTextIter *match_end,
+ const GtkTextIter*limit);
+/* Windows */
+gboolean empathy_window_get_is_visible (GtkWindow *window);
+void empathy_window_present (GtkWindow *window,
+ gboolean steal_focus);
+void empathy_window_iconify (GtkWindow *window,
+ GtkStatusIcon *status_icon);
+GtkWindow * empathy_get_toplevel_window (GtkWidget *widget);
+void empathy_url_show (const char *url);
+void empathy_toggle_button_set_state_quietly (GtkWidget *widget,
+ GCallback callback,
+ gpointer user_data,
+ gboolean active);
+GtkWidget * empathy_link_button_new (const gchar *url,
+ const gchar *title);
+GtkTextTag *empathy_text_buffer_tag_set (GtkTextBuffer *buffer,
+ const gchar *tag_name,
+ const gchar *first_property_name,
+ ...);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_UI_UTILS_H__ */
diff --git a/trunk/libempathy-gtk/libempathy-gtk.pc.in b/trunk/libempathy-gtk/libempathy-gtk.pc.in
new file mode 100644
index 000000000..4248387e8
--- /dev/null
+++ b/trunk/libempathy-gtk/libempathy-gtk.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libempathy-gtk
+Description: Empathy interface library
+Requires: glib-2.0, gobject-2.0, gtk+-2.0, libglade-2.0, libmissioncontrol, libtelepathy, libempathy
+Version: @VERSION@
+Libs: -L${libdir} -lempathy-gtk
+Cflags: -I${includedir}
diff --git a/trunk/libempathy-gtk/totem-subtitle-encoding.c b/trunk/libempathy-gtk/totem-subtitle-encoding.c
new file mode 100644
index 000000000..0fb892ad2
--- /dev/null
+++ b/trunk/libempathy-gtk/totem-subtitle-encoding.c
@@ -0,0 +1,585 @@
+/*
+ * Copyright (C) 2001-2006 Bastien Nocera <hadess@hadess.net>
+ *
+ * encoding list copied from gnome-terminal/encoding.c
+ *
+ * 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 library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * The Totem project hereby grant permission for non-gpl compatible GStreamer
+ * plugins to be used and distributed together with GStreamer and Totem. This
+ * permission are above and beyond the permissions granted by the GPL license
+ * Totem is covered by.
+ *
+ * Monday 7th February 2005: Christian Schaller: Add exception clause.
+ * See license_change file for details.
+ *
+ */
+
+#include "config.h"
+#include <glib/gi18n.h>
+#include "totem-subtitle-encoding.h"
+#include <string.h>
+
+typedef enum
+{
+ SUBTITLE_ENCODING_CURRENT_LOCALE,
+
+ SUBTITLE_ENCODING_ISO_8859_6,
+ SUBTITLE_ENCODING_IBM_864,
+ SUBTITLE_ENCODING_MAC_ARABIC,
+ SUBTITLE_ENCODING_WINDOWS_1256,
+
+ SUBTITLE_ENCODING_ARMSCII_8,
+
+ SUBTITLE_ENCODING_ISO_8859_4,
+ SUBTITLE_ENCODING_ISO_8859_13,
+ SUBTITLE_ENCODING_WINDOWS_1257,
+
+ SUBTITLE_ENCODING_ISO_8859_14,
+
+ SUBTITLE_ENCODING_ISO_8859_2,
+ SUBTITLE_ENCODING_IBM_852,
+ SUBTITLE_ENCODING_MAC_CE,
+ SUBTITLE_ENCODING_WINDOWS_1250,
+
+ SUBTITLE_ENCODING_GB18030,
+ SUBTITLE_ENCODING_GB2312,
+ SUBTITLE_ENCODING_GBK,
+ SUBTITLE_ENCODING_HZ,
+
+ SUBTITLE_ENCODING_BIG5,
+ SUBTITLE_ENCODING_BIG5_HKSCS,
+ SUBTITLE_ENCODING_EUC_TW,
+
+ SUBTITLE_ENCODING_MAC_CROATIAN,
+
+ SUBTITLE_ENCODING_ISO_8859_5,
+ SUBTITLE_ENCODING_IBM_855,
+ SUBTITLE_ENCODING_ISO_IR_111,
+ SUBTITLE_ENCODING_KOI8_R,
+ SUBTITLE_ENCODING_MAC_CYRILLIC,
+ SUBTITLE_ENCODING_WINDOWS_1251,
+
+ SUBTITLE_ENCODING_CP_866,
+
+ SUBTITLE_ENCODING_MAC_UKRAINIAN,
+ SUBTITLE_ENCODING_KOI8_U,
+
+ SUBTITLE_ENCODING_GEOSTD8,
+
+ SUBTITLE_ENCODING_ISO_8859_7,
+ SUBTITLE_ENCODING_MAC_GREEK,
+ SUBTITLE_ENCODING_WINDOWS_1253,
+
+ SUBTITLE_ENCODING_MAC_GUJARATI,
+
+ SUBTITLE_ENCODING_MAC_GURMUKHI,
+
+ SUBTITLE_ENCODING_ISO_8859_8_I,
+ SUBTITLE_ENCODING_IBM_862,
+ SUBTITLE_ENCODING_MAC_HEBREW,
+ SUBTITLE_ENCODING_WINDOWS_1255,
+
+ SUBTITLE_ENCODING_ISO_8859_8,
+
+ SUBTITLE_ENCODING_MAC_DEVANAGARI,
+
+ SUBTITLE_ENCODING_MAC_ICELANDIC,
+
+ SUBTITLE_ENCODING_EUC_JP,
+ SUBTITLE_ENCODING_ISO_2022_JP,
+ SUBTITLE_ENCODING_SHIFT_JIS,
+
+ SUBTITLE_ENCODING_EUC_KR,
+ SUBTITLE_ENCODING_ISO_2022_KR,
+ SUBTITLE_ENCODING_JOHAB,
+ SUBTITLE_ENCODING_UHC,
+
+ SUBTITLE_ENCODING_ISO_8859_10,
+
+ SUBTITLE_ENCODING_MAC_FARSI,
+
+ SUBTITLE_ENCODING_ISO_8859_16,
+ SUBTITLE_ENCODING_MAC_ROMANIAN,
+
+ SUBTITLE_ENCODING_ISO_8859_3,
+
+ SUBTITLE_ENCODING_TIS_620,
+
+ SUBTITLE_ENCODING_ISO_8859_9,
+ SUBTITLE_ENCODING_IBM_857,
+ SUBTITLE_ENCODING_MAC_TURKISH,
+ SUBTITLE_ENCODING_WINDOWS_1254,
+
+ SUBTITLE_ENCODING_UTF_7,
+ SUBTITLE_ENCODING_UTF_8,
+ SUBTITLE_ENCODING_UTF_16,
+ SUBTITLE_ENCODING_UCS_2,
+ SUBTITLE_ENCODING_UCS_4,
+
+ SUBTITLE_ENCODING_ISO_8859_1,
+ SUBTITLE_ENCODING_ISO_8859_15,
+ SUBTITLE_ENCODING_IBM_850,
+ SUBTITLE_ENCODING_MAC_ROMAN,
+ SUBTITLE_ENCODING_WINDOWS_1252,
+
+ SUBTITLE_ENCODING_TCVN,
+ SUBTITLE_ENCODING_VISCII,
+ SUBTITLE_ENCODING_WINDOWS_1258,
+
+ SUBTITLE_ENCODING_LAST
+} SubtitleEncodingIndex;
+
+
+typedef struct
+{
+ int index;
+ gboolean valid;
+ char *charset;
+ char *name;
+} SubtitleEncoding;
+
+
+static SubtitleEncoding encodings[] = {
+
+ {SUBTITLE_ENCODING_CURRENT_LOCALE, TRUE,
+ NULL, N_("Current Locale")},
+
+ {SUBTITLE_ENCODING_ISO_8859_6, FALSE,
+ "ISO-8859-6", N_("Arabic")},
+ {SUBTITLE_ENCODING_IBM_864, FALSE,
+ "IBM864", N_("Arabic")},
+ {SUBTITLE_ENCODING_MAC_ARABIC, FALSE,
+ "MAC_ARABIC", N_("Arabic")},
+ {SUBTITLE_ENCODING_WINDOWS_1256, FALSE,
+ "WINDOWS-1256", N_("Arabic")},
+
+ {SUBTITLE_ENCODING_ARMSCII_8, FALSE,
+ "ARMSCII-8", N_("Armenian")},
+
+ {SUBTITLE_ENCODING_ISO_8859_4, FALSE,
+ "ISO-8859-4", N_("Baltic")},
+ {SUBTITLE_ENCODING_ISO_8859_13, FALSE,
+ "ISO-8859-13", N_("Baltic")},
+ {SUBTITLE_ENCODING_WINDOWS_1257, FALSE,
+ "WINDOWS-1257", N_("Baltic")},
+
+ {SUBTITLE_ENCODING_ISO_8859_14, FALSE,
+ "ISO-8859-14", N_("Celtic")},
+
+ {SUBTITLE_ENCODING_ISO_8859_2, FALSE,
+ "ISO-8859-2", N_("Central European")},
+ {SUBTITLE_ENCODING_IBM_852, FALSE,
+ "IBM852", N_("Central European")},
+ {SUBTITLE_ENCODING_MAC_CE, FALSE,
+ "MAC_CE", N_("Central European")},
+ {SUBTITLE_ENCODING_WINDOWS_1250, FALSE,
+ "WINDOWS-1250", N_("Central European")},
+
+ {SUBTITLE_ENCODING_GB18030, FALSE,
+ "GB18030", N_("Chinese Simplified")},
+ {SUBTITLE_ENCODING_GB2312, FALSE,
+ "GB2312", N_("Chinese Simplified")},
+ {SUBTITLE_ENCODING_GBK, FALSE,
+ "GBK", N_("Chinese Simplified")},
+ {SUBTITLE_ENCODING_HZ, FALSE,
+ "HZ", N_("Chinese Simplified")},
+
+ {SUBTITLE_ENCODING_BIG5, FALSE,
+ "BIG5", N_("Chinese Traditional")},
+ {SUBTITLE_ENCODING_BIG5_HKSCS, FALSE,
+ "BIG5-HKSCS", N_("Chinese Traditional")},
+ {SUBTITLE_ENCODING_EUC_TW, FALSE,
+ "EUC-TW", N_("Chinese Traditional")},
+
+ {SUBTITLE_ENCODING_MAC_CROATIAN, FALSE,
+ "MAC_CROATIAN", N_("Croatian")},
+
+ {SUBTITLE_ENCODING_ISO_8859_5, FALSE,
+ "ISO-8859-5", N_("Cyrillic")},
+ {SUBTITLE_ENCODING_IBM_855, FALSE,
+ "IBM855", N_("Cyrillic")},
+ {SUBTITLE_ENCODING_ISO_IR_111, FALSE,
+ "ISO-IR-111", N_("Cyrillic")},
+ {SUBTITLE_ENCODING_KOI8_R, FALSE,
+ "KOI8-R", N_("Cyrillic")},
+ {SUBTITLE_ENCODING_MAC_CYRILLIC, FALSE,
+ "MAC-CYRILLIC", N_("Cyrillic")},
+ {SUBTITLE_ENCODING_WINDOWS_1251, FALSE,
+ "WINDOWS-1251", N_("Cyrillic")},
+
+ {SUBTITLE_ENCODING_CP_866, FALSE,
+ "CP866", N_("Cyrillic/Russian")},
+
+ {SUBTITLE_ENCODING_MAC_UKRAINIAN, FALSE,
+ "MAC_UKRAINIAN", N_("Cyrillic/Ukrainian")},
+ {SUBTITLE_ENCODING_KOI8_U, FALSE,
+ "KOI8-U", N_("Cyrillic/Ukrainian")},
+
+ {SUBTITLE_ENCODING_GEOSTD8, FALSE,
+ "GEORGIAN-PS", N_("Georgian")},
+
+ {SUBTITLE_ENCODING_ISO_8859_7, FALSE,
+ "ISO-8859-7", N_("Greek")},
+ {SUBTITLE_ENCODING_MAC_GREEK, FALSE,
+ "MAC_GREEK", N_("Greek")},
+ {SUBTITLE_ENCODING_WINDOWS_1253, FALSE,
+ "WINDOWS-1253", N_("Greek")},
+
+ {SUBTITLE_ENCODING_MAC_GUJARATI, FALSE,
+ "MAC_GUJARATI", N_("Gujarati")},
+
+ {SUBTITLE_ENCODING_MAC_GURMUKHI, FALSE,
+ "MAC_GURMUKHI", N_("Gurmukhi")},
+
+ {SUBTITLE_ENCODING_ISO_8859_8_I, FALSE,
+ "ISO-8859-8-I", N_("Hebrew")},
+ {SUBTITLE_ENCODING_IBM_862, FALSE,
+ "IBM862", N_("Hebrew")},
+ {SUBTITLE_ENCODING_MAC_HEBREW, FALSE,
+ "MAC_HEBREW", N_("Hebrew")},
+ {SUBTITLE_ENCODING_WINDOWS_1255, FALSE,
+ "WINDOWS-1255", N_("Hebrew")},
+
+ {SUBTITLE_ENCODING_ISO_8859_8, FALSE,
+ "ISO-8859-8", N_("Hebrew Visual")},
+
+ {SUBTITLE_ENCODING_MAC_DEVANAGARI, FALSE,
+ "MAC_DEVANAGARI", N_("Hindi")},
+
+ {SUBTITLE_ENCODING_MAC_ICELANDIC, FALSE,
+ "MAC_ICELANDIC", N_("Icelandic")},
+
+ {SUBTITLE_ENCODING_EUC_JP, FALSE,
+ "EUC-JP", N_("Japanese")},
+ {SUBTITLE_ENCODING_ISO_2022_JP, FALSE,
+ "ISO2022JP", N_("Japanese")},
+ {SUBTITLE_ENCODING_SHIFT_JIS, FALSE,
+ "SHIFT-JIS", N_("Japanese")},
+
+ {SUBTITLE_ENCODING_EUC_KR, FALSE,
+ "EUC-KR", N_("Korean")},
+ {SUBTITLE_ENCODING_ISO_2022_KR, FALSE,
+ "ISO2022KR", N_("Korean")},
+ {SUBTITLE_ENCODING_JOHAB, FALSE,
+ "JOHAB", N_("Korean")},
+ {SUBTITLE_ENCODING_UHC, FALSE,
+ "UHC", N_("Korean")},
+
+ {SUBTITLE_ENCODING_ISO_8859_10, FALSE,
+ "ISO-8859-10", N_("Nordic")},
+
+ {SUBTITLE_ENCODING_MAC_FARSI, FALSE,
+ "MAC_FARSI", N_("Persian")},
+
+ {SUBTITLE_ENCODING_ISO_8859_16, FALSE,
+ "ISO-8859-16", N_("Romanian")},
+ {SUBTITLE_ENCODING_MAC_ROMANIAN, FALSE,
+ "MAC_ROMANIAN", N_("Romanian")},
+
+ {SUBTITLE_ENCODING_ISO_8859_3, FALSE,
+ "ISO-8859-3", N_("South European")},
+
+ {SUBTITLE_ENCODING_TIS_620, FALSE,
+ "TIS-620", N_("Thai")},
+
+ {SUBTITLE_ENCODING_ISO_8859_9, FALSE,
+ "ISO-8859-9", N_("Turkish")},
+ {SUBTITLE_ENCODING_IBM_857, FALSE,
+ "IBM857", N_("Turkish")},
+ {SUBTITLE_ENCODING_MAC_TURKISH, FALSE,
+ "MAC_TURKISH", N_("Turkish")},
+ {SUBTITLE_ENCODING_WINDOWS_1254, FALSE,
+ "WINDOWS-1254", N_("Turkish")},
+
+ {SUBTITLE_ENCODING_UTF_7, FALSE,
+ "UTF-7", N_("Unicode")},
+ {SUBTITLE_ENCODING_UTF_8, FALSE,
+ "UTF-8", N_("Unicode")},
+ {SUBTITLE_ENCODING_UTF_16, FALSE,
+ "UTF-16", N_("Unicode")},
+ {SUBTITLE_ENCODING_UCS_2, FALSE,
+ "UCS-2", N_("Unicode")},
+ {SUBTITLE_ENCODING_UCS_4, FALSE,
+ "UCS-4", N_("Unicode")},
+
+ {SUBTITLE_ENCODING_ISO_8859_1, FALSE,
+ "ISO-8859-1", N_("Western")},
+ {SUBTITLE_ENCODING_ISO_8859_15, FALSE,
+ "ISO-8859-15", N_("Western")},
+ {SUBTITLE_ENCODING_IBM_850, FALSE,
+ "IBM850", N_("Western")},
+ {SUBTITLE_ENCODING_MAC_ROMAN, FALSE,
+ "MAC_ROMAN", N_("Western")},
+ {SUBTITLE_ENCODING_WINDOWS_1252, FALSE,
+ "WINDOWS-1252", N_("Western")},
+
+ {SUBTITLE_ENCODING_TCVN, FALSE,
+ "TCVN", N_("Vietnamese")},
+ {SUBTITLE_ENCODING_VISCII, FALSE,
+ "VISCII", N_("Vietnamese")},
+ {SUBTITLE_ENCODING_WINDOWS_1258, FALSE,
+ "WINDOWS-1258", N_("Vietnamese")}
+};
+
+static const SubtitleEncoding *
+find_encoding_by_charset (const char *charset)
+{
+ int i;
+
+ i = 1; /* skip current locale */
+ while (i < SUBTITLE_ENCODING_LAST) {
+ if (strcasecmp (charset, encodings[i].charset) == 0)
+ return &encodings[i];
+
+ ++i;
+ }
+
+ if (strcasecmp (charset,
+ encodings[SUBTITLE_ENCODING_CURRENT_LOCALE].charset) == 0)
+ return &encodings[SUBTITLE_ENCODING_CURRENT_LOCALE];
+
+ return NULL;
+}
+
+static void
+subtitle_encoding_init (void)
+{
+ int i;
+ gsize bytes_read, bytes_written;
+ gchar *converted;
+ gchar ascii_sample[96];
+
+ g_get_charset ((const char **)
+ &encodings[SUBTITLE_ENCODING_CURRENT_LOCALE].charset);
+
+ g_assert (G_N_ELEMENTS (encodings) == SUBTITLE_ENCODING_LAST);
+
+ /* Initialize the sample text with all of the printing ASCII characters
+ * from space (32) to the tilde (126), 95 in all. */
+ for (i = 0; i < (int) sizeof (ascii_sample); i++)
+ ascii_sample[i] = i + 32;
+
+ ascii_sample[sizeof (ascii_sample) - 1] = '\0';
+
+ i = 0;
+ while (i < SUBTITLE_ENCODING_LAST) {
+ bytes_read = 0;
+ bytes_written = 0;
+
+ g_assert (encodings[i].index == i);
+
+ /* Translate the names */
+ encodings[i].name = _(encodings[i].name);
+
+ /* Test that the encoding is a proper superset of ASCII (which naive
+ * apps are going to use anyway) by attempting to validate the text
+ * using the current encoding. This also flushes out any encodings
+ * which the underlying GIConv implementation can't support.
+ */
+ converted = g_convert (ascii_sample, sizeof (ascii_sample) - 1,
+ encodings[i].charset, encodings[i].charset,
+ &bytes_read, &bytes_written, NULL);
+
+ /* The encoding is only valid if ASCII passes through cleanly. */
+ if (i == SUBTITLE_ENCODING_CURRENT_LOCALE)
+ encodings[i].valid = TRUE;
+ else
+ encodings[i].valid =
+ (bytes_read == (sizeof (ascii_sample) - 1)) &&
+ (converted != NULL) && (strcmp (converted, ascii_sample) == 0);
+
+#ifdef DEBUG_ENCODINGS
+ if (!encodings[i].valid) {
+ g_print ("Rejecting encoding %s as invalid:\n", encodings[i].charset);
+ g_print (" input \"%s\"\n", ascii_sample);
+ g_print (" output \"%s\"\n\n", converted ? converted : "(null)");
+ }
+#endif
+
+ /* Discard the converted string. */
+ g_free (converted);
+
+ ++i;
+ }
+}
+
+static int
+subtitle_encoding_get_index (const char *charset)
+{
+ const SubtitleEncoding *e;
+
+ e = find_encoding_by_charset (charset);
+ if (e != NULL)
+ return e->index;
+ else
+ return SUBTITLE_ENCODING_CURRENT_LOCALE;
+}
+
+static const char *
+subtitle_encoding_get_charset (int index)
+{
+ const SubtitleEncoding *e;
+
+ if (index >= SUBTITLE_ENCODING_LAST)
+ e = &encodings[SUBTITLE_ENCODING_CURRENT_LOCALE];
+ else if (index < SUBTITLE_ENCODING_CURRENT_LOCALE)
+ e = &encodings[SUBTITLE_ENCODING_CURRENT_LOCALE];
+ else if (!encodings[index].valid)
+ e = &encodings[SUBTITLE_ENCODING_CURRENT_LOCALE];
+ else
+ e = &encodings[index];
+ return e->charset;
+}
+
+enum
+{
+ INDEX_COL,
+ NAME_COL
+};
+
+static gint
+compare (GtkTreeModel * model, GtkTreeIter * a, GtkTreeIter * b, gpointer data)
+{
+ gchar *str_a, *str_b;
+ gint result;
+
+ gtk_tree_model_get (model, a, NAME_COL, &str_a, -1);
+ gtk_tree_model_get (model, b, NAME_COL, &str_b, -1);
+
+ result = strcmp (str_a, str_b);
+
+ g_free (str_a);
+ g_free (str_b);
+
+ return result;
+}
+
+static void
+is_encoding_sensitive (GtkCellLayout * cell_layout,
+ GtkCellRenderer * cell,
+ GtkTreeModel * tree_model, GtkTreeIter * iter, gpointer data)
+{
+
+ gboolean sensitive;
+
+ sensitive = !gtk_tree_model_iter_has_child (tree_model, iter);
+ g_object_set (cell, "sensitive", sensitive, NULL);
+}
+
+static GtkTreeModel *
+subtitle_encoding_create_store (void)
+{
+ gchar *label;
+ gchar *lastlang = "";
+ GtkTreeIter iter, iter2;
+ GtkTreeStore *store;
+ int i;
+
+ store = gtk_tree_store_new (2, G_TYPE_INT, G_TYPE_STRING);
+
+ for (i = 0; i < SUBTITLE_ENCODING_LAST; i++) {
+ if (encodings[i].valid) {
+ if (strcmp (lastlang, encodings[i].name)) {
+ lastlang = encodings[i].name;
+ gtk_tree_store_append (store, &iter, NULL);
+ gtk_tree_store_set (store, &iter, INDEX_COL,
+ -1, NAME_COL, lastlang, -1);
+ }
+ label = g_strdup_printf("%s (%s)", lastlang, encodings[i].charset);
+ gtk_tree_store_append (store, &iter2, &iter);
+ gtk_tree_store_set (store, &iter2, INDEX_COL,
+ encodings[i].index, NAME_COL, label, -1);
+ g_free(label);
+ }
+ }
+ gtk_tree_sortable_set_default_sort_func (GTK_TREE_SORTABLE (store),
+ compare, NULL, NULL);
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store),
+ NAME_COL, GTK_SORT_ASCENDING);
+ return GTK_TREE_MODEL (store);
+}
+
+static void
+subtitle_encoding_combo_render (GtkComboBox * combo)
+{
+ GtkCellRenderer *renderer;
+
+ renderer = gtk_cell_renderer_text_new ();
+ gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
+ gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
+ "text", NAME_COL, NULL);
+ gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT (combo),
+ renderer, is_encoding_sensitive, NULL, NULL);
+}
+
+const char *
+totem_subtitle_encoding_get_selected (GtkComboBox * combo)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gint index = -1;
+
+ model = gtk_combo_box_get_model (combo);
+ if (gtk_combo_box_get_active_iter (combo, &iter)) {
+ gtk_tree_model_get (model, &iter, INDEX_COL, &index, -1);
+ }
+ if (index == -1)
+ return NULL;
+ return subtitle_encoding_get_charset (index);
+}
+
+void
+totem_subtitle_encoding_set (GtkComboBox * combo, const char *encoding)
+{
+ GtkTreeModel *model;
+ GtkTreeIter iter, iter2;
+ gint index, i;
+
+ g_return_if_fail (encoding != NULL);
+
+ model = gtk_combo_box_get_model (combo);
+ index = subtitle_encoding_get_index (encoding);
+ gtk_tree_model_get_iter_first (model, &iter);
+ do {
+ if (!gtk_tree_model_iter_has_child (model, &iter))
+ continue;
+ if (!gtk_tree_model_iter_children (model, &iter2, &iter))
+ continue;
+ do {
+ gtk_tree_model_get (model, &iter2, INDEX_COL, &i, -1);
+ if (i == index)
+ break;
+ } while (gtk_tree_model_iter_next (model, &iter2));
+ if (i == index)
+ break;
+ } while (gtk_tree_model_iter_next (model, &iter));
+ gtk_combo_box_set_active_iter (combo, &iter2);
+}
+
+void
+totem_subtitle_encoding_init (GtkComboBox *combo)
+{
+ GtkTreeModel *model;
+ subtitle_encoding_init ();
+ model = subtitle_encoding_create_store ();
+ gtk_combo_box_set_model (combo, model);
+ g_object_unref (model);
+ subtitle_encoding_combo_render (combo);
+}
+
+/*
+ * vim: sw=2 ts=8 cindent noai bs=2
+ */
diff --git a/trunk/libempathy-gtk/totem-subtitle-encoding.h b/trunk/libempathy-gtk/totem-subtitle-encoding.h
new file mode 100644
index 000000000..7283f003a
--- /dev/null
+++ b/trunk/libempathy-gtk/totem-subtitle-encoding.h
@@ -0,0 +1,12 @@
+/* Encoding stuff */
+
+#ifndef TOTEM_SUBTITLE_ENCODING_H
+#define TOTEM_SUBTITLE_ENCODING_H
+
+#include <gtk/gtk.h>
+
+void totem_subtitle_encoding_init (GtkComboBox *combo);
+void totem_subtitle_encoding_set (GtkComboBox *combo, const char *encoding);
+const char * totem_subtitle_encoding_get_selected (GtkComboBox *combo);
+
+#endif /* SUBTITLE_ENCODING_H */
diff --git a/trunk/libempathy/.gitignore b/trunk/libempathy/.gitignore
new file mode 100644
index 000000000..8617dcbd0
--- /dev/null
+++ b/trunk/libempathy/.gitignore
@@ -0,0 +1,4 @@
+empathy-chandler-glue.h
+empathy-marshal.*
+empathy-filter-glue.h
+tp-stream-engine-gen.h
diff --git a/trunk/libempathy/Makefile.am b/trunk/libempathy/Makefile.am
new file mode 100644
index 000000000..0db883d3d
--- /dev/null
+++ b/trunk/libempathy/Makefile.am
@@ -0,0 +1,175 @@
+AM_CPPFLAGS = \
+ -I. \
+ -I$(top_srcdir) \
+ -I$(top_builddir) \
+ -DDATADIR=\""$(datadir)"\" \
+ $(LIBEMPATHY_CFLAGS) \
+ $(WARN_CFLAGS)
+
+BUILT_SOURCES = \
+ empathy-marshal.h \
+ empathy-marshal.c \
+ empathy-marshal.list \
+ empathy-enum-types.h \
+ empathy-enum-types.c
+
+lib_LTLIBRARIES = libempathy.la
+
+libempathy_la_SOURCES = \
+ empathy-avatar.c \
+ empathy-time.c \
+ empathy-status-presets.c \
+ empathy-debug.c \
+ empathy-utils.c \
+ empathy-message.c \
+ empathy-chatroom-manager.c \
+ empathy-chatroom.c \
+ empathy-contact.c \
+ empathy-contact-groups.c \
+ empathy-contact-list.c \
+ empathy-contact-manager.c \
+ empathy-contact-factory.c \
+ empathy-tp-contact-factory.c \
+ empathy-tp-group.c \
+ empathy-tp-contact-list.c \
+ empathy-tp-chat.c \
+ empathy-tp-roomlist.c \
+ empathy-tp-call.c \
+ empathy-tp-tube.c \
+ empathy-idle.c \
+ empathy-log-manager.c \
+ empathy-irc-network-manager.c \
+ empathy-irc-network.c \
+ empathy-irc-server.c \
+ empathy-tube-handler.c \
+ empathy-dispatcher.c
+
+# do not distribute generated files
+nodist_libempathy_la_SOURCES =\
+ $(BUILT_SOURCES)
+
+libempathy_la_LIBADD = \
+ $(top_builddir)/extensions/libemp-extensions.la \
+ $(LIBEMPATHY_LIBS)
+
+libempathy_la_LDFLAGS = \
+ -version-info ${LIBEMPATHY_CURRENT}:${LIBEMPATHY_REVISION}:${LIBEMPATHY_AGE} \
+ -export-symbols-regex ^empathy_
+
+libempathy_headers = \
+ empathy-avatar.h \
+ empathy-time.h \
+ empathy-status-presets.h \
+ empathy-debug.h \
+ empathy-utils.h \
+ empathy-message.h \
+ empathy-chatroom-manager.h \
+ empathy-chatroom.h \
+ empathy-contact.h \
+ empathy-contact-groups.h \
+ empathy-contact-list.h \
+ empathy-contact-manager.h \
+ empathy-contact-factory.h \
+ empathy-tp-contact-factory.h \
+ empathy-tp-group.h \
+ empathy-tp-contact-list.h \
+ empathy-tp-chat.h \
+ empathy-tp-roomlist.h \
+ empathy-tp-call.h \
+ empathy-tp-tube.h \
+ empathy-idle.h \
+ empathy-log-manager.h \
+ empathy-irc-network-manager.h \
+ empathy-irc-network.h \
+ empathy-irc-server.h \
+ empathy-tube-handler.h \
+ empathy-dispatcher.h
+
+libempathy_includedir = $(includedir)/libempathy/
+libempathy_include_HEADERS = \
+ $(libempathy_headers) \
+ empathy-enum-types.h
+
+empathy-marshal.list: $(libempathy_la_SOURCES) Makefile.am
+ ( cd $(srcdir) && \
+ sed -n -e 's/.*empathy_marshal_\([[:upper:][:digit:]]*__[[:upper:][:digit:]_]*\).*/\1/p' \
+ $(libempathy_la_SOURCES) ) \
+ | sed -e 's/__/:/' -e 'y/_/,/' | sort -u > $@.tmp
+ if cmp -s $@.tmp $@; then \
+ rm $@.tmp; \
+ else \
+ mv $@.tmp $@; \
+ fi
+
+%-marshal.h: %-marshal.list Makefile
+ $(GLIB_GENMARSHAL) --header --prefix=_$(subst -,_,$*)_marshal $< > $*-marshal.h
+
+%-marshal.c: %-marshal.list Makefile
+ echo "#include \"empathy-marshal.h\"" > $@ && \
+ $(GLIB_GENMARSHAL) --body --prefix=_$(subst -,_,$*)_marshal $< >> $*-marshal.c
+
+empathy-enum-types.h: stamp-empathy-enum-types.h
+ @true
+stamp-empathy-enum-types.h: $(libempathy_headers) Makefile
+ (cd $(srcdir) \
+ && glib-mkenums \
+ --fhead "#ifndef __LIBEMPATHY_ENUM_TYPES_H__\n" \
+ --fhead "#define __LIBEMPATHY_ENUM_TYPES_H__ 1\n\n" \
+ --fhead "#include <glib-object.h>\n\n" \
+ --fhead "G_BEGIN_DECLS\n\n" \
+ --ftail "G_END_DECLS\n\n" \
+ --ftail "#endif /* __LIBEMPATHY_ENUM_TYPES_H__ */\n" \
+ --fprod "#include <libempathy/@filename@>\n" \
+ --eprod "#define EMPATHY_TYPE_@ENUMSHORT@ @enum_name@_get_type()\n" \
+ --eprod "GType @enum_name@_get_type (void);\n" \
+ $(libempathy_headers) ) > xgen-gth \
+ && (cmp -s xgen-gth empathy-enum-type.h || cp xgen-gth empathy-enum-types.h) \
+ && rm -f xgen-gth \
+ && echo timestamp > $(@F)
+
+empathy-enum-types.c: $(libempathy_headers) Makefile
+ (cd $(srcdir) \
+ && glib-mkenums \
+ --fhead "#include <config.h>\n" \
+ --fhead "#include <glib-object.h>\n" \
+ --fhead "#include \"empathy-enum-types.h\"\n\n" \
+ --fprod "\n/* enumerations from \"@filename@\" */" \
+ --vhead "static const G@Type@Value _@enum_name@_values[] = {" \
+ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
+ --vtail " { 0, NULL, NULL }\n};\n\n" \
+ --vtail "GType\n@enum_name@_get_type (void)\n{\n" \
+ --vtail " static GType type = 0;\n\n" \
+ --vtail " if (!type)\n" \
+ --vtail " type = g_@type@_register_static (\"@EnumName@\", _@enum_name@_values);\n\n" \
+ --vtail " return type;\n}\n\n" \
+ $(libempathy_headers) ) > xgen-gtc \
+ && cp xgen-gtc $(@F) \
+ && rm -f xgen-gtc
+
+dtddir = $(datadir)/empathy
+dtd_DATA = \
+ empathy-status-presets.dtd \
+ empathy-contact-groups.dtd \
+ empathy-chatroom-manager.dtd \
+ empathy-irc-networks.dtd
+
+stylesheetdir = $(datadir)/empathy
+stylesheet_DATA = \
+ empathy-log-manager.xsl
+
+ircnetworksdir = $(datadir)/empathy
+ircnetworks_DATA = \
+ irc-networks.xml
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libempathy.pc
+
+EXTRA_DIST = \
+ empathy-marshal.list \
+ $(stylesheet_DATA) \
+ $(dtd_DATA) \
+ $(ircnetworks_DATA)
+
+CLEANFILES = \
+ $(BUILT_SOURCES) \
+ stamp-empathy-enum-types.h
diff --git a/trunk/libempathy/empathy-avatar.c b/trunk/libempathy/empathy-avatar.c
new file mode 100644
index 000000000..41395d6e9
--- /dev/null
+++ b/trunk/libempathy/empathy-avatar.c
@@ -0,0 +1,179 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2006 Xavier Claessens <xclaesse@gmail.com>
+ * 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 <telepathy-glib/util.h>
+
+#include "empathy-avatar.h"
+#include "empathy-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include "empathy-debug.h"
+
+GType
+empathy_avatar_get_type (void)
+{
+ static GType type_id = 0;
+
+ if (!type_id) {
+ type_id = g_boxed_type_register_static ("EmpathyAvatar",
+ (GBoxedCopyFunc) empathy_avatar_ref,
+ (GBoxedFreeFunc) empathy_avatar_unref);
+ }
+
+ return type_id;
+}
+
+static gchar *
+avatar_get_filename (const gchar *token)
+{
+ gchar *avatar_path;
+ gchar *avatar_file;
+ gchar *token_escaped;
+
+ avatar_path = g_build_filename (g_get_home_dir (),
+ ".gnome2",
+ PACKAGE_NAME,
+ "avatars",
+ NULL);
+ g_mkdir_with_parents (avatar_path, 0700);
+
+ token_escaped = tp_escape_as_identifier (token);
+ avatar_file = g_build_filename (avatar_path, token_escaped, NULL);
+
+ g_free (token_escaped);
+ g_free (avatar_path);
+
+ return avatar_file;
+}
+
+static EmpathyAvatar *
+avatar_new (guchar *data,
+ gsize len,
+ gchar *format,
+ gchar *token)
+{
+ EmpathyAvatar *avatar;
+
+ avatar = g_slice_new0 (EmpathyAvatar);
+ avatar->data = data;
+ avatar->len = len;
+ avatar->format = format;
+ avatar->token = token;
+ avatar->refcount = 1;
+
+ return avatar;
+}
+
+EmpathyAvatar *
+empathy_avatar_new (const guchar *data,
+ const gsize len,
+ const gchar *format,
+ const gchar *token)
+{
+ EmpathyAvatar *avatar;
+ gchar *filename;
+ GError *error = NULL;
+
+ g_return_val_if_fail (data != NULL, NULL);
+ g_return_val_if_fail (len > 0, NULL);
+ g_return_val_if_fail (format != NULL, NULL);
+ g_return_val_if_fail (!G_STR_EMPTY (token), NULL);
+
+ avatar = avatar_new (g_memdup (data, len),
+ len,
+ g_strdup (format),
+ g_strdup (token));
+
+ /* Save to cache if not yet in it */
+ filename = avatar_get_filename (token);
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
+ if (!g_file_set_contents (filename, data, len, &error)) {
+ DEBUG ("Failed to save avatar in cache: %s",
+ error ? error->message : "No error given");
+ g_clear_error (&error);
+ } else {
+ DEBUG ("Avatar saved to %s", filename);
+ }
+ }
+ g_free (filename);
+
+ return avatar;
+}
+
+EmpathyAvatar *
+empathy_avatar_new_from_cache (const gchar *token)
+{
+ EmpathyAvatar *avatar = NULL;
+ gchar *filename;
+ gchar *data = NULL;
+ gsize len;
+ GError *error = NULL;
+
+ g_return_val_if_fail (!G_STR_EMPTY (token), NULL);
+
+ /* Load the avatar from file if it exists */
+ filename = avatar_get_filename (token);
+ if (g_file_test (filename, G_FILE_TEST_EXISTS)) {
+ if (!g_file_get_contents (filename, &data, &len, &error)) {
+ DEBUG ("Failed to load avatar from cache: %s",
+ error ? error->message : "No error given");
+ g_clear_error (&error);
+ }
+ }
+
+ if (data) {
+ DEBUG ("Avatar loaded from %s", filename);
+ avatar = avatar_new (data, len, NULL, g_strdup (token));
+ }
+
+ g_free (filename);
+
+ return avatar;
+}
+
+void
+empathy_avatar_unref (EmpathyAvatar *avatar)
+{
+ g_return_if_fail (avatar != NULL);
+
+ avatar->refcount--;
+ if (avatar->refcount == 0) {
+ g_free (avatar->data);
+ g_free (avatar->format);
+ g_free (avatar->token);
+ g_slice_free (EmpathyAvatar, avatar);
+ }
+}
+
+EmpathyAvatar *
+empathy_avatar_ref (EmpathyAvatar *avatar)
+{
+ g_return_val_if_fail (avatar != NULL, NULL);
+
+ avatar->refcount++;
+
+ return avatar;
+}
+
diff --git a/trunk/libempathy/empathy-avatar.h b/trunk/libempathy/empathy-avatar.h
new file mode 100644
index 000000000..63be370a2
--- /dev/null
+++ b/trunk/libempathy/empathy-avatar.h
@@ -0,0 +1,53 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2006 Xavier Claessens <xclaesse@gmail.com>
+ * 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_AVATAR_H__
+#define __EMPATHY_AVATAR_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_AVATAR (empathy_avatar_get_type ())
+
+typedef struct _EmpathyAvatar EmpathyAvatar;
+
+struct _EmpathyAvatar {
+ guchar *data;
+ gsize len;
+ gchar *format;
+ gchar *token;
+ guint refcount;
+};
+
+GType empathy_avatar_get_type (void) G_GNUC_CONST;
+EmpathyAvatar * empathy_avatar_new (const guchar *avatar,
+ const gsize len,
+ const gchar *format,
+ const gchar *token);
+EmpathyAvatar * empathy_avatar_new_from_cache (const gchar *token);
+EmpathyAvatar * empathy_avatar_ref (EmpathyAvatar *avatar);
+void empathy_avatar_unref (EmpathyAvatar *avatar);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_AVATAR_H__ */
diff --git a/trunk/libempathy/empathy-chatroom-manager.c b/trunk/libempathy/empathy-chatroom-manager.c
new file mode 100644
index 000000000..b9eef3c09
--- /dev/null
+++ b/trunk/libempathy/empathy-chatroom-manager.c
@@ -0,0 +1,497 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ * Martyn Russell <martyn@imendio.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+#include "empathy-chatroom-manager.h"
+#include "empathy-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include "empathy-debug.h"
+
+#define CHATROOMS_XML_FILENAME "chatrooms.xml"
+#define CHATROOMS_DTD_FILENAME "empathy-chatroom-manager.dtd"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyChatroomManager)
+typedef struct {
+ GList *chatrooms;
+} EmpathyChatroomManagerPriv;
+
+static void chatroom_manager_finalize (GObject *object);
+static gboolean chatroom_manager_get_all (EmpathyChatroomManager *manager);
+static gboolean chatroom_manager_file_parse (EmpathyChatroomManager *manager,
+ const gchar *filename);
+static void chatroom_manager_parse_chatroom (EmpathyChatroomManager *manager,
+ xmlNodePtr node);
+static gboolean chatroom_manager_file_save (EmpathyChatroomManager *manager);
+
+enum {
+ CHATROOM_ADDED,
+ CHATROOM_REMOVED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE (EmpathyChatroomManager, empathy_chatroom_manager, G_TYPE_OBJECT);
+
+static void
+empathy_chatroom_manager_class_init (EmpathyChatroomManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = chatroom_manager_finalize;
+
+ signals[CHATROOM_ADDED] =
+ g_signal_new ("chatroom-added",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE,
+ 1, EMPATHY_TYPE_CHATROOM);
+ signals[CHATROOM_REMOVED] =
+ g_signal_new ("chatroom-removed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE,
+ 1, EMPATHY_TYPE_CHATROOM);
+
+ g_type_class_add_private (object_class,
+ sizeof (EmpathyChatroomManagerPriv));
+}
+
+static void
+empathy_chatroom_manager_init (EmpathyChatroomManager *manager)
+{
+ EmpathyChatroomManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
+ EMPATHY_TYPE_CHATROOM_MANAGER, EmpathyChatroomManagerPriv);
+
+ manager->priv = priv;
+}
+
+static void
+chatroom_manager_finalize (GObject *object)
+{
+ EmpathyChatroomManagerPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ g_list_foreach (priv->chatrooms, (GFunc) g_object_unref, NULL);
+ g_list_free (priv->chatrooms);
+
+ (G_OBJECT_CLASS (empathy_chatroom_manager_parent_class)->finalize) (object);
+}
+
+EmpathyChatroomManager *
+empathy_chatroom_manager_new (void)
+{
+ static EmpathyChatroomManager *manager = NULL;
+
+ if (!manager) {
+ EmpathyChatroomManagerPriv *priv;
+
+ manager = g_object_new (EMPATHY_TYPE_CHATROOM_MANAGER, NULL);
+ priv = GET_PRIV (manager);
+ chatroom_manager_get_all (manager);
+
+ g_object_add_weak_pointer (G_OBJECT (manager), (gpointer) &manager);
+ } else {
+ g_object_ref (manager);
+ }
+
+ return manager;
+}
+
+gboolean
+empathy_chatroom_manager_add (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom)
+{
+ EmpathyChatroomManagerPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager), FALSE);
+ g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), FALSE);
+
+ priv = GET_PRIV (manager);
+
+ /* don't add more than once */
+ if (!empathy_chatroom_manager_find (manager,
+ empathy_chatroom_get_account (chatroom),
+ empathy_chatroom_get_room (chatroom))) {
+ priv->chatrooms = g_list_prepend (priv->chatrooms, g_object_ref (chatroom));
+ chatroom_manager_file_save (manager);
+
+ g_signal_emit (manager, signals[CHATROOM_ADDED], 0, chatroom);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void
+empathy_chatroom_manager_remove (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom)
+{
+ EmpathyChatroomManagerPriv *priv;
+ GList *l;
+
+ g_return_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager));
+ g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
+
+ priv = GET_PRIV (manager);
+
+ for (l = priv->chatrooms; l; l = l->next) {
+ EmpathyChatroom *this_chatroom;
+
+ this_chatroom = l->data;
+
+ if (empathy_chatroom_equal (chatroom, this_chatroom)) {
+ priv->chatrooms = g_list_delete_link (priv->chatrooms, l);
+
+ chatroom_manager_file_save (manager);
+
+ g_signal_emit (manager, signals[CHATROOM_REMOVED], 0, this_chatroom);
+ g_object_unref (this_chatroom);
+ break;
+ }
+ }
+}
+
+EmpathyChatroom *
+empathy_chatroom_manager_find (EmpathyChatroomManager *manager,
+ McAccount *account,
+ const gchar *room)
+{
+ EmpathyChatroomManagerPriv *priv;
+ GList *l;
+
+ g_return_val_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager), NULL);
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+ g_return_val_if_fail (room != NULL, NULL);
+
+ priv = GET_PRIV (manager);
+
+ for (l = priv->chatrooms; l; l = l->next) {
+ EmpathyChatroom *chatroom;
+ McAccount *this_account;
+ const gchar *this_room;
+
+ chatroom = l->data;
+ this_account = empathy_chatroom_get_account (chatroom);
+ this_room = empathy_chatroom_get_room (chatroom);
+
+ if (this_account && this_room &&
+ empathy_account_equal (account, this_account) &&
+ strcmp (this_room, room) == 0) {
+ return chatroom;
+ }
+ }
+
+ return NULL;
+}
+
+GList *
+empathy_chatroom_manager_get_chatrooms (EmpathyChatroomManager *manager,
+ McAccount *account)
+{
+ EmpathyChatroomManagerPriv *priv;
+ GList *chatrooms, *l;
+
+ g_return_val_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager), NULL);
+
+ priv = GET_PRIV (manager);
+
+ if (!account) {
+ return g_list_copy (priv->chatrooms);
+ }
+
+ chatrooms = NULL;
+ for (l = priv->chatrooms; l; l = l->next) {
+ EmpathyChatroom *chatroom;
+
+ chatroom = l->data;
+
+ if (empathy_account_equal (account,
+ empathy_chatroom_get_account (chatroom))) {
+ chatrooms = g_list_append (chatrooms, chatroom);
+ }
+ }
+
+ return chatrooms;
+}
+
+guint
+empathy_chatroom_manager_get_count (EmpathyChatroomManager *manager,
+ McAccount *account)
+{
+ EmpathyChatroomManagerPriv *priv;
+ GList *l;
+ guint count = 0;
+
+ g_return_val_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager), 0);
+
+ priv = GET_PRIV (manager);
+
+ if (!account) {
+ return g_list_length (priv->chatrooms);
+ }
+
+ for (l = priv->chatrooms; l; l = l->next) {
+ EmpathyChatroom *chatroom;
+
+ chatroom = l->data;
+
+ if (empathy_account_equal (account,
+ empathy_chatroom_get_account (chatroom))) {
+ count++;
+ }
+ }
+
+ return count;
+}
+
+void
+empathy_chatroom_manager_store (EmpathyChatroomManager *manager)
+{
+ g_return_if_fail (EMPATHY_IS_CHATROOM_MANAGER (manager));
+
+ chatroom_manager_file_save (manager);
+}
+
+/*
+ * API to save/load and parse the chatrooms file.
+ */
+
+static gboolean
+chatroom_manager_get_all (EmpathyChatroomManager *manager)
+{
+ EmpathyChatroomManagerPriv *priv;
+ gchar *dir;
+ gchar *file_with_path = NULL;
+
+ priv = GET_PRIV (manager);
+
+ dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+ if (!g_file_test (dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
+ g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
+ }
+
+ file_with_path = g_build_filename (dir, CHATROOMS_XML_FILENAME, NULL);
+ g_free (dir);
+
+ /* read file in */
+ if (g_file_test (file_with_path, G_FILE_TEST_EXISTS) &&
+ !chatroom_manager_file_parse (manager, file_with_path)) {
+ g_free (file_with_path);
+ return FALSE;
+ }
+
+ g_free (file_with_path);
+
+ return TRUE;
+}
+
+static gboolean
+chatroom_manager_file_parse (EmpathyChatroomManager *manager,
+ const gchar *filename)
+{
+ EmpathyChatroomManagerPriv *priv;
+ xmlParserCtxtPtr ctxt;
+ xmlDocPtr doc;
+ xmlNodePtr chatrooms;
+ xmlNodePtr node;
+
+ priv = GET_PRIV (manager);
+
+ DEBUG ("Attempting to parse file:'%s'...", filename);
+
+ ctxt = xmlNewParserCtxt ();
+
+ /* Parse and validate the file. */
+ doc = xmlCtxtReadFile (ctxt, filename, NULL, 0);
+ if (!doc) {
+ g_warning ("Failed to parse file:'%s'", filename);
+ xmlFreeParserCtxt (ctxt);
+ return FALSE;
+ }
+
+ if (!empathy_xml_validate (doc, CHATROOMS_DTD_FILENAME)) {
+ g_warning ("Failed to validate file:'%s'", filename);
+ xmlFreeDoc(doc);
+ xmlFreeParserCtxt (ctxt);
+ return FALSE;
+ }
+
+ /* The root node, chatrooms. */
+ chatrooms = xmlDocGetRootElement (doc);
+
+ for (node = chatrooms->children; node; node = node->next) {
+ if (strcmp ((gchar *) node->name, "chatroom") == 0) {
+ chatroom_manager_parse_chatroom (manager, node);
+ }
+ }
+
+ DEBUG ("Parsed %d chatrooms", g_list_length (priv->chatrooms));
+
+ xmlFreeDoc(doc);
+ xmlFreeParserCtxt (ctxt);
+
+ return TRUE;
+}
+
+static void
+chatroom_manager_parse_chatroom (EmpathyChatroomManager *manager,
+ xmlNodePtr node)
+{
+ EmpathyChatroomManagerPriv *priv;
+ EmpathyChatroom *chatroom;
+ McAccount *account;
+ xmlNodePtr child;
+ gchar *str;
+ gchar *name;
+ gchar *room;
+ gchar *account_id;
+ gboolean auto_connect;
+
+ priv = GET_PRIV (manager);
+
+ /* default values. */
+ name = NULL;
+ room = NULL;
+ auto_connect = TRUE;
+ account_id = NULL;
+
+ for (child = node->children; child; child = child->next) {
+ gchar *tag;
+
+ if (xmlNodeIsText (child)) {
+ continue;
+ }
+
+ tag = (gchar *) child->name;
+ str = (gchar *) xmlNodeGetContent (child);
+
+ if (strcmp (tag, "name") == 0) {
+ name = g_strdup (str);
+ }
+ else if (strcmp (tag, "room") == 0) {
+ room = g_strdup (str);
+ }
+ else if (strcmp (tag, "auto_connect") == 0) {
+ if (strcmp (str, "yes") == 0) {
+ auto_connect = TRUE;
+ } else {
+ auto_connect = FALSE;
+ }
+ }
+ else if (strcmp (tag, "account") == 0) {
+ account_id = g_strdup (str);
+ }
+
+ xmlFree (str);
+ }
+
+ account = mc_account_lookup (account_id);
+ if (!account) {
+ g_free (name);
+ g_free (room);
+ g_free (account_id);
+ return;
+ }
+
+ chatroom = empathy_chatroom_new_full (account, room, name, auto_connect);
+ priv->chatrooms = g_list_prepend (priv->chatrooms, chatroom);
+ g_signal_emit (manager, signals[CHATROOM_ADDED], 0, chatroom);
+
+ g_object_unref (account);
+ g_free (name);
+ g_free (room);
+ g_free (account_id);
+}
+
+static gboolean
+chatroom_manager_file_save (EmpathyChatroomManager *manager)
+{
+ EmpathyChatroomManagerPriv *priv;
+ xmlDocPtr doc;
+ xmlNodePtr root;
+ GList *l;
+ gchar *dir;
+ gchar *file;
+
+ priv = GET_PRIV (manager);
+
+ dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+ if (!g_file_test (dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
+ g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
+ }
+
+ file = g_build_filename (dir, CHATROOMS_XML_FILENAME, NULL);
+ g_free (dir);
+
+ doc = xmlNewDoc ("1.0");
+ root = xmlNewNode (NULL, "chatrooms");
+ xmlDocSetRootElement (doc, root);
+
+ for (l = priv->chatrooms; l; l = l->next) {
+ EmpathyChatroom *chatroom;
+ xmlNodePtr node;
+ const gchar *account_id;
+
+ chatroom = l->data;
+ account_id = mc_account_get_unique_name (empathy_chatroom_get_account (chatroom));
+
+ node = xmlNewChild (root, NULL, "chatroom", NULL);
+ xmlNewTextChild (node, NULL, "name", empathy_chatroom_get_name (chatroom));
+ xmlNewTextChild (node, NULL, "room", empathy_chatroom_get_room (chatroom));
+ xmlNewTextChild (node, NULL, "account", account_id);
+ xmlNewTextChild (node, NULL, "auto_connect", empathy_chatroom_get_auto_connect (chatroom) ? "yes" : "no");
+ }
+
+ /* Make sure the XML is indented properly */
+ xmlIndentTreeOutput = 1;
+
+ DEBUG ("Saving file:'%s'", file);
+ xmlSaveFormatFileEnc (file, doc, "utf-8", 1);
+ xmlFreeDoc (doc);
+
+ xmlCleanupParser ();
+ xmlMemoryDump ();
+
+ g_free (file);
+
+ return TRUE;
+}
diff --git a/trunk/libempathy/empathy-chatroom-manager.dtd b/trunk/libempathy/empathy-chatroom-manager.dtd
new file mode 100644
index 000000000..df6b953f6
--- /dev/null
+++ b/trunk/libempathy/empathy-chatroom-manager.dtd
@@ -0,0 +1,17 @@
+<!--
+ DTD for Empathys Chat Rooms.
+ by Martyn Russell <martyn@imendio.com>
+ v0.2
+-->
+
+<!-- Root element. -->
+<!ELEMENT chatrooms (chatroom*)>
+
+<!ELEMENT chatroom
+ (name,room,account,(auto_connect?))>
+
+<!ELEMENT name (#PCDATA)>
+<!ELEMENT room (#PCDATA)>
+<!ELEMENT auto_connect (#PCDATA)>
+<!ELEMENT account (#PCDATA)>
+
diff --git a/trunk/libempathy/empathy-chatroom-manager.h b/trunk/libempathy/empathy-chatroom-manager.h
new file mode 100644
index 000000000..0b21b6509
--- /dev/null
+++ b/trunk/libempathy/empathy-chatroom-manager.h
@@ -0,0 +1,72 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ * Martyn Russell <martyn@imendio.com>
+ */
+
+#ifndef __EMPATHY_CHATROOM_MANAGER_H__
+#define __EMPATHY_CHATROOM_MANAGER_H__
+
+#include <glib-object.h>
+
+#include <libmissioncontrol/mc-account.h>
+
+#include "empathy-chatroom.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CHATROOM_MANAGER (empathy_chatroom_manager_get_type ())
+#define EMPATHY_CHATROOM_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CHATROOM_MANAGER, EmpathyChatroomManager))
+#define EMPATHY_CHATROOM_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_CHATROOM_MANAGER, EmpathyChatroomManagerClass))
+#define EMPATHY_IS_CHATROOM_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CHATROOM_MANAGER))
+#define EMPATHY_IS_CHATROOM_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CHATROOM_MANAGER))
+#define EMPATHY_CHATROOM_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CHATROOM_MANAGER, EmpathyChatroomManagerClass))
+
+typedef struct _EmpathyChatroomManager EmpathyChatroomManager;
+typedef struct _EmpathyChatroomManagerClass EmpathyChatroomManagerClass;
+
+struct _EmpathyChatroomManager {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyChatroomManagerClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_chatroom_manager_get_type (void) G_GNUC_CONST;
+EmpathyChatroomManager *empathy_chatroom_manager_new (void);
+gboolean empathy_chatroom_manager_add (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom);
+void empathy_chatroom_manager_remove (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom);
+EmpathyChatroom * empathy_chatroom_manager_find (EmpathyChatroomManager *manager,
+ McAccount *account,
+ const gchar *room);
+GList * empathy_chatroom_manager_get_chatrooms (EmpathyChatroomManager *manager,
+ McAccount *account);
+guint empathy_chatroom_manager_get_count (EmpathyChatroomManager *manager,
+ McAccount *account);
+void empathy_chatroom_manager_store (EmpathyChatroomManager *manager);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CHATROOM_MANAGER_H__ */
diff --git a/trunk/libempathy/empathy-chatroom.c b/trunk/libempathy/empathy-chatroom.c
new file mode 100644
index 000000000..17be191e5
--- /dev/null
+++ b/trunk/libempathy/empathy-chatroom.c
@@ -0,0 +1,363 @@
+/* -*- 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 <glib.h>
+
+#include "empathy-chatroom.h"
+#include "empathy-utils.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyChatroom)
+typedef struct {
+ McAccount *account;
+ gchar *room;
+ gchar *name;
+ gboolean auto_connect;
+} EmpathyChatroomPriv;
+
+
+static void chatroom_finalize (GObject *object);
+static void chatroom_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void chatroom_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+
+enum {
+ PROP_0,
+ PROP_ACCOUNT,
+ PROP_ROOM,
+ PROP_NAME,
+ PROP_AUTO_CONNECT,
+};
+
+G_DEFINE_TYPE (EmpathyChatroom, empathy_chatroom, G_TYPE_OBJECT);
+
+static void
+empathy_chatroom_class_init (EmpathyChatroomClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = chatroom_finalize;
+ object_class->get_property = chatroom_get_property;
+ object_class->set_property = chatroom_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_ACCOUNT,
+ g_param_spec_object ("account",
+ "Chatroom Account",
+ "The account associated with an chatroom",
+ MC_TYPE_ACCOUNT,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_ROOM,
+ g_param_spec_string ("room",
+ "Chatroom Room",
+ "Chatroom represented as 'room@server'",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_NAME,
+ g_param_spec_string ("name",
+ "Chatroom Name",
+ "Chatroom name",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_AUTO_CONNECT,
+ g_param_spec_boolean ("auto_connect",
+ "Chatroom Auto Connect",
+ "Connect on startup",
+ FALSE,
+ G_PARAM_READWRITE));
+
+
+ g_type_class_add_private (object_class, sizeof (EmpathyChatroomPriv));
+}
+
+static void
+empathy_chatroom_init (EmpathyChatroom *chatroom)
+{
+ EmpathyChatroomPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (chatroom,
+ EMPATHY_TYPE_CHATROOM, EmpathyChatroomPriv);
+
+ chatroom->priv = priv;
+}
+
+static void
+chatroom_finalize (GObject *object)
+{
+ EmpathyChatroomPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ g_object_unref (priv->account);
+ g_free (priv->room);
+ g_free (priv->name);
+
+ (G_OBJECT_CLASS (empathy_chatroom_parent_class)->finalize) (object);
+}
+
+static void
+chatroom_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyChatroomPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_ACCOUNT:
+ g_value_set_object (value, priv->account);
+ break;
+ case PROP_ROOM:
+ g_value_set_string (value, priv->room);
+ break;
+ case PROP_NAME:
+ g_value_set_string (value, priv->name);
+ break;
+ case PROP_AUTO_CONNECT:
+ g_value_set_boolean (value, priv->auto_connect);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+chatroom_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyChatroomPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_ACCOUNT:
+ empathy_chatroom_set_account (EMPATHY_CHATROOM (object),
+ g_value_get_object (value));
+ break;
+ case PROP_ROOM:
+ empathy_chatroom_set_room (EMPATHY_CHATROOM (object),
+ g_value_get_string (value));
+ break;
+ case PROP_NAME:
+ empathy_chatroom_set_name (EMPATHY_CHATROOM (object),
+ g_value_get_string (value));
+ break;
+ case PROP_AUTO_CONNECT:
+ empathy_chatroom_set_auto_connect (EMPATHY_CHATROOM (object),
+ g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+EmpathyChatroom *
+empathy_chatroom_new (McAccount *account,
+ const gchar *room)
+{
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+ g_return_val_if_fail (room != NULL, NULL);
+
+ return g_object_new (EMPATHY_TYPE_CHATROOM,
+ "account", account,
+ "room", room,
+ NULL);
+}
+
+EmpathyChatroom *
+empathy_chatroom_new_full (McAccount *account,
+ const gchar *room,
+ const gchar *name,
+ gboolean auto_connect)
+{
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+ g_return_val_if_fail (room != NULL, NULL);
+
+ return g_object_new (EMPATHY_TYPE_CHATROOM,
+ "account", account,
+ "room", room,
+ "name", name,
+ "auto_connect", auto_connect,
+ NULL);
+}
+
+McAccount *
+empathy_chatroom_get_account (EmpathyChatroom *chatroom)
+{
+ EmpathyChatroomPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), NULL);
+
+ priv = GET_PRIV (chatroom);
+ return priv->account;
+}
+
+void
+empathy_chatroom_set_account (EmpathyChatroom *chatroom,
+ McAccount *account)
+{
+ EmpathyChatroomPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
+ g_return_if_fail (MC_IS_ACCOUNT (account));
+
+ priv = GET_PRIV (chatroom);
+
+ if (account == priv->account) {
+ return;
+ }
+ if (priv->account) {
+ g_object_unref (priv->account);
+ }
+ priv->account = g_object_ref (account);
+
+ g_object_notify (G_OBJECT (chatroom), "account");
+}
+
+const gchar *
+empathy_chatroom_get_room (EmpathyChatroom *chatroom)
+{
+ EmpathyChatroomPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), NULL);
+
+ priv = GET_PRIV (chatroom);
+ return priv->room;
+}
+
+void
+empathy_chatroom_set_room (EmpathyChatroom *chatroom,
+ const gchar *room)
+{
+ EmpathyChatroomPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
+ g_return_if_fail (room != NULL);
+
+ priv = GET_PRIV (chatroom);
+
+ g_free (priv->room);
+ priv->room = g_strdup (room);
+
+ g_object_notify (G_OBJECT (chatroom), "room");
+}
+
+const gchar *
+empathy_chatroom_get_name (EmpathyChatroom *chatroom)
+{
+ EmpathyChatroomPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), NULL);
+
+ priv = GET_PRIV (chatroom);
+
+ if (G_STR_EMPTY (priv->name)) {
+ return priv->room;
+ }
+
+ return priv->name;
+}
+
+void
+empathy_chatroom_set_name (EmpathyChatroom *chatroom,
+ const gchar *name)
+{
+ EmpathyChatroomPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
+
+ priv = GET_PRIV (chatroom);
+
+ g_free (priv->name);
+ priv->name = NULL;
+ if (name) {
+ priv->name = g_strdup (name);
+ }
+
+ g_object_notify (G_OBJECT (chatroom), "name");
+}
+
+gboolean
+empathy_chatroom_get_auto_connect (EmpathyChatroom *chatroom)
+{
+ EmpathyChatroomPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CHATROOM (chatroom), FALSE);
+
+ priv = GET_PRIV (chatroom);
+ return priv->auto_connect;
+}
+
+void
+empathy_chatroom_set_auto_connect (EmpathyChatroom *chatroom,
+ gboolean auto_connect)
+{
+ EmpathyChatroomPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHATROOM (chatroom));
+
+ priv = GET_PRIV (chatroom);
+
+ priv->auto_connect = auto_connect;
+
+ g_object_notify (G_OBJECT (chatroom), "auto-connect");
+}
+
+gboolean
+empathy_chatroom_equal (gconstpointer v1,
+ gconstpointer v2)
+{
+ McAccount *account_a;
+ McAccount *account_b;
+ const gchar *room_a;
+ const gchar *room_b;
+
+ g_return_val_if_fail (EMPATHY_IS_CHATROOM (v1), FALSE);
+ g_return_val_if_fail (EMPATHY_IS_CHATROOM (v2), FALSE);
+
+ account_a = empathy_chatroom_get_account (EMPATHY_CHATROOM (v1));
+ account_b = empathy_chatroom_get_account (EMPATHY_CHATROOM (v2));
+
+ room_a = empathy_chatroom_get_room (EMPATHY_CHATROOM (v1));
+ room_b = empathy_chatroom_get_room (EMPATHY_CHATROOM (v2));
+
+ return empathy_account_equal (account_a, account_b) && g_str_equal (room_a, room_b);
+}
+
+
diff --git a/trunk/libempathy/empathy-chatroom.h b/trunk/libempathy/empathy-chatroom.h
new file mode 100644
index 000000000..58e2e53d7
--- /dev/null
+++ b/trunk/libempathy/empathy-chatroom.h
@@ -0,0 +1,77 @@
+/* -*- 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_CHATROOM_H__
+#define __EMPATHY_CHATROOM_H__
+
+#include <glib-object.h>
+
+#include <libmissioncontrol/mc-account.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CHATROOM (empathy_chatroom_get_type ())
+#define EMPATHY_CHATROOM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CHATROOM, EmpathyChatroom))
+#define EMPATHY_CHATROOM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_CHATROOM, EmpathyChatroomClass))
+#define EMPATHY_IS_CHATROOM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CHATROOM))
+#define EMPATHY_IS_CHATROOM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CHATROOM))
+#define EMPATHY_CHATROOM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CHATROOM, EmpathyChatroomClass))
+
+#define EMPATHY_TYPE_CHATROOM_INVITE (empathy_chatroom_invite_get_gtype ())
+
+typedef struct _EmpathyChatroom EmpathyChatroom;
+typedef struct _EmpathyChatroomClass EmpathyChatroomClass;
+
+struct _EmpathyChatroom {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyChatroomClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_chatroom_get_type (void) G_GNUC_CONST;
+EmpathyChatroom *empathy_chatroom_new (McAccount *account,
+ const gchar *room);
+EmpathyChatroom *empathy_chatroom_new_full (McAccount *account,
+ const gchar *room,
+ const gchar *name,
+ gboolean auto_connect);
+McAccount * empathy_chatroom_get_account (EmpathyChatroom *chatroom);
+void empathy_chatroom_set_account (EmpathyChatroom *chatroom,
+ McAccount *account);
+const gchar * empathy_chatroom_get_room (EmpathyChatroom *chatroom);
+void empathy_chatroom_set_room (EmpathyChatroom *chatroom,
+ const gchar *room);
+const gchar * empathy_chatroom_get_name (EmpathyChatroom *chatroom);
+void empathy_chatroom_set_name (EmpathyChatroom *chatroom,
+ const gchar *name);
+gboolean empathy_chatroom_get_auto_connect (EmpathyChatroom *chatroom);
+void empathy_chatroom_set_auto_connect (EmpathyChatroom *chatroom,
+ gboolean auto_connect);
+gboolean empathy_chatroom_equal (gconstpointer v1,
+ gconstpointer v2);
+
+
+G_BEGIN_DECLS
+
+#endif /* __EMPATHY_CHATROOM_H__ */
diff --git a/trunk/libempathy/empathy-contact-factory.c b/trunk/libempathy/empathy-contact-factory.c
new file mode 100644
index 000000000..2169e7108
--- /dev/null
+++ b/trunk/libempathy/empathy-contact-factory.c
@@ -0,0 +1,175 @@
+/* -*- 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-factory.h"
+#include "empathy-utils.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyContactFactory)
+typedef struct {
+ GHashTable *accounts;
+} EmpathyContactFactoryPriv;
+
+G_DEFINE_TYPE (EmpathyContactFactory, empathy_contact_factory, G_TYPE_OBJECT);
+
+EmpathyTpContactFactory *
+empathy_contact_factory_get_tp_factory (EmpathyContactFactory *factory,
+ McAccount *account)
+{
+ EmpathyContactFactoryPriv *priv = GET_PRIV (factory);
+ EmpathyTpContactFactory *tp_factory;
+
+ tp_factory = g_hash_table_lookup (priv->accounts, account);
+ if (!tp_factory) {
+ tp_factory = empathy_tp_contact_factory_new (account);
+ g_hash_table_insert (priv->accounts,
+ g_object_ref (account),
+ tp_factory);
+ }
+
+ return tp_factory;
+}
+
+EmpathyContact *
+empathy_contact_factory_get_user (EmpathyContactFactory *factory,
+ McAccount *account)
+{
+ EmpathyTpContactFactory *tp_factory;
+
+ tp_factory = empathy_contact_factory_get_tp_factory (factory, account);
+
+ return empathy_tp_contact_factory_get_user (tp_factory);
+}
+
+EmpathyContact *
+empathy_contact_factory_get_from_id (EmpathyContactFactory *factory,
+ McAccount *account,
+ const gchar *id)
+{
+ EmpathyTpContactFactory *tp_factory;
+
+ tp_factory = empathy_contact_factory_get_tp_factory (factory, account);
+
+ return empathy_tp_contact_factory_get_from_id (tp_factory, id);
+}
+
+EmpathyContact *
+empathy_contact_factory_get_from_handle (EmpathyContactFactory *factory,
+ McAccount *account,
+ guint handle)
+{
+ EmpathyTpContactFactory *tp_factory;
+
+ tp_factory = empathy_contact_factory_get_tp_factory (factory, account);
+
+ return empathy_tp_contact_factory_get_from_handle (tp_factory, handle);
+}
+
+GList *
+empathy_contact_factory_get_from_handles (EmpathyContactFactory *factory,
+ McAccount *account,
+ const GArray *handles)
+{
+ EmpathyTpContactFactory *tp_factory;
+
+ tp_factory = empathy_contact_factory_get_tp_factory (factory, account);
+
+ return empathy_tp_contact_factory_get_from_handles (tp_factory, handles);
+}
+
+void
+empathy_contact_factory_set_alias (EmpathyContactFactory *factory,
+ EmpathyContact *contact,
+ const gchar *alias)
+{
+ EmpathyTpContactFactory *tp_factory;
+ McAccount *account;
+
+ account = empathy_contact_get_account (contact);
+ tp_factory = empathy_contact_factory_get_tp_factory (factory, account);
+
+ return empathy_tp_contact_factory_set_alias (tp_factory, contact, alias);
+}
+
+void
+empathy_contact_factory_set_avatar (EmpathyContactFactory *factory,
+ McAccount *account,
+ const gchar *data,
+ gsize size,
+ const gchar *mime_type)
+{
+ EmpathyTpContactFactory *tp_factory;
+
+ tp_factory = empathy_contact_factory_get_tp_factory (factory, account);
+
+ return empathy_tp_contact_factory_set_avatar (tp_factory,
+ data, size, mime_type);
+}
+
+static void
+contact_factory_finalize (GObject *object)
+{
+ EmpathyContactFactoryPriv *priv = GET_PRIV (object);
+
+ g_hash_table_destroy (priv->accounts);
+
+ G_OBJECT_CLASS (empathy_contact_factory_parent_class)->finalize (object);
+}
+
+static void
+empathy_contact_factory_class_init (EmpathyContactFactoryClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = contact_factory_finalize;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyContactFactoryPriv));
+}
+
+static void
+empathy_contact_factory_init (EmpathyContactFactory *factory)
+{
+ EmpathyContactFactoryPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (factory,
+ EMPATHY_TYPE_CONTACT_FACTORY, EmpathyContactFactoryPriv);
+
+ factory->priv = priv;
+ priv->accounts = g_hash_table_new_full (empathy_account_hash,
+ empathy_account_equal,
+ g_object_unref,
+ g_object_unref);
+}
+
+EmpathyContactFactory *
+empathy_contact_factory_new (void)
+{
+ static EmpathyContactFactory *factory = NULL;
+
+ if (!factory) {
+ factory = g_object_new (EMPATHY_TYPE_CONTACT_FACTORY, NULL);
+ g_object_add_weak_pointer (G_OBJECT (factory), (gpointer) &factory);
+ } else {
+ g_object_ref (factory);
+ }
+
+ return factory;
+}
+
diff --git a/trunk/libempathy/empathy-contact-factory.h b/trunk/libempathy/empathy-contact-factory.h
new file mode 100644
index 000000000..24fec0e03
--- /dev/null
+++ b/trunk/libempathy/empathy-contact-factory.h
@@ -0,0 +1,79 @@
+/* -*- 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_FACTORY_H__
+#define __EMPATHY_CONTACT_FACTORY_H__
+
+#include <glib.h>
+
+#include <libmissioncontrol/mc-account.h>
+
+#include "empathy-contact.h"
+#include "empathy-tp-contact-factory.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CONTACT_FACTORY (empathy_contact_factory_get_type ())
+#define EMPATHY_CONTACT_FACTORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CONTACT_FACTORY, EmpathyContactFactory))
+#define EMPATHY_CONTACT_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_CONTACT_FACTORY, EmpathyContactFactoryClass))
+#define EMPATHY_IS_CONTACT_FACTORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CONTACT_FACTORY))
+#define EMPATHY_IS_CONTACT_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CONTACT_FACTORY))
+#define EMPATHY_CONTACT_FACTORY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CONTACT_FACTORY, EmpathyContactFactoryClass))
+
+typedef struct _EmpathyContactFactory EmpathyContactFactory;
+typedef struct _EmpathyContactFactoryClass EmpathyContactFactoryClass;
+
+struct _EmpathyContactFactory {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyContactFactoryClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_contact_factory_get_type (void) G_GNUC_CONST;
+EmpathyContactFactory *empathy_contact_factory_new (void);
+EmpathyTpContactFactory *empathy_contact_factory_get_tp_factory (EmpathyContactFactory *factory,
+ McAccount *account);
+EmpathyContact * empathy_contact_factory_get_user (EmpathyContactFactory *factory,
+ McAccount *account);
+EmpathyContact * empathy_contact_factory_get_from_id (EmpathyContactFactory *factory,
+ McAccount *account,
+ const gchar *id);
+EmpathyContact * empathy_contact_factory_get_from_handle (EmpathyContactFactory *factory,
+ McAccount *account,
+ guint handle);
+GList * empathy_contact_factory_get_from_handles (EmpathyContactFactory *factory,
+ McAccount *account,
+ const GArray *handles);
+void empathy_contact_factory_set_alias (EmpathyContactFactory *factory,
+ EmpathyContact *contact,
+ const gchar *alias);
+void empathy_contact_factory_set_avatar (EmpathyContactFactory *factory,
+ McAccount *account,
+ const gchar *data,
+ gsize size,
+ const gchar *mime_type);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CONTACT_FACTORY_H__ */
diff --git a/trunk/libempathy/empathy-contact-groups.c b/trunk/libempathy/empathy-contact-groups.c
new file mode 100644
index 000000000..83d920a94
--- /dev/null
+++ b/trunk/libempathy/empathy-contact-groups.c
@@ -0,0 +1,285 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+#include "empathy-utils.h"
+#include "empathy-contact-groups.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
+#include "empathy-debug.h"
+
+#define CONTACT_GROUPS_XML_FILENAME "contact-groups.xml"
+#define CONTACT_GROUPS_DTD_FILENAME "empathy-contact-groups.dtd"
+
+typedef struct {
+ gchar *name;
+ gboolean expanded;
+} ContactGroup;
+
+static void contact_groups_file_parse (const gchar *filename);
+static gboolean contact_groups_file_save (void);
+static ContactGroup *contact_group_new (const gchar *name,
+ gboolean expanded);
+static void contact_group_free (ContactGroup *group);
+
+static GList *groups = NULL;
+
+void
+empathy_contact_groups_get_all (void)
+{
+ gchar *dir;
+ gchar *file_with_path;
+
+ /* If already set up clean up first */
+ if (groups) {
+ g_list_foreach (groups, (GFunc)contact_group_free, NULL);
+ g_list_free (groups);
+ groups = NULL;
+ }
+
+ dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+ file_with_path = g_build_filename (dir, CONTACT_GROUPS_XML_FILENAME, NULL);
+ g_free (dir);
+
+ if (g_file_test (file_with_path, G_FILE_TEST_EXISTS)) {
+ contact_groups_file_parse (file_with_path);
+ }
+
+ g_free (file_with_path);
+}
+
+static void
+contact_groups_file_parse (const gchar *filename)
+{
+ xmlParserCtxtPtr ctxt;
+ xmlDocPtr doc;
+ xmlNodePtr contacts;
+ xmlNodePtr account;
+ xmlNodePtr node;
+
+ DEBUG ("Attempting to parse file:'%s'...", filename);
+
+ ctxt = xmlNewParserCtxt ();
+
+ /* Parse and validate the file. */
+ doc = xmlCtxtReadFile (ctxt, filename, NULL, 0);
+ if (!doc) {
+ g_warning ("Failed to parse file:'%s'", filename);
+ xmlFreeParserCtxt (ctxt);
+ return;
+ }
+
+ if (!empathy_xml_validate (doc, CONTACT_GROUPS_DTD_FILENAME)) {
+ g_warning ("Failed to validate file:'%s'", filename);
+ xmlFreeDoc(doc);
+ xmlFreeParserCtxt (ctxt);
+ return;
+ }
+
+ /* The root node, contacts. */
+ contacts = xmlDocGetRootElement (doc);
+
+ account = NULL;
+ node = contacts->children;
+ while (node) {
+ if (strcmp ((gchar *) node->name, "account") == 0) {
+ account = node;
+ break;
+ }
+ node = node->next;
+ }
+
+ node = NULL;
+ if (account) {
+ node = account->children;
+ }
+
+ while (node) {
+ if (strcmp ((gchar *) node->name, "group") == 0) {
+ gchar *name;
+ gchar *expanded_str;
+ gboolean expanded;
+ ContactGroup *contact_group;
+
+ name = (gchar *) xmlGetProp (node, "name");
+ expanded_str = (gchar *) xmlGetProp (node, "expanded");
+
+ if (expanded_str && strcmp (expanded_str, "yes") == 0) {
+ expanded = TRUE;
+ } else {
+ expanded = FALSE;
+ }
+
+ contact_group = contact_group_new (name, expanded);
+ groups = g_list_append (groups, contact_group);
+
+ xmlFree (name);
+ xmlFree (expanded_str);
+ }
+
+ node = node->next;
+ }
+
+ DEBUG ("Parsed %d contact groups", g_list_length (groups));
+
+ xmlFreeDoc(doc);
+ xmlFreeParserCtxt (ctxt);
+}
+
+static ContactGroup *
+contact_group_new (const gchar *name,
+ gboolean expanded)
+{
+ ContactGroup *group;
+
+ group = g_new0 (ContactGroup, 1);
+
+ group->name = g_strdup (name);
+ group->expanded = expanded;
+
+ return group;
+}
+
+static void
+contact_group_free (ContactGroup *group)
+{
+ g_return_if_fail (group != NULL);
+
+ g_free (group->name);
+
+ g_free (group);
+}
+
+static gboolean
+contact_groups_file_save (void)
+{
+ xmlDocPtr doc;
+ xmlNodePtr root;
+ xmlNodePtr node;
+ GList *l;
+ gchar *dir;
+ gchar *file;
+
+ dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+ g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
+ file = g_build_filename (dir, CONTACT_GROUPS_XML_FILENAME, NULL);
+ g_free (dir);
+
+ doc = xmlNewDoc ("1.0");
+ root = xmlNewNode (NULL, "contacts");
+ xmlDocSetRootElement (doc, root);
+
+ node = xmlNewChild (root, NULL, "account", NULL);
+ xmlNewProp (node, "name", "Default");
+
+ for (l = groups; l; l = l->next) {
+ ContactGroup *cg;
+ xmlNodePtr subnode;
+
+ cg = l->data;
+
+ subnode = xmlNewChild (node, NULL, "group", NULL);
+ xmlNewProp (subnode, "expanded", cg->expanded ? "yes" : "no");
+ xmlNewProp (subnode, "name", cg->name);
+ }
+
+ /* Make sure the XML is indented properly */
+ xmlIndentTreeOutput = 1;
+
+ DEBUG ("Saving file:'%s'", file);
+ xmlSaveFormatFileEnc (file, doc, "utf-8", 1);
+ xmlFreeDoc (doc);
+
+ xmlCleanupParser ();
+ xmlMemoryDump ();
+
+ g_free (file);
+
+ return TRUE;
+}
+
+gboolean
+empathy_contact_group_get_expanded (const gchar *group)
+{
+ GList *l;
+ gboolean default_val = TRUE;
+
+ g_return_val_if_fail (group != NULL, default_val);
+
+ for (l = groups; l; l = l->next) {
+ ContactGroup *cg = l->data;
+
+ if (!cg || !cg->name) {
+ continue;
+ }
+
+ if (strcmp (cg->name, group) == 0) {
+ return cg->expanded;
+ }
+ }
+
+ return default_val;
+}
+
+void
+empathy_contact_group_set_expanded (const gchar *group,
+ gboolean expanded)
+{
+ GList *l;
+ ContactGroup *cg;
+ gboolean changed = FALSE;
+
+ g_return_if_fail (group != NULL);
+
+ for (l = groups; l; l = l->next) {
+ ContactGroup *cg = l->data;
+
+ if (!cg || !cg->name) {
+ continue;
+ }
+
+ if (strcmp (cg->name, group) == 0) {
+ cg->expanded = expanded;
+ changed = TRUE;
+ break;
+ }
+ }
+
+ /* if here... we don't have a ContactGroup for the group. */
+ if (!changed) {
+ cg = contact_group_new (group, expanded);
+ groups = g_list_append (groups, cg);
+ }
+
+ contact_groups_file_save ();
+}
diff --git a/trunk/libempathy/empathy-contact-groups.dtd b/trunk/libempathy/empathy-contact-groups.dtd
new file mode 100644
index 000000000..b4de2260a
--- /dev/null
+++ b/trunk/libempathy/empathy-contact-groups.dtd
@@ -0,0 +1,17 @@
+<!--
+ DTD for Empathys contact groups.
+ by Martyn Russell <mr@gnome.org>
+-->
+
+<!-- Root element. -->
+<!ELEMENT contacts (account)>
+
+<!ELEMENT account (group)+>
+<!ATTLIST account
+ name CDATA #REQUIRED>
+
+<!-- Groups in the roster. -->
+<!ELEMENT group EMPTY>
+<!ATTLIST group
+ name CDATA #REQUIRED
+ expanded CDATA #REQUIRED>
diff --git a/trunk/libempathy/empathy-contact-groups.h b/trunk/libempathy/empathy-contact-groups.h
new file mode 100644
index 000000000..e2e9810e3
--- /dev/null
+++ b/trunk/libempathy/empathy-contact-groups.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ */
+
+#ifndef __EMPATHY_CONTACT_GROUPS_H__
+#define __EMPATHY_CONTACT_GROUPS_H__
+
+G_BEGIN_DECLS
+
+#include <glib.h>
+
+void empathy_contact_groups_get_all (void);
+
+gboolean empathy_contact_group_get_expanded (const gchar *group);
+void empathy_contact_group_set_expanded (const gchar *group,
+ gboolean expanded);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CONTACT_GROUPS_H__ */
diff --git a/trunk/libempathy/empathy-contact-list.c b/trunk/libempathy/empathy-contact-list.c
new file mode 100644
index 000000000..f0c8826e5
--- /dev/null
+++ b/trunk/libempathy/empathy-contact-list.c
@@ -0,0 +1,219 @@
+/* -*- 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"
+#include "empathy-marshal.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 ("members-changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _empathy_marshal_VOID__OBJECT_OBJECT_UINT_STRING_BOOLEAN,
+ 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,
+ _empathy_marshal_VOID__OBJECT_OBJECT_UINT_STRING_BOOLEAN,
+ 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,
+ _empathy_marshal_VOID__OBJECT_STRING_BOOLEAN,
+ 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_all_groups (EmpathyContactList *list)
+{
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_LIST (list), NULL);
+
+ if (EMPATHY_CONTACT_LIST_GET_IFACE (list)->get_all_groups) {
+ return EMPATHY_CONTACT_LIST_GET_IFACE (list)->get_all_groups (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/trunk/libempathy/empathy-contact-list.h b/trunk/libempathy/empathy-contact-list.h
new file mode 100644
index 000000000..0b13031ba
--- /dev/null
+++ b/trunk/libempathy/empathy-contact-list.h
@@ -0,0 +1,95 @@
+/* -*- 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-contact.h"
+#include "empathy-tp-group.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 _EmpathyContactList EmpathyContactList;
+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_all_groups) (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_all_groups (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/trunk/libempathy/empathy-contact-manager.c b/trunk/libempathy/empathy-contact-manager.c
new file mode 100644
index 000000000..48ac1598b
--- /dev/null
+++ b/trunk/libempathy/empathy-contact-manager.c
@@ -0,0 +1,509 @@
+/* -*- 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/enums.h>
+
+#include "empathy-contact-manager.h"
+#include "empathy-contact-list.h"
+#include "empathy-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
+#include "empathy-debug.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyContactManager)
+typedef struct {
+ GHashTable *lists;
+ MissionControl *mc;
+ gpointer token;
+} EmpathyContactManagerPriv;
+
+static void contact_manager_iface_init (EmpathyContactListIface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (EmpathyContactManager, empathy_contact_manager, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_CONTACT_LIST,
+ contact_manager_iface_init));
+
+static void
+contact_manager_members_changed_cb (EmpathyTpContactList *list,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ gchar *message,
+ gboolean is_member,
+ EmpathyContactManager *manager)
+{
+ g_signal_emit_by_name (manager, "members-changed",
+ contact, actor, reason, message, is_member);
+}
+
+static void
+contact_manager_pendings_changed_cb (EmpathyTpContactList *list,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ gchar *message,
+ gboolean is_pending,
+ EmpathyContactManager *manager)
+{
+ g_signal_emit_by_name (manager, "pendings-changed",
+ contact, actor, reason, message, is_pending);
+}
+
+static void
+contact_manager_groups_changed_cb (EmpathyTpContactList *list,
+ EmpathyContact *contact,
+ gchar *group,
+ gboolean is_member,
+ EmpathyContactManager *manager)
+{
+ g_signal_emit_by_name (manager, "groups-changed",
+ contact, group, is_member);
+}
+
+static void contact_manager_destroy_cb (EmpathyTpContactList *list,
+ EmpathyContactManager *manager);
+
+static void
+contact_manager_disconnect_foreach (gpointer key,
+ gpointer value,
+ gpointer user_data)
+{
+ EmpathyTpContactList *list = value;
+ EmpathyContactManager *manager = user_data;
+
+ /* Disconnect signals from the list */
+ g_signal_handlers_disconnect_by_func (list,
+ contact_manager_members_changed_cb,
+ manager);
+ g_signal_handlers_disconnect_by_func (list,
+ contact_manager_pendings_changed_cb,
+ manager);
+ g_signal_handlers_disconnect_by_func (list,
+ contact_manager_groups_changed_cb,
+ manager);
+ g_signal_handlers_disconnect_by_func (list,
+ contact_manager_destroy_cb,
+ manager);
+}
+
+static void
+contact_manager_destroy_cb (EmpathyTpContactList *list,
+ EmpathyContactManager *manager)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+ McAccount *account;
+
+ account = empathy_tp_contact_list_get_account (list);
+
+ DEBUG ("Removing account: %s", mc_account_get_display_name (account));
+
+ contact_manager_disconnect_foreach (account, list, manager);
+ g_hash_table_remove (priv->lists, account);
+}
+
+static void
+contact_manager_add_account (EmpathyContactManager *manager,
+ McAccount *account)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+ EmpathyTpContactList *list;
+
+ if (g_hash_table_lookup (priv->lists, account)) {
+ return;
+ }
+
+ DEBUG ("Adding new account: %s", mc_account_get_display_name (account));
+
+ list = empathy_tp_contact_list_new (account);
+ if (!list) {
+ return;
+ }
+
+ g_hash_table_insert (priv->lists, g_object_ref (account), list);
+
+ /* Connect signals */
+ g_signal_connect (list, "members-changed",
+ G_CALLBACK (contact_manager_members_changed_cb),
+ manager);
+ g_signal_connect (list, "pendings-changed",
+ G_CALLBACK (contact_manager_pendings_changed_cb),
+ manager);
+ g_signal_connect (list, "groups-changed",
+ G_CALLBACK (contact_manager_groups_changed_cb),
+ manager);
+ g_signal_connect (list, "destroy",
+ G_CALLBACK (contact_manager_destroy_cb),
+ manager);
+}
+
+static void
+contact_manager_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyContactManager *manager)
+{
+ McAccount *account;
+
+ if (status != TP_CONNECTION_STATUS_CONNECTED) {
+ /* We only care about newly connected accounts */
+ return;
+ }
+
+ account = mc_account_lookup (unique_name);
+ contact_manager_add_account (manager, account);
+ g_object_unref (account);
+}
+
+static void
+contact_manager_finalize (GObject *object)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (object);
+
+ empathy_disconnect_account_status_changed (priv->token);
+ g_hash_table_foreach (priv->lists,
+ contact_manager_disconnect_foreach,
+ object);
+ g_hash_table_destroy (priv->lists);
+ g_object_unref (priv->mc);
+}
+
+static void
+empathy_contact_manager_class_init (EmpathyContactManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = contact_manager_finalize;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyContactManagerPriv));
+}
+
+static void
+empathy_contact_manager_init (EmpathyContactManager *manager)
+{
+ GSList *accounts, *l;
+ EmpathyContactManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
+ EMPATHY_TYPE_CONTACT_MANAGER, EmpathyContactManagerPriv);
+
+ manager->priv = priv;
+ priv->lists = g_hash_table_new_full (empathy_account_hash,
+ empathy_account_equal,
+ (GDestroyNotify) g_object_unref,
+ (GDestroyNotify) g_object_unref);
+
+ priv->mc = empathy_mission_control_new ();
+ priv->token = empathy_connect_to_account_status_changed (priv->mc,
+ G_CALLBACK (contact_manager_status_changed_cb),
+ manager, NULL);
+
+ /* Get ContactList for existing connections */
+ accounts = mission_control_get_online_connections (priv->mc, NULL);
+ for (l = accounts; l; l = l->next) {
+ contact_manager_add_account (manager, l->data);
+ g_object_unref (l->data);
+ }
+ g_slist_free (accounts);
+}
+
+EmpathyContactManager *
+empathy_contact_manager_new (void)
+{
+ static EmpathyContactManager *manager = NULL;
+
+ if (!manager) {
+ manager = g_object_new (EMPATHY_TYPE_CONTACT_MANAGER, NULL);
+ g_object_add_weak_pointer (G_OBJECT (manager), (gpointer) &manager);
+ } else {
+ g_object_ref (manager);
+ }
+
+ return manager;
+}
+
+EmpathyTpContactList *
+empathy_contact_manager_get_list (EmpathyContactManager *manager,
+ McAccount *account)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager), NULL);
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+
+ return g_hash_table_lookup (priv->lists, account);
+}
+
+static void
+contact_manager_add (EmpathyContactList *manager,
+ EmpathyContact *contact,
+ const gchar *message)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+ EmpathyContactList *list;
+ McAccount *account;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager));
+
+ account = empathy_contact_get_account (contact);
+ list = g_hash_table_lookup (priv->lists, account);
+
+ if (list) {
+ empathy_contact_list_add (list, contact, message);
+ }
+}
+
+static void
+contact_manager_remove (EmpathyContactList *manager,
+ EmpathyContact *contact,
+ const gchar *message)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+ EmpathyContactList *list;
+ McAccount *account;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager));
+
+ account = empathy_contact_get_account (contact);
+ list = g_hash_table_lookup (priv->lists, account);
+
+ if (list) {
+ empathy_contact_list_remove (list, contact, message);
+ }
+}
+
+static void
+contact_manager_get_members_foreach (McAccount *account,
+ EmpathyTpContactList *list,
+ GList **contacts)
+{
+ GList *l;
+
+ l = empathy_contact_list_get_members (EMPATHY_CONTACT_LIST (list));
+ *contacts = g_list_concat (*contacts, l);
+}
+
+static GList *
+contact_manager_get_members (EmpathyContactList *manager)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+ GList *contacts = NULL;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager), NULL);
+
+ g_hash_table_foreach (priv->lists,
+ (GHFunc) contact_manager_get_members_foreach,
+ &contacts);
+
+ return contacts;
+}
+
+static void
+contact_manager_get_pendings_foreach (McAccount *account,
+ EmpathyTpContactList *list,
+ GList **contacts)
+{
+ GList *l;
+
+ l = empathy_contact_list_get_pendings (EMPATHY_CONTACT_LIST (list));
+ *contacts = g_list_concat (*contacts, l);
+}
+
+static GList *
+contact_manager_get_pendings (EmpathyContactList *manager)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+ GList *contacts = NULL;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager), NULL);
+
+ g_hash_table_foreach (priv->lists,
+ (GHFunc) contact_manager_get_pendings_foreach,
+ &contacts);
+
+ return contacts;
+}
+
+static void
+contact_manager_get_all_groups_foreach (McAccount *account,
+ EmpathyTpContactList *list,
+ GList **all_groups)
+{
+ GList *groups, *l;
+
+ groups = empathy_contact_list_get_all_groups (EMPATHY_CONTACT_LIST (list));
+ for (l = groups; l; l = l->next) {
+ if (!g_list_find_custom (*all_groups,
+ l->data,
+ (GCompareFunc) strcmp)) {
+ *all_groups = g_list_prepend (*all_groups, l->data);
+ } else {
+ g_free (l->data);
+ }
+ }
+
+ g_list_free (groups);
+}
+
+static GList *
+contact_manager_get_all_groups (EmpathyContactList *manager)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+ GList *groups = NULL;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager), NULL);
+
+ g_hash_table_foreach (priv->lists,
+ (GHFunc) contact_manager_get_all_groups_foreach,
+ &groups);
+
+ return groups;
+}
+
+static GList *
+contact_manager_get_groups (EmpathyContactList *manager,
+ EmpathyContact *contact)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+ EmpathyContactList *list;
+ McAccount *account;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager), NULL);
+
+ account = empathy_contact_get_account (contact);
+ list = g_hash_table_lookup (priv->lists, account);
+
+ if (list) {
+ return empathy_contact_list_get_groups (list, contact);
+ }
+
+ return NULL;
+}
+
+static void
+contact_manager_add_to_group (EmpathyContactList *manager,
+ EmpathyContact *contact,
+ const gchar *group)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+ EmpathyContactList *list;
+ McAccount *account;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager));
+
+ account = empathy_contact_get_account (contact);
+ list = g_hash_table_lookup (priv->lists, account);
+
+ if (list) {
+ empathy_contact_list_add_to_group (list, contact, group);
+ }
+}
+
+static void
+contact_manager_remove_from_group (EmpathyContactList *manager,
+ EmpathyContact *contact,
+ const gchar *group)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+ EmpathyContactList *list;
+ McAccount *account;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager));
+
+ account = empathy_contact_get_account (contact);
+ list = g_hash_table_lookup (priv->lists, account);
+
+ if (list) {
+ empathy_contact_list_remove_from_group (list, contact, group);
+ }
+}
+
+typedef struct {
+ const gchar *old_group;
+ const gchar *new_group;
+} RenameGroupData;
+
+static void
+contact_manager_rename_group_foreach (McAccount *account,
+ EmpathyTpContactList *list,
+ RenameGroupData *data)
+{
+ empathy_contact_list_rename_group (EMPATHY_CONTACT_LIST (list),
+ data->old_group,
+ data->new_group);
+}
+
+static void
+contact_manager_rename_group (EmpathyContactList *manager,
+ const gchar *old_group,
+ const gchar *new_group)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+ RenameGroupData data;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager));
+
+ data.old_group = old_group;
+ data.new_group = new_group;
+ g_hash_table_foreach (priv->lists,
+ (GHFunc) contact_manager_rename_group_foreach,
+ &data);
+}
+
+static void contact_manager_remove_group_foreach (McAccount *account,
+ EmpathyTpContactList *list,
+ const gchar *group)
+{
+ empathy_contact_list_remove_group (EMPATHY_CONTACT_LIST (list),
+ group);
+}
+
+static void
+contact_manager_remove_group (EmpathyContactList *manager,
+ const gchar *group)
+{
+ EmpathyContactManagerPriv *priv = GET_PRIV (manager);
+
+ g_return_if_fail (EMPATHY_IS_CONTACT_MANAGER (manager));
+
+ g_hash_table_foreach (priv->lists,
+ (GHFunc) contact_manager_remove_group_foreach,
+ (gpointer) group);
+}
+
+static void
+contact_manager_iface_init (EmpathyContactListIface *iface)
+{
+ iface->add = contact_manager_add;
+ iface->remove = contact_manager_remove;
+ iface->get_members = contact_manager_get_members;
+ iface->get_pendings = contact_manager_get_pendings;
+ iface->get_all_groups = contact_manager_get_all_groups;
+ iface->get_groups = contact_manager_get_groups;
+ iface->add_to_group = contact_manager_add_to_group;
+ iface->remove_from_group = contact_manager_remove_from_group;
+ iface->rename_group = contact_manager_rename_group;
+ iface->remove_group = contact_manager_remove_group;
+}
+
diff --git a/trunk/libempathy/empathy-contact-manager.h b/trunk/libempathy/empathy-contact-manager.h
new file mode 100644
index 000000000..b744b44e4
--- /dev/null
+++ b/trunk/libempathy/empathy-contact-manager.h
@@ -0,0 +1,61 @@
+/* -*- 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_MANAGER_H__
+#define __EMPATHY_CONTACT_MANAGER_H__
+
+#include <glib.h>
+
+#include <libmissioncontrol/mc-account.h>
+
+#include "empathy-contact.h"
+#include "empathy-tp-contact-list.h"
+#include "empathy-contact-list.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CONTACT_MANAGER (empathy_contact_manager_get_type ())
+#define EMPATHY_CONTACT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CONTACT_MANAGER, EmpathyContactManager))
+#define EMPATHY_CONTACT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_CONTACT_MANAGER, EmpathyContactManagerClass))
+#define EMPATHY_IS_CONTACT_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CONTACT_MANAGER))
+#define EMPATHY_IS_CONTACT_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CONTACT_MANAGER))
+#define EMPATHY_CONTACT_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CONTACT_MANAGER, EmpathyContactManagerClass))
+
+typedef struct _EmpathyContactManager EmpathyContactManager;
+typedef struct _EmpathyContactManagerClass EmpathyContactManagerClass;
+
+struct _EmpathyContactManager {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyContactManagerClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_contact_manager_get_type (void) G_GNUC_CONST;
+EmpathyContactManager *empathy_contact_manager_new (void);
+EmpathyTpContactList * empathy_contact_manager_get_list (EmpathyContactManager *manager,
+ McAccount *account);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CONTACT_MANAGER_H__ */
diff --git a/trunk/libempathy/empathy-contact.c b/trunk/libempathy/empathy-contact.c
new file mode 100644
index 000000000..19283cc72
--- /dev/null
+++ b/trunk/libempathy/empathy-contact.c
@@ -0,0 +1,761 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+
+#include <telepathy-glib/util.h>
+
+#include "empathy-contact.h"
+#include "empathy-utils.h"
+#include "empathy-enum-types.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
+#include "empathy-debug.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyContact)
+typedef struct {
+ gchar *id;
+ gchar *name;
+ EmpathyAvatar *avatar;
+ McAccount *account;
+ McPresence presence;
+ gchar *presence_message;
+ guint handle;
+ EmpathyCapabilities capabilities;
+ gboolean is_user;
+ guint hash;
+ EmpathyContactReady ready;
+} EmpathyContactPriv;
+
+static void contact_finalize (GObject *object);
+static void contact_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void contact_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+
+G_DEFINE_TYPE (EmpathyContact, empathy_contact, G_TYPE_OBJECT);
+
+enum {
+ PROP_0,
+ PROP_ID,
+ PROP_NAME,
+ PROP_AVATAR,
+ PROP_ACCOUNT,
+ PROP_PRESENCE,
+ PROP_PRESENCE_MESSAGE,
+ PROP_HANDLE,
+ PROP_CAPABILITIES,
+ PROP_IS_USER,
+ PROP_READY
+};
+
+static void
+empathy_contact_class_init (EmpathyContactClass *class)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (class);
+
+ object_class->finalize = contact_finalize;
+ object_class->get_property = contact_get_property;
+ object_class->set_property = contact_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_ID,
+ g_param_spec_string ("id",
+ "Contact id",
+ "String identifying contact",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_NAME,
+ g_param_spec_string ("name",
+ "Contact Name",
+ "The name of the contact",
+ NULL,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_AVATAR,
+ g_param_spec_boxed ("avatar",
+ "Avatar image",
+ "The avatar image",
+ EMPATHY_TYPE_AVATAR,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_ACCOUNT,
+ g_param_spec_object ("account",
+ "Contact Account",
+ "The account associated with the contact",
+ MC_TYPE_ACCOUNT,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_PRESENCE,
+ g_param_spec_uint ("presence",
+ "Contact presence",
+ "Presence of contact",
+ MC_PRESENCE_UNSET,
+ LAST_MC_PRESENCE,
+ MC_PRESENCE_UNSET,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_PRESENCE_MESSAGE,
+ g_param_spec_string ("presence-message",
+ "Contact presence message",
+ "Presence message of contact",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_HANDLE,
+ g_param_spec_uint ("handle",
+ "Contact Handle",
+ "The handle of the contact",
+ 0,
+ G_MAXUINT,
+ 0,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_CAPABILITIES,
+ g_param_spec_flags ("capabilities",
+ "Contact Capabilities",
+ "Capabilities of the contact",
+ EMPATHY_TYPE_CAPABILITIES,
+ EMPATHY_CAPABILITIES_UNKNOWN,
+ G_PARAM_CONSTRUCT | G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_IS_USER,
+ g_param_spec_boolean ("is-user",
+ "Contact is-user",
+ "Is contact the user",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_READY,
+ g_param_spec_flags ("ready",
+ "Contact ready flags",
+ "Flags for ready properties",
+ EMPATHY_TYPE_CONTACT_READY,
+ EMPATHY_CONTACT_READY_NONE,
+ G_PARAM_READABLE));
+
+ g_type_class_add_private (object_class, sizeof (EmpathyContactPriv));
+}
+
+static void
+empathy_contact_init (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (contact,
+ EMPATHY_TYPE_CONTACT, EmpathyContactPriv);
+
+ contact->priv = priv;
+}
+
+static void
+contact_finalize (GObject *object)
+{
+ EmpathyContactPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ DEBUG ("finalize: %p", object);
+
+ g_free (priv->name);
+ g_free (priv->id);
+ g_free (priv->presence_message);
+
+ if (priv->avatar) {
+ empathy_avatar_unref (priv->avatar);
+ }
+
+ if (priv->account) {
+ g_object_unref (priv->account);
+ }
+
+ G_OBJECT_CLASS (empathy_contact_parent_class)->finalize (object);
+}
+
+static void
+contact_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyContactPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_ID:
+ g_value_set_string (value, priv->id);
+ break;
+ case PROP_NAME:
+ g_value_set_string (value,
+ empathy_contact_get_name (EMPATHY_CONTACT (object)));
+ break;
+ case PROP_AVATAR:
+ g_value_set_boxed (value, priv->avatar);
+ break;
+ case PROP_ACCOUNT:
+ g_value_set_object (value, priv->account);
+ break;
+ case PROP_PRESENCE:
+ g_value_set_uint (value, priv->presence);
+ break;
+ case PROP_PRESENCE_MESSAGE:
+ g_value_set_string (value, priv->presence_message);
+ break;
+ case PROP_HANDLE:
+ g_value_set_uint (value, priv->handle);
+ break;
+ case PROP_CAPABILITIES:
+ g_value_set_flags (value, priv->capabilities);
+ break;
+ case PROP_IS_USER:
+ g_value_set_boolean (value, priv->is_user);
+ break;
+ case PROP_READY:
+ g_value_set_flags (value, priv->ready);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+contact_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyContactPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_ID:
+ empathy_contact_set_id (EMPATHY_CONTACT (object),
+ g_value_get_string (value));
+ break;
+ case PROP_NAME:
+ empathy_contact_set_name (EMPATHY_CONTACT (object),
+ g_value_get_string (value));
+ break;
+ case PROP_AVATAR:
+ empathy_contact_set_avatar (EMPATHY_CONTACT (object),
+ g_value_get_boxed (value));
+ break;
+ case PROP_ACCOUNT:
+ empathy_contact_set_account (EMPATHY_CONTACT (object),
+ MC_ACCOUNT (g_value_get_object (value)));
+ break;
+ case PROP_PRESENCE:
+ empathy_contact_set_presence (EMPATHY_CONTACT (object),
+ g_value_get_uint (value));
+ break;
+ case PROP_PRESENCE_MESSAGE:
+ empathy_contact_set_presence_message (EMPATHY_CONTACT (object),
+ g_value_get_string (value));
+ break;
+ case PROP_HANDLE:
+ empathy_contact_set_handle (EMPATHY_CONTACT (object),
+ g_value_get_uint (value));
+ break;
+ case PROP_CAPABILITIES:
+ empathy_contact_set_capabilities (EMPATHY_CONTACT (object),
+ g_value_get_flags (value));
+ break;
+ case PROP_IS_USER:
+ empathy_contact_set_is_user (EMPATHY_CONTACT (object),
+ g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+contact_set_ready_flag (EmpathyContact *contact,
+ EmpathyContactReady flag)
+{
+ EmpathyContactPriv *priv = GET_PRIV (contact);
+
+ if (!(priv->ready & flag)) {
+ priv->ready |= flag;
+ g_object_notify (G_OBJECT (contact), "ready");
+ }
+}
+
+EmpathyContact *
+empathy_contact_new (McAccount *account)
+{
+ return g_object_new (EMPATHY_TYPE_CONTACT,
+ "account", account,
+ NULL);
+}
+
+EmpathyContact *
+empathy_contact_new_full (McAccount *account,
+ const gchar *id,
+ const gchar *name)
+{
+ return g_object_new (EMPATHY_TYPE_CONTACT,
+ "account", account,
+ "name", name,
+ "id", id,
+ NULL);
+}
+
+const gchar *
+empathy_contact_get_id (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ priv = GET_PRIV (contact);
+
+ return priv->id;
+}
+
+void
+empathy_contact_set_id (EmpathyContact *contact,
+ const gchar *id)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+ g_return_if_fail (id != NULL);
+
+ priv = GET_PRIV (contact);
+
+ /* We temporally ref the contact because it could be destroyed
+ * during the signal emition */
+ g_object_ref (contact);
+ contact_set_ready_flag (contact, EMPATHY_CONTACT_READY_ID);
+ if (tp_strdiff (id, priv->id)) {
+ g_free (priv->id);
+ priv->id = g_strdup (id);
+
+ g_object_notify (G_OBJECT (contact), "id");
+ if (G_STR_EMPTY (priv->name)) {
+ g_object_notify (G_OBJECT (contact), "name");
+ }
+ }
+
+ g_object_unref (contact);
+}
+
+const gchar *
+empathy_contact_get_name (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ priv = GET_PRIV (contact);
+
+ if (G_STR_EMPTY (priv->name)) {
+ return empathy_contact_get_id (contact);
+ }
+
+ return priv->name;
+}
+
+void
+empathy_contact_set_name (EmpathyContact *contact,
+ const gchar *name)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ priv = GET_PRIV (contact);
+
+ g_object_ref (contact);
+ contact_set_ready_flag (contact, EMPATHY_CONTACT_READY_NAME);
+ if (tp_strdiff (name, priv->name)) {
+ g_free (priv->name);
+ priv->name = g_strdup (name);
+ g_object_notify (G_OBJECT (contact), "name");
+ }
+ g_object_unref (contact);
+}
+
+EmpathyAvatar *
+empathy_contact_get_avatar (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ priv = GET_PRIV (contact);
+
+ return priv->avatar;
+}
+
+void
+empathy_contact_set_avatar (EmpathyContact *contact,
+ EmpathyAvatar *avatar)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ priv = GET_PRIV (contact);
+
+ if (priv->avatar == avatar) {
+ return;
+ }
+
+ if (priv->avatar) {
+ empathy_avatar_unref (priv->avatar);
+ priv->avatar = NULL;
+ }
+
+ if (avatar) {
+ priv->avatar = empathy_avatar_ref (avatar);
+ }
+
+ g_object_notify (G_OBJECT (contact), "avatar");
+}
+
+McAccount *
+empathy_contact_get_account (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ priv = GET_PRIV (contact);
+
+ return priv->account;
+}
+
+void
+empathy_contact_set_account (EmpathyContact *contact,
+ McAccount *account)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+ g_return_if_fail (MC_IS_ACCOUNT (account));
+
+ priv = GET_PRIV (contact);
+
+ if (account == priv->account) {
+ return;
+ }
+
+ if (priv->account) {
+ g_object_unref (priv->account);
+ }
+ priv->account = g_object_ref (account);
+
+ g_object_notify (G_OBJECT (contact), "account");
+}
+
+McPresence
+empathy_contact_get_presence (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), MC_PRESENCE_UNSET);
+
+ priv = GET_PRIV (contact);
+
+ return priv->presence;
+}
+
+void
+empathy_contact_set_presence (EmpathyContact *contact,
+ McPresence presence)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ priv = GET_PRIV (contact);
+
+ if (presence == priv->presence) {
+ return;
+ }
+
+ priv->presence = presence;
+
+ g_object_notify (G_OBJECT (contact), "presence");
+}
+
+const gchar *
+empathy_contact_get_presence_message (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+
+ priv = GET_PRIV (contact);
+
+ return priv->presence_message;
+}
+
+void
+empathy_contact_set_presence_message (EmpathyContact *contact,
+ const gchar *message)
+{
+ EmpathyContactPriv *priv = GET_PRIV (contact);
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ if (!tp_strdiff (message, priv->presence_message)) {
+ return;
+ }
+
+ g_free (priv->presence_message);
+ priv->presence_message = g_strdup (message);
+
+ g_object_notify (G_OBJECT (contact), "presence-message");
+}
+
+guint
+empathy_contact_get_handle (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), 0);
+
+ priv = GET_PRIV (contact);
+
+ return priv->handle;
+}
+
+void
+empathy_contact_set_handle (EmpathyContact *contact,
+ guint handle)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ priv = GET_PRIV (contact);
+
+ g_object_ref (contact);
+ contact_set_ready_flag (contact, EMPATHY_CONTACT_READY_HANDLE);
+ if (handle != priv->handle) {
+ priv->handle = handle;
+ g_object_notify (G_OBJECT (contact), "handle");
+ }
+ g_object_unref (contact);
+}
+
+EmpathyCapabilities
+empathy_contact_get_capabilities (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), 0);
+
+ priv = GET_PRIV (contact);
+
+ return priv->capabilities;
+}
+
+void
+empathy_contact_set_capabilities (EmpathyContact *contact,
+ EmpathyCapabilities capabilities)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ priv = GET_PRIV (contact);
+
+ if (priv->capabilities == capabilities) {
+ return;
+ }
+
+ priv->capabilities = capabilities;
+
+ g_object_notify (G_OBJECT (contact), "capabilities");
+}
+
+gboolean
+empathy_contact_is_user (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
+
+ priv = GET_PRIV (contact);
+
+ return priv->is_user;
+}
+
+void
+empathy_contact_set_is_user (EmpathyContact *contact,
+ gboolean is_user)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ priv = GET_PRIV (contact);
+
+ if (priv->is_user == is_user) {
+ return;
+ }
+
+ priv->is_user = is_user;
+
+ g_object_notify (G_OBJECT (contact), "is-user");
+}
+
+gboolean
+empathy_contact_is_online (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
+
+ priv = GET_PRIV (contact);
+
+ return (priv->presence > MC_PRESENCE_OFFLINE);
+}
+
+const gchar *
+empathy_contact_get_status (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), "");
+
+ priv = GET_PRIV (contact);
+
+ if (priv->presence_message) {
+ return priv->presence_message;
+ }
+
+ return empathy_presence_get_default_message (priv->presence);
+}
+
+gboolean
+empathy_contact_can_voip (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
+
+ priv = GET_PRIV (contact);
+
+ return priv->capabilities & (EMPATHY_CAPABILITIES_AUDIO |
+ EMPATHY_CAPABILITIES_VIDEO);
+}
+
+EmpathyContactReady
+empathy_contact_get_ready (EmpathyContact *contact)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
+
+ priv = GET_PRIV (contact);
+
+ return priv->ready;
+}
+
+gboolean
+empathy_contact_equal (gconstpointer v1,
+ gconstpointer v2)
+{
+ McAccount *account_a;
+ McAccount *account_b;
+ const gchar *id_a;
+ const gchar *id_b;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (v1), FALSE);
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (v2), FALSE);
+
+ account_a = empathy_contact_get_account (EMPATHY_CONTACT (v1));
+ account_b = empathy_contact_get_account (EMPATHY_CONTACT (v2));
+
+ id_a = empathy_contact_get_id (EMPATHY_CONTACT (v1));
+ id_b = empathy_contact_get_id (EMPATHY_CONTACT (v2));
+
+ return empathy_account_equal (account_a, account_b) && g_str_equal (id_a, id_b);
+}
+
+guint
+empathy_contact_hash (gconstpointer key)
+{
+ EmpathyContactPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (key), +1);
+
+ priv = GET_PRIV (EMPATHY_CONTACT (key));
+
+ if (priv->hash == 0) {
+ priv->hash = empathy_account_hash (priv->account) + g_str_hash (priv->id);
+ }
+
+ return priv->hash;
+}
+
+static gboolean
+contact_is_ready_func (GObject *contact,
+ gpointer user_data)
+{
+ EmpathyContactPriv *priv = GET_PRIV (contact);
+ EmpathyContactReady ready;
+
+ ready = GPOINTER_TO_UINT (user_data);
+
+ return (priv->ready & ready) == ready;
+}
+
+void
+empathy_contact_run_until_ready (EmpathyContact *contact,
+ EmpathyContactReady ready,
+ GMainLoop **loop)
+{
+ empathy_run_until_ready_full (contact, "notify::ready",
+ contact_is_ready_func, GUINT_TO_POINTER (ready),
+ loop);
+}
+
diff --git a/trunk/libempathy/empathy-contact.h b/trunk/libempathy/empathy-contact.h
new file mode 100644
index 000000000..4abca99bd
--- /dev/null
+++ b/trunk/libempathy/empathy-contact.h
@@ -0,0 +1,118 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_CONTACT_H__
+#define __EMPATHY_CONTACT_H__
+
+#include <glib-object.h>
+
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mission-control.h>
+
+#include "empathy-avatar.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CONTACT (empathy_contact_get_type ())
+#define EMPATHY_CONTACT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CONTACT, EmpathyContact))
+#define EMPATHY_CONTACT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_CONTACT, EmpathyContactClass))
+#define EMPATHY_IS_CONTACT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CONTACT))
+#define EMPATHY_IS_CONTACT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CONTACT))
+#define EMPATHY_CONTACT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CONTACT, EmpathyContactClass))
+
+typedef struct _EmpathyContact EmpathyContact;
+typedef struct _EmpathyContactClass EmpathyContactClass;
+
+struct _EmpathyContact {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyContactClass {
+ GObjectClass parent_class;
+};
+
+typedef enum {
+ EMPATHY_CAPABILITIES_NONE = 0,
+ EMPATHY_CAPABILITIES_AUDIO = 1 << 0,
+ EMPATHY_CAPABILITIES_VIDEO = 1 << 1,
+ EMPATHY_CAPABILITIES_UNKNOWN = 1 << 7
+} EmpathyCapabilities;
+
+typedef enum {
+ EMPATHY_CONTACT_READY_NONE = 0,
+ EMPATHY_CONTACT_READY_ID = 1 << 0,
+ EMPATHY_CONTACT_READY_HANDLE = 1 << 1,
+ EMPATHY_CONTACT_READY_NAME = 1 << 2,
+ EMPATHY_CONTACT_READY_ALL = (1 << 3) - 1,
+} EmpathyContactReady;
+
+GType empathy_contact_get_type (void) G_GNUC_CONST;
+EmpathyContact * empathy_contact_new (McAccount *account);
+EmpathyContact * empathy_contact_new_full (McAccount *account,
+ const gchar *id,
+ const gchar *name);
+const gchar * empathy_contact_get_id (EmpathyContact *contact);
+void empathy_contact_set_id (EmpathyContact *contact,
+ const gchar *id);
+const gchar * empathy_contact_get_name (EmpathyContact *contact);
+void empathy_contact_set_name (EmpathyContact *contact,
+ const gchar *name);
+EmpathyAvatar * empathy_contact_get_avatar (EmpathyContact *contact);
+void empathy_contact_set_avatar (EmpathyContact *contact,
+ EmpathyAvatar *avatar);
+McAccount * empathy_contact_get_account (EmpathyContact *contact);
+void empathy_contact_set_account (EmpathyContact *contact,
+ McAccount *account);
+McPresence empathy_contact_get_presence (EmpathyContact *contact);
+void empathy_contact_set_presence (EmpathyContact *contact,
+ McPresence presence);
+const gchar * empathy_contact_get_presence_message (EmpathyContact *contact);
+void empathy_contact_set_presence_message (EmpathyContact *contact,
+ const gchar *message);
+guint empathy_contact_get_handle (EmpathyContact *contact);
+void empathy_contact_set_handle (EmpathyContact *contact,
+ guint handle);
+EmpathyCapabilities empathy_contact_get_capabilities (EmpathyContact *contact);
+void empathy_contact_set_capabilities (EmpathyContact *contact,
+ EmpathyCapabilities capabilities);
+EmpathyContactReady empathy_contact_get_ready (EmpathyContact *contact);
+gboolean empathy_contact_is_user (EmpathyContact *contact);
+void empathy_contact_set_is_user (EmpathyContact *contact,
+ gboolean is_user);
+gboolean empathy_contact_is_online (EmpathyContact *contact);
+const gchar * empathy_contact_get_status (EmpathyContact *contact);
+gboolean empathy_contact_can_voip (EmpathyContact *contact);
+gboolean empathy_contact_equal (gconstpointer v1,
+ gconstpointer v2);
+guint empathy_contact_hash (gconstpointer key);
+void empathy_contact_run_until_ready (EmpathyContact *contact,
+ EmpathyContactReady ready,
+ GMainLoop **loop);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CONTACT_H__ */
+
diff --git a/trunk/libempathy/empathy-debug.c b/trunk/libempathy/empathy-debug.c
new file mode 100644
index 000000000..b0f7d1810
--- /dev/null
+++ b/trunk/libempathy/empathy-debug.c
@@ -0,0 +1,109 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Collabora Ltd.
+ * Copyright (C) 2007 Nokia Corporation
+ *
+ * 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 <errno.h>
+#include <fcntl.h>
+#include <stdarg.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include <glib.h>
+#include <glib/gstdio.h>
+
+#include <telepathy-glib/debug.h>
+
+#include "empathy-debug.h"
+
+#ifdef ENABLE_DEBUG
+
+static EmpathyDebugFlags flags = 0;
+
+static GDebugKey keys[] = {
+ { "Tp", EMPATHY_DEBUG_TP },
+ { "Chat", EMPATHY_DEBUG_CHAT },
+ { "Contact", EMPATHY_DEBUG_CONTACT },
+ { "Account", EMPATHY_DEBUG_ACCOUNT },
+ { "Irc", EMPATHY_DEBUG_IRC },
+ { "Dispatcher", EMPATHY_DEBUG_DISPATCHER },
+ { "Other", EMPATHY_DEBUG_OTHER },
+ { 0, }
+};
+
+static void
+debug_set_flags (EmpathyDebugFlags new_flags)
+{
+ flags |= new_flags;
+}
+
+void
+empathy_debug_set_flags (const gchar *flags_string)
+{
+ guint nkeys;
+
+ for (nkeys = 0; keys[nkeys].value; nkeys++);
+
+ tp_debug_set_flags (flags_string);
+
+ if (flags_string)
+ debug_set_flags (g_parse_debug_string (flags_string, keys, nkeys));
+}
+
+gboolean
+empathy_debug_flag_is_set (EmpathyDebugFlags flag)
+{
+ return (flag & flags) != 0;
+}
+
+void
+empathy_debug (EmpathyDebugFlags flag,
+ const gchar *format,
+ ...)
+{
+ if (flag & flags)
+ {
+ va_list args;
+ va_start (args, format);
+ g_logv (G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, format, args);
+ va_end (args);
+ }
+}
+
+#else
+
+gboolean
+empathy_debug_flag_is_set (EmpathyDebugFlags flag)
+{
+ return FALSE;
+}
+
+void
+empathy_debug (EmpathyDebugFlags flag, const gchar *format, ...)
+{
+}
+
+void
+empathy_debug_set_flags (const gchar *flags_string)
+{
+}
+
+#endif /* ENABLE_DEBUG */
+
diff --git a/trunk/libempathy/empathy-debug.h b/trunk/libempathy/empathy-debug.h
new file mode 100644
index 000000000..42403ca15
--- /dev/null
+++ b/trunk/libempathy/empathy-debug.h
@@ -0,0 +1,89 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Collabora Ltd.
+ * Copyright (C) 2007 Nokia Corporation
+ *
+ * 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_DEBUG_H__
+#define __EMPATHY_DEBUG_H__
+
+#include "config.h"
+
+
+#include <glib.h>
+#include <telepathy-glib/debug.h>
+
+G_BEGIN_DECLS
+
+/* Please keep this enum in sync with #keys in empathy-debug.c */
+typedef enum
+{
+ EMPATHY_DEBUG_TP = 1 << 1,
+ EMPATHY_DEBUG_CHAT = 1 << 2,
+ EMPATHY_DEBUG_CONTACT = 1 << 3,
+ EMPATHY_DEBUG_ACCOUNT = 1 << 4,
+ EMPATHY_DEBUG_IRC = 1 << 5,
+ EMPATHY_DEBUG_DISPATCHER = 1 << 6,
+ EMPATHY_DEBUG_OTHER = 1 << 7,
+} EmpathyDebugFlags;
+
+gboolean empathy_debug_flag_is_set (EmpathyDebugFlags flag);
+void empathy_debug (EmpathyDebugFlags flag, const gchar *format, ...)
+ G_GNUC_PRINTF (2, 3);
+void empathy_debug_set_flags (const gchar *flags_string);
+G_END_DECLS
+
+#endif /* __EMPATHY_DEBUG_H__ */
+
+/* ------------------------------------ */
+
+/* Below this point is outside the __DEBUG_H__ guard - so it can take effect
+ * more than once. So you can do:
+ *
+ * #define DEBUG_FLAG EMPATHY_DEBUG_ONE_THING
+ * #include "internal-debug.h"
+ * ...
+ * DEBUG ("if we're debugging one thing");
+ * ...
+ * #undef DEBUG_FLAG
+ * #define DEBUG_FLAG EMPATHY_DEBUG_OTHER_THING
+ * #include "internal-debug.h"
+ * ...
+ * DEBUG ("if we're debugging the other thing");
+ * ...
+ */
+
+#ifdef DEBUG_FLAG
+#ifdef ENABLE_DEBUG
+
+#undef DEBUG
+#define DEBUG(format, ...) \
+ empathy_debug (DEBUG_FLAG, "%s: " format, G_STRFUNC, ##__VA_ARGS__)
+
+#undef DEBUGGING
+#define DEBUGGING empathy_debug_flag_is_set (DEBUG_FLAG)
+
+#else /* !defined (ENABLE_DEBUG) */
+
+#undef DEBUG
+#define DEBUG(format, ...) do {} while (0)
+
+#undef DEBUGGING
+#define DEBUGGING 0
+
+#endif /* !defined (ENABLE_DEBUG) */
+#endif /* defined (DEBUG_FLAG) */
diff --git a/trunk/libempathy/empathy-dispatcher.c b/trunk/libempathy/empathy-dispatcher.c
new file mode 100644
index 000000000..741b01db6
--- /dev/null
+++ b/trunk/libempathy/empathy-dispatcher.c
@@ -0,0 +1,681 @@
+/* -*- 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 <glib/gi18n.h>
+
+#include <telepathy-glib/enums.h>
+#include <telepathy-glib/connection.h>
+#include <telepathy-glib/util.h>
+#include <telepathy-glib/dbus.h>
+#include <telepathy-glib/proxy-subclass.h>
+
+#include <libmissioncontrol/mission-control.h>
+#include <libmissioncontrol/mc-account.h>
+
+#include <extensions/extensions.h>
+
+#include "empathy-dispatcher.h"
+#include "empathy-utils.h"
+#include "empathy-tube-handler.h"
+#include "empathy-contact-factory.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_DISPATCHER
+#include <libempathy/empathy-debug.h>
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyDispatcher)
+typedef struct {
+ GHashTable *connections;
+ gpointer token;
+ MissionControl *mc;
+ GHashTable *tubes;
+} EmpathyDispatcherPriv;
+
+G_DEFINE_TYPE (EmpathyDispatcher, empathy_dispatcher, G_TYPE_OBJECT);
+
+enum {
+ DISPATCH_CHANNEL,
+ FILTER_CHANNEL,
+ FILTER_TUBE,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+static EmpathyDispatcher *dispatcher = NULL;
+
+void
+empathy_dispatcher_channel_process (EmpathyDispatcher *dispatcher,
+ TpChannel *channel)
+{
+ g_signal_emit (dispatcher, signals[DISPATCH_CHANNEL], 0, channel);
+}
+
+typedef struct {
+ EmpathyDispatcherTube public;
+ EmpathyContactFactory *factory;
+ gchar *bus_name;
+ gchar *object_path;
+ guint ref_count;
+ gboolean handled;
+} DispatcherTube;
+
+GType
+empathy_dispatcher_tube_get_type (void)
+{
+ static GType type_id = 0;
+
+ if (!type_id) {
+ type_id = g_boxed_type_register_static ("EmpathyDispatcherTube",
+ (GBoxedCopyFunc) empathy_dispatcher_tube_ref,
+ (GBoxedFreeFunc) empathy_dispatcher_tube_unref);
+ }
+
+ return type_id;
+}
+
+EmpathyDispatcherTube *
+empathy_dispatcher_tube_ref (EmpathyDispatcherTube *data)
+{
+ DispatcherTube *tube = (DispatcherTube*) data;
+
+ g_return_val_if_fail (tube != NULL, NULL);
+
+ tube->ref_count++;
+
+ return data;
+}
+
+void
+empathy_dispatcher_tube_unref (EmpathyDispatcherTube *data)
+{
+ DispatcherTube *tube = (DispatcherTube*) data;
+
+ g_return_if_fail (tube != NULL);
+
+ if (--tube->ref_count == 0) {
+ if (!tube->handled) {
+ DEBUG ("Tube can't be handled, closing");
+ tp_cli_channel_type_tubes_call_close_tube (tube->public.channel, -1,
+ tube->public.id,
+ NULL, NULL, NULL,
+ NULL);
+ }
+
+ g_free (tube->bus_name);
+ g_free (tube->object_path);
+ g_object_unref (tube->factory);
+ g_object_unref (tube->public.channel);
+ g_object_unref (tube->public.initiator);
+ g_slice_free (DispatcherTube, tube);
+ }
+}
+
+static void
+dispatcher_tubes_handle_tube_cb (TpProxy *channel,
+ const GError *error,
+ gpointer user_data,
+ GObject *dispatcher)
+{
+ DispatcherTube *tube = user_data;
+
+ if (error) {
+ DEBUG ("Error: %s", error->message);
+ } else {
+ tube->handled = TRUE;
+ }
+}
+
+void
+empathy_dispatcher_tube_process (EmpathyDispatcher *dispatcher,
+ EmpathyDispatcherTube *user_data)
+{
+ DispatcherTube *tube = (DispatcherTube*) user_data;
+
+ if (tube->public.activatable) {
+ TpProxy *connection;
+ TpProxy *thandler;
+ gchar *object_path;
+ guint handle_type;
+ guint handle;
+
+ /* Create the proxy for the tube handler */
+ thandler = g_object_new (TP_TYPE_PROXY,
+ "dbus-connection", tp_get_bus (),
+ "bus-name", tube->bus_name,
+ "object-path", tube->object_path,
+ NULL);
+ tp_proxy_add_interface_by_id (thandler, EMP_IFACE_QUARK_TUBE_HANDLER);
+
+ /* Give the tube to the handler */
+ g_object_get (tube->public.channel,
+ "connection", &connection,
+ "object-path", &object_path,
+ "handle_type", &handle_type,
+ "handle", &handle,
+ NULL);
+
+ DEBUG ("Dispatching tube");
+ emp_cli_tube_handler_call_handle_tube (thandler, -1,
+ connection->bus_name,
+ connection->object_path,
+ object_path, handle_type,
+ handle, tube->public.id,
+ dispatcher_tubes_handle_tube_cb,
+ empathy_dispatcher_tube_ref (user_data),
+ (GDestroyNotify) empathy_dispatcher_tube_unref,
+ G_OBJECT (dispatcher));
+
+ g_object_unref (thandler);
+ g_object_unref (connection);
+ g_free (object_path);
+ }
+}
+
+static void
+dispatcher_tubes_new_tube_cb (TpChannel *channel,
+ guint id,
+ guint initiator,
+ guint type,
+ const gchar *service,
+ GHashTable *parameters,
+ guint state,
+ gpointer user_data,
+ GObject *dispatcher)
+{
+ EmpathyDispatcherPriv *priv = GET_PRIV (dispatcher);
+ static TpDBusDaemon *daemon = NULL;
+ DispatcherTube *tube;
+ McAccount *account;
+ guint number;
+ gchar **names;
+ gboolean running = FALSE;
+ GError *error = NULL;
+
+ /* Increase tube count */
+ number = GPOINTER_TO_UINT (g_hash_table_lookup (priv->tubes, channel));
+ g_hash_table_replace (priv->tubes, g_object_ref (channel),
+ GUINT_TO_POINTER (++number));
+ DEBUG ("Increased tube count for channel %p: %d", channel, number);
+
+ /* We dispatch only local pending tubes */
+ if (state != TP_TUBE_STATE_LOCAL_PENDING) {
+ return;
+ }
+
+ if (!daemon) {
+ daemon = tp_dbus_daemon_new (tp_get_bus ());
+ }
+
+ account = empathy_channel_get_account (channel);
+ tube = g_slice_new (DispatcherTube);
+ tube->ref_count = 1;
+ tube->handled = FALSE;
+ tube->factory = empathy_contact_factory_new ();
+ tube->bus_name = empathy_tube_handler_build_bus_name (type, service);
+ tube->object_path = empathy_tube_handler_build_object_path (type, service);
+ tube->public.activatable = FALSE;
+ tube->public.id = id;
+ tube->public.channel = g_object_ref (channel);
+ tube->public.initiator = empathy_contact_factory_get_from_handle (tube->factory,
+ account,
+ initiator);
+ g_object_unref (account);
+
+ /* Check if that bus-name has an owner, if it has one that means the
+ * app is already running and we can directly give the channel. */
+ tp_cli_dbus_daemon_run_name_has_owner (daemon, -1, tube->bus_name,
+ &running, NULL, NULL);
+ if (running) {
+ DEBUG ("Tube handler running");
+ tube->public.activatable = TRUE;
+ empathy_dispatcher_tube_process (EMPATHY_DISPATCHER (dispatcher),
+ (EmpathyDispatcherTube*) tube);
+ empathy_dispatcher_tube_unref ((EmpathyDispatcherTube*) tube);
+ return;
+ }
+
+ /* Check if that bus-name is activatable, if not that means the
+ * application needed to handle this tube isn't installed. */
+ if (!tp_cli_dbus_daemon_run_list_activatable_names (daemon, -1,
+ &names, &error,
+ NULL)) {
+ DEBUG ("Error listing activatable names: %s", error->message);
+ g_clear_error (&error);
+ } else {
+ gchar **name;
+
+ for (name = names; *name; name++) {
+ if (!tp_strdiff (*name, tube->bus_name)) {
+ tube->public.activatable = TRUE;
+ break;
+ }
+ }
+ g_strfreev (names);
+ }
+
+ g_signal_emit (dispatcher, signals[FILTER_TUBE], 0, tube);
+ empathy_dispatcher_tube_unref ((EmpathyDispatcherTube*) tube);
+}
+
+static void
+dispatcher_tubes_list_tubes_cb (TpChannel *channel,
+ const GPtrArray *tubes,
+ const GError *error,
+ gpointer user_data,
+ GObject *dispatcher)
+{
+ guint i;
+
+ if (error) {
+ DEBUG ("Error: %s", error->message);
+ return;
+ }
+
+ for (i = 0; i < tubes->len; i++) {
+ GValueArray *values;
+
+ values = g_ptr_array_index (tubes, i);
+ dispatcher_tubes_new_tube_cb (channel,
+ g_value_get_uint (g_value_array_get_nth (values, 0)),
+ g_value_get_uint (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)),
+ g_value_get_boxed (g_value_array_get_nth (values, 4)),
+ g_value_get_uint (g_value_array_get_nth (values, 5)),
+ user_data, dispatcher);
+ }
+}
+
+static void
+dispatcher_tubes_channel_invalidated_cb (TpProxy *proxy,
+ guint domain,
+ gint code,
+ gchar *message,
+ EmpathyDispatcher *dispatcher)
+{
+ EmpathyDispatcherPriv *priv = GET_PRIV (dispatcher);
+
+ DEBUG ("Error: %s", message);
+
+ g_hash_table_remove (priv->tubes, proxy);
+}
+
+static void
+dispatcher_tubes_tube_closed_cb (TpChannel *channel,
+ guint id,
+ gpointer user_data,
+ GObject *dispatcher)
+{
+ EmpathyDispatcherPriv *priv = GET_PRIV (dispatcher);
+ guint number;
+
+ number = GPOINTER_TO_UINT (g_hash_table_lookup (priv->tubes, channel));
+ if (number == 1) {
+ DEBUG ("No more tube, closing channel");
+ tp_cli_channel_call_close (channel, -1, NULL, NULL, NULL, NULL);
+ }
+ else if (number > 1) {
+ DEBUG ("Decrease tube count: %d", number);
+ g_hash_table_replace (priv->tubes, g_object_ref (channel),
+ GUINT_TO_POINTER (--number));
+ }
+}
+
+static void
+dispatcher_tubes_handle_channel (EmpathyDispatcher *dispatcher,
+ TpChannel *channel)
+{
+ EmpathyDispatcherPriv *priv = GET_PRIV (dispatcher);
+
+ if (g_hash_table_lookup (priv->tubes, channel)) {
+ return;
+ }
+
+ DEBUG ("Handling new channel");
+
+ g_hash_table_insert (priv->tubes, g_object_ref (channel),
+ GUINT_TO_POINTER (0));
+
+ g_signal_connect (channel, "invalidated",
+ G_CALLBACK (dispatcher_tubes_channel_invalidated_cb),
+ dispatcher);
+
+ tp_cli_channel_type_tubes_connect_to_tube_closed (channel,
+ dispatcher_tubes_tube_closed_cb,
+ NULL, NULL,
+ G_OBJECT (dispatcher), NULL);
+ tp_cli_channel_type_tubes_connect_to_new_tube (channel,
+ dispatcher_tubes_new_tube_cb,
+ NULL, NULL,
+ G_OBJECT (dispatcher), NULL);
+ tp_cli_channel_type_tubes_call_list_tubes (channel, -1,
+ dispatcher_tubes_list_tubes_cb,
+ NULL, NULL,
+ G_OBJECT (dispatcher));
+}
+
+static void
+dispatcher_connection_invalidated_cb (TpConnection *connection,
+ guint domain,
+ gint code,
+ gchar *message,
+ EmpathyDispatcher *dispatcher)
+{
+ EmpathyDispatcherPriv *priv = GET_PRIV (dispatcher);
+ GHashTableIter iter;
+ gpointer key, value;
+
+ DEBUG ("Error: %s", message);
+
+ g_hash_table_iter_init (&iter, priv->connections);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ if (value == connection) {
+ g_hash_table_remove (priv->connections, key);
+ break;
+ }
+ }
+}
+
+static void
+dispatcher_connection_new_channel_cb (TpConnection *connection,
+ const gchar *object_path,
+ const gchar *channel_type,
+ guint handle_type,
+ guint handle,
+ gboolean suppress_handler,
+ gpointer user_data,
+ GObject *object)
+{
+ EmpathyDispatcher *dispatcher = EMPATHY_DISPATCHER (object);
+ TpChannel *channel;
+ gpointer had_channels;
+
+ had_channels = g_object_get_data (G_OBJECT (connection), "had-channels");
+ if (had_channels == NULL) {
+ /* ListChannels didn't return yet, return to avoid duplicate
+ * dispatching */
+ return;
+ }
+
+ channel = tp_channel_new (connection, object_path, channel_type,
+ handle_type, handle, NULL);
+ tp_channel_run_until_ready (channel, NULL, NULL);
+
+ if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_TUBES)) {
+ dispatcher_tubes_handle_channel (dispatcher, channel);
+ }
+
+ if (suppress_handler) {
+ g_signal_emit (dispatcher, signals[DISPATCH_CHANNEL], 0, channel);
+ } else {
+ g_signal_emit (dispatcher, signals[FILTER_CHANNEL], 0, channel);
+ }
+
+ g_object_unref (channel);
+}
+
+static void
+dispatcher_connection_list_channels_cb (TpConnection *connection,
+ const GPtrArray *channels,
+ const GError *error,
+ gpointer user_data,
+ GObject *dispatcher)
+{
+ guint i;
+
+ if (error) {
+ DEBUG ("Error: %s", error->message);
+ return;
+ }
+
+ g_object_set_data (G_OBJECT (connection), "had-channels",
+ GUINT_TO_POINTER (1));
+
+ for (i = 0; i < channels->len; i++) {
+ GValueArray *values;
+
+ values = g_ptr_array_index (channels, i);
+ dispatcher_connection_new_channel_cb (connection,
+ g_value_get_boxed (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_uint (g_value_array_get_nth (values, 3)),
+ FALSE, user_data, dispatcher);
+ }
+}
+
+static void
+dispatcher_connection_advertise_capabilities_cb (TpConnection *connection,
+ const GPtrArray *capabilities,
+ const GError *error,
+ gpointer user_data,
+ GObject *dispatcher)
+{
+ if (error) {
+ DEBUG ("Error: %s", error->message);
+ }
+}
+
+static void
+dispatcher_connection_ready_cb (TpConnection *connection,
+ const GError *error,
+ gpointer dispatcher)
+{
+ GPtrArray *capabilities;
+ GType cap_type;
+ GValue cap = {0, };
+ const gchar *remove = NULL;
+
+ if (error) {
+ dispatcher_connection_invalidated_cb (connection,
+ error->domain,
+ error->code,
+ error->message,
+ dispatcher);
+ return;
+ }
+
+ g_signal_connect (connection, "invalidated",
+ G_CALLBACK (dispatcher_connection_invalidated_cb),
+ dispatcher);
+ tp_cli_connection_connect_to_new_channel (connection,
+ dispatcher_connection_new_channel_cb,
+ NULL, NULL,
+ G_OBJECT (dispatcher), NULL);
+ tp_cli_connection_call_list_channels (connection, -1,
+ dispatcher_connection_list_channels_cb,
+ NULL, NULL,
+ G_OBJECT (dispatcher));
+
+ /* Advertise VoIP capabilities */
+ capabilities = g_ptr_array_sized_new (1);
+ cap_type = dbus_g_type_get_struct ("GValueArray", G_TYPE_STRING,
+ G_TYPE_UINT, G_TYPE_INVALID);
+ g_value_init (&cap, cap_type);
+ g_value_take_boxed (&cap, dbus_g_type_specialized_construct (cap_type));
+ dbus_g_type_struct_set (&cap,
+ 0, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
+ 1, TP_CHANNEL_MEDIA_CAPABILITY_AUDIO |
+ TP_CHANNEL_MEDIA_CAPABILITY_VIDEO |
+ TP_CHANNEL_MEDIA_CAPABILITY_NAT_TRAVERSAL_STUN |
+ TP_CHANNEL_MEDIA_CAPABILITY_NAT_TRAVERSAL_GTALK_P2P,
+ G_MAXUINT);
+ g_ptr_array_add (capabilities, g_value_get_boxed (&cap));
+
+ tp_cli_connection_interface_capabilities_call_advertise_capabilities (
+ connection, -1,
+ capabilities, &remove,
+ dispatcher_connection_advertise_capabilities_cb,
+ NULL, NULL, G_OBJECT (dispatcher));
+ /* FIXME: Is that leaked? */
+}
+
+static void
+dispatcher_update_account (EmpathyDispatcher *dispatcher,
+ McAccount *account)
+{
+ EmpathyDispatcherPriv *priv = GET_PRIV (dispatcher);
+ TpConnection *connection;
+
+ connection = g_hash_table_lookup (priv->connections, account);
+ if (connection) {
+ return;
+ }
+
+ connection = mission_control_get_tpconnection (priv->mc, account, NULL);
+ if (!connection) {
+ return;
+ }
+
+ g_hash_table_insert (priv->connections, g_object_ref (account), connection);
+ tp_connection_call_when_ready (connection,
+ dispatcher_connection_ready_cb,
+ dispatcher);
+}
+
+static void
+dispatcher_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyDispatcher *dispatcher)
+{
+ McAccount *account;
+
+ account = mc_account_lookup (unique_name);
+ dispatcher_update_account (dispatcher, account);
+ g_object_unref (account);
+}
+
+static guint
+dispatcher_channel_hash (gconstpointer key)
+{
+ TpProxy *channel = TP_PROXY (key);
+
+ return g_str_hash (channel->object_path);
+}
+
+static gboolean
+dispatcher_channel_equal (gconstpointer a,
+ gconstpointer b)
+{
+ TpProxy *channel_a = TP_PROXY (a);
+ TpProxy *channel_b = TP_PROXY (b);
+
+ return g_str_equal (channel_a->object_path, channel_b->object_path);
+}
+
+static void
+dispatcher_finalize (GObject *object)
+{
+ EmpathyDispatcherPriv *priv = GET_PRIV (object);
+
+ empathy_disconnect_account_status_changed (priv->token);
+ g_object_unref (priv->mc);
+
+ g_hash_table_destroy (priv->connections);
+ g_hash_table_destroy (priv->tubes);
+}
+
+static void
+empathy_dispatcher_class_init (EmpathyDispatcherClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = dispatcher_finalize;
+
+ signals[DISPATCH_CHANNEL] =
+ g_signal_new ("dispatch-channel",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE,
+ 1, TP_TYPE_CHANNEL);
+ signals[FILTER_CHANNEL] =
+ g_signal_new ("filter-channel",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE,
+ 1, TP_TYPE_CHANNEL);
+ signals[FILTER_TUBE] =
+ g_signal_new ("filter-tube",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__BOXED,
+ G_TYPE_NONE,
+ 1, EMPATHY_TYPE_DISPATCHER_TUBE);
+
+ g_type_class_add_private (object_class, sizeof (EmpathyDispatcherPriv));
+}
+
+static void
+empathy_dispatcher_init (EmpathyDispatcher *dispatcher)
+{
+ GList *accounts, *l;
+ EmpathyDispatcherPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (dispatcher,
+ EMPATHY_TYPE_DISPATCHER, EmpathyDispatcherPriv);
+
+ dispatcher->priv = priv;
+ priv->tubes = g_hash_table_new_full (dispatcher_channel_hash,
+ dispatcher_channel_equal,
+ g_object_unref, NULL);
+
+ priv->mc = empathy_mission_control_new ();
+ priv->token = empathy_connect_to_account_status_changed (priv->mc,
+ G_CALLBACK (dispatcher_status_changed_cb),
+ dispatcher, NULL);
+
+ priv->connections = g_hash_table_new_full (empathy_account_hash,
+ empathy_account_equal,
+ g_object_unref,
+ g_object_unref);
+ accounts = mc_accounts_list_by_enabled (TRUE);
+ for (l = accounts; l; l = l->next) {
+ dispatcher_update_account (dispatcher, l->data);
+ g_object_unref (l->data);
+ }
+ g_list_free (accounts);
+}
+
+EmpathyDispatcher *
+empathy_dispatcher_new (void)
+{
+ if (!dispatcher) {
+ dispatcher = g_object_new (EMPATHY_TYPE_DISPATCHER, NULL);
+ g_object_add_weak_pointer (G_OBJECT (dispatcher), (gpointer) &dispatcher);
+ } else {
+ g_object_ref (dispatcher);
+ }
+
+ return dispatcher;
+}
+
diff --git a/trunk/libempathy/empathy-dispatcher.h b/trunk/libempathy/empathy-dispatcher.h
new file mode 100644
index 000000000..0cc59c8b8
--- /dev/null
+++ b/trunk/libempathy/empathy-dispatcher.h
@@ -0,0 +1,72 @@
+/* -*- 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_DISPATCHER_H__
+#define __EMPATHY_DISPATCHER_H__
+
+#include <glib.h>
+
+#include <telepathy-glib/channel.h>
+
+#include "empathy-contact.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_DISPATCHER (empathy_dispatcher_get_type ())
+#define EMPATHY_DISPATCHER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_DISPATCHER, EmpathyDispatcher))
+#define EMPATHY_DISPATCHER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_DISPATCHER, EmpathyDispatcherClass))
+#define EMPATHY_IS_DISPATCHER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_DISPATCHER))
+#define EMPATHY_IS_DISPATCHER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_DISPATCHER))
+#define EMPATHY_DISPATCHER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_DISPATCHER, EmpathyDispatcherClass))
+
+typedef struct _EmpathyDispatcher EmpathyDispatcher;
+typedef struct _EmpathyDispatcherClass EmpathyDispatcherClass;
+
+struct _EmpathyDispatcher {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyDispatcherClass {
+ GObjectClass parent_class;
+};
+
+#define EMPATHY_TYPE_DISPATCHER_TUBE (empathy_dispatcher_tube_get_type ())
+typedef struct {
+ EmpathyContact *initiator;
+ TpChannel *channel;
+ guint id;
+ gboolean activatable;
+} EmpathyDispatcherTube;
+
+GType empathy_dispatcher_get_type (void) G_GNUC_CONST;
+EmpathyDispatcher * empathy_dispatcher_new (void);
+void empathy_dispatcher_channel_process(EmpathyDispatcher *dispatcher,
+ TpChannel *channel);
+GType empathy_dispatcher_tube_get_type (void);
+EmpathyDispatcherTube *empathy_dispatcher_tube_ref (EmpathyDispatcherTube *tube);
+void empathy_dispatcher_tube_unref (EmpathyDispatcherTube *tube);
+void empathy_dispatcher_tube_process (EmpathyDispatcher *dispatcher,
+ EmpathyDispatcherTube *tube);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_DISPATCHER_H__ */
diff --git a/trunk/libempathy/empathy-idle.c b/trunk/libempathy/empathy-idle.c
new file mode 100644
index 000000000..ce22b93a9
--- /dev/null
+++ b/trunk/libempathy/empathy-idle.c
@@ -0,0 +1,661 @@
+/* -*- 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 <glib/gi18n.h>
+#include <dbus/dbus-glib.h>
+
+#include <telepathy-glib/dbus.h>
+#include <libmissioncontrol/mc-enum-types.h>
+
+#include "empathy-idle.h"
+#include "empathy-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include "empathy-debug.h"
+
+/* Number of seconds before entering extended autoaway. */
+#define EXT_AWAY_TIME (30*60)
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIdle)
+typedef struct {
+ MissionControl *mc;
+ DBusGProxy *gs_proxy;
+ DBusGProxy *nm_proxy;
+
+ McPresence state;
+ gchar *status;
+ McPresence flash_state;
+ gboolean auto_away;
+ gboolean use_nm;
+
+ gboolean away_reset_status;
+ McPresence away_saved_state;
+ gboolean nm_reset_status;
+ McPresence nm_saved_state;
+
+ gboolean is_idle;
+ gboolean nm_connected;
+ guint ext_away_timeout;
+} EmpathyIdlePriv;
+
+typedef enum {
+ NM_STATE_UNKNOWN,
+ NM_STATE_ASLEEP,
+ NM_STATE_CONNECTING,
+ NM_STATE_CONNECTED,
+ NM_STATE_DISCONNECTED
+} NMState;
+
+static void idle_finalize (GObject *object);
+static void idle_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void idle_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void idle_presence_changed_cb (MissionControl *mc,
+ McPresence state,
+ gchar *status,
+ EmpathyIdle *idle);
+static void idle_session_idle_changed_cb (DBusGProxy *gs_proxy,
+ gboolean is_idle,
+ EmpathyIdle *idle);
+static void idle_nm_state_change_cb (DBusGProxy *proxy,
+ guint state,
+ EmpathyIdle *idle);
+static void idle_ext_away_start (EmpathyIdle *idle);
+static void idle_ext_away_stop (EmpathyIdle *idle);
+static gboolean idle_ext_away_cb (EmpathyIdle *idle);
+
+enum {
+ PROP_0,
+ PROP_STATE,
+ PROP_STATUS,
+ PROP_FLASH_STATE,
+ PROP_AUTO_AWAY,
+ PROP_USE_NM
+};
+
+G_DEFINE_TYPE (EmpathyIdle, empathy_idle, G_TYPE_OBJECT)
+
+static void
+empathy_idle_class_init (EmpathyIdleClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = idle_finalize;
+ object_class->get_property = idle_get_property;
+ object_class->set_property = idle_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_STATE,
+ g_param_spec_enum ("state",
+ "state",
+ "state",
+ MC_TYPE_PRESENCE,
+ MC_PRESENCE_AVAILABLE,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_STATUS,
+ g_param_spec_string ("status",
+ "status",
+ "status",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_FLASH_STATE,
+ g_param_spec_enum ("flash-state",
+ "flash-state",
+ "flash-state",
+ MC_TYPE_PRESENCE,
+ MC_PRESENCE_UNSET,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_AUTO_AWAY,
+ g_param_spec_boolean ("auto-away",
+ "Automatic set presence to away",
+ "Should it set presence to away if inactive",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class,
+ PROP_USE_NM,
+ g_param_spec_boolean ("use-nm",
+ "Use Network Manager",
+ "Set presence according to Network Manager",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ g_type_class_add_private (object_class, sizeof (EmpathyIdlePriv));
+}
+
+static void
+empathy_idle_init (EmpathyIdle *idle)
+{
+ DBusGConnection *system_bus;
+ GError *error = NULL;
+ EmpathyIdlePriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (idle,
+ EMPATHY_TYPE_IDLE, EmpathyIdlePriv);
+
+ idle->priv = priv;
+ priv->is_idle = FALSE;
+ priv->mc = empathy_mission_control_new ();
+ priv->state = mission_control_get_presence_actual (priv->mc, NULL);
+ priv->status = mission_control_get_presence_message_actual (priv->mc, NULL);
+ if (G_STR_EMPTY (priv->status)) {
+ g_free (priv->status);
+ priv->status = NULL;
+ }
+
+ dbus_g_proxy_connect_signal (DBUS_G_PROXY (priv->mc),
+ "PresenceChanged",
+ G_CALLBACK (idle_presence_changed_cb),
+ idle, NULL);
+
+ priv->gs_proxy = dbus_g_proxy_new_for_name (tp_get_bus (),
+ "org.gnome.ScreenSaver",
+ "/org/gnome/ScreenSaver",
+ "org.gnome.ScreenSaver");
+ if (priv->gs_proxy) {
+ dbus_g_proxy_add_signal (priv->gs_proxy, "SessionIdleChanged",
+ G_TYPE_BOOLEAN,
+ G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->gs_proxy, "SessionIdleChanged",
+ G_CALLBACK (idle_session_idle_changed_cb),
+ idle, NULL);
+ } else {
+ DEBUG ("Failed to get gs proxy");
+ }
+
+
+ system_bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+ if (!system_bus) {
+ DEBUG ("Failed to get system bus: %s",
+ error ? error->message : "No error given");
+ } else {
+ priv->nm_proxy = dbus_g_proxy_new_for_name (system_bus,
+ "org.freedesktop.NetworkManager",
+ "/org/freedesktop/NetworkManager",
+ "org.freedesktop.NetworkManager");
+ }
+ if (priv->nm_proxy) {
+ dbus_g_proxy_add_signal (priv->nm_proxy, "StateChange",
+ G_TYPE_UINT, G_TYPE_INVALID);
+ dbus_g_proxy_connect_signal (priv->nm_proxy, "StateChange",
+ G_CALLBACK (idle_nm_state_change_cb),
+ idle, NULL);
+ } else {
+ DEBUG ("Failed to get nm proxy");
+ }
+
+ priv->nm_connected = TRUE;
+}
+
+static void
+idle_finalize (GObject *object)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ g_free (priv->status);
+ g_object_unref (priv->mc);
+
+ if (priv->gs_proxy) {
+ g_object_unref (priv->gs_proxy);
+ }
+
+ idle_ext_away_stop (EMPATHY_IDLE (object));
+}
+
+static void
+idle_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyIdlePriv *priv;
+ EmpathyIdle *idle;
+
+ priv = GET_PRIV (object);
+ idle = EMPATHY_IDLE (object);
+
+ switch (param_id) {
+ case PROP_STATE:
+ g_value_set_enum (value, empathy_idle_get_state (idle));
+ break;
+ case PROP_STATUS:
+ g_value_set_string (value, empathy_idle_get_status (idle));
+ break;
+ case PROP_FLASH_STATE:
+ g_value_set_enum (value, empathy_idle_get_flash_state (idle));
+ break;
+ case PROP_AUTO_AWAY:
+ g_value_set_boolean (value, empathy_idle_get_auto_away (idle));
+ break;
+ case PROP_USE_NM:
+ g_value_set_boolean (value, empathy_idle_get_use_nm (idle));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+idle_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyIdlePriv *priv;
+ EmpathyIdle *idle;
+
+ priv = GET_PRIV (object);
+ idle = EMPATHY_IDLE (object);
+
+ switch (param_id) {
+ case PROP_STATE:
+ empathy_idle_set_state (idle, g_value_get_enum (value));
+ break;
+ case PROP_STATUS:
+ empathy_idle_set_status (idle, g_value_get_string (value));
+ break;
+ case PROP_FLASH_STATE:
+ empathy_idle_set_flash_state (idle, g_value_get_enum (value));
+ break;
+ case PROP_AUTO_AWAY:
+ empathy_idle_set_auto_away (idle, g_value_get_boolean (value));
+ break;
+ case PROP_USE_NM:
+ empathy_idle_set_use_nm (idle, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+EmpathyIdle *
+empathy_idle_new (void)
+{
+ static EmpathyIdle *idle = NULL;
+
+ if (!idle) {
+ idle = g_object_new (EMPATHY_TYPE_IDLE, NULL);
+ g_object_add_weak_pointer (G_OBJECT (idle), (gpointer) &idle);
+ } else {
+ g_object_ref (idle);
+ }
+
+ return idle;
+}
+
+McPresence
+empathy_idle_get_state (EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (idle);
+
+ return priv->state;
+}
+
+void
+empathy_idle_set_state (EmpathyIdle *idle,
+ McPresence state)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (idle);
+
+ empathy_idle_set_presence (idle, state, priv->status);
+}
+
+const gchar *
+empathy_idle_get_status (EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (idle);
+
+ if (!priv->status) {
+ return empathy_presence_get_default_message (priv->state);
+ }
+
+ return priv->status;
+}
+
+void
+empathy_idle_set_status (EmpathyIdle *idle,
+ const gchar *status)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (idle);
+
+ empathy_idle_set_presence (idle, priv->state, status);
+}
+
+McPresence
+empathy_idle_get_flash_state (EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (idle);
+
+ return priv->flash_state;
+}
+
+void
+empathy_idle_set_flash_state (EmpathyIdle *idle,
+ McPresence state)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (idle);
+
+ priv->flash_state = state;
+
+ if (state == MC_PRESENCE_UNSET) {
+ }
+
+ g_object_notify (G_OBJECT (idle), "flash-state");
+}
+
+void
+empathy_idle_set_presence (EmpathyIdle *idle,
+ McPresence state,
+ const gchar *status)
+{
+ EmpathyIdlePriv *priv;
+ const gchar *default_status;
+
+ priv = GET_PRIV (idle);
+
+ DEBUG ("Changing presence to %s (%d)",
+ status, state);
+
+ if (!priv->nm_connected) {
+ DEBUG ("NM not connected");
+ return;
+ }
+
+ /* Do not set translated default messages */
+ default_status = empathy_presence_get_default_message (state);
+ if (status && strcmp (status, default_status) == 0) {
+ status = NULL;
+ }
+
+ mission_control_set_presence (priv->mc,
+ state,
+ status,
+ NULL, NULL);
+}
+
+gboolean
+empathy_idle_get_auto_away (EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv = GET_PRIV (idle);
+
+ return priv->auto_away;
+}
+
+void
+empathy_idle_set_auto_away (EmpathyIdle *idle,
+ gboolean auto_away)
+{
+ EmpathyIdlePriv *priv = GET_PRIV (idle);
+
+ priv->auto_away = auto_away;
+
+ g_object_notify (G_OBJECT (idle), "auto-away");
+}
+
+gboolean
+empathy_idle_get_use_nm (EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv = GET_PRIV (idle);
+
+ return priv->use_nm;
+}
+
+void
+empathy_idle_set_use_nm (EmpathyIdle *idle,
+ gboolean use_nm)
+{
+ EmpathyIdlePriv *priv = GET_PRIV (idle);
+
+ if (!priv->nm_proxy || use_nm == priv->use_nm) {
+ return;
+ }
+
+ priv->use_nm = use_nm;
+
+ if (use_nm) {
+ guint nm_status;
+ GError *error = NULL;
+
+ dbus_g_proxy_call (priv->nm_proxy, "state",
+ &error,
+ G_TYPE_INVALID,
+ G_TYPE_UINT, &nm_status,
+ G_TYPE_INVALID);
+
+ if (error) {
+ DEBUG ("Couldn't get NM state: %s", error->message);
+ g_clear_error (&error);
+ nm_status = NM_STATE_ASLEEP;
+ }
+
+ idle_nm_state_change_cb (priv->nm_proxy, nm_status, idle);
+ } else {
+ if (!priv->nm_connected) {
+ empathy_idle_set_state (idle, priv->nm_saved_state);
+ }
+ priv->nm_connected = TRUE;
+ priv->nm_saved_state = MC_PRESENCE_UNSET;
+ }
+
+ g_object_notify (G_OBJECT (idle), "use-nm");
+}
+
+static void
+idle_presence_changed_cb (MissionControl *mc,
+ McPresence state,
+ gchar *status,
+ EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (idle);
+
+ DEBUG ("Presence changed to '%s' (%d)", status, state);
+
+ g_free (priv->status);
+ priv->state = state;
+ priv->status = NULL;
+ if (!G_STR_EMPTY (status)) {
+ priv->status = g_strdup (status);
+ }
+
+ g_object_notify (G_OBJECT (idle), "state");
+ g_object_notify (G_OBJECT (idle), "status");
+}
+
+static void
+idle_session_idle_changed_cb (DBusGProxy *gs_proxy,
+ gboolean is_idle,
+ EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (idle);
+
+ DEBUG ("Session idle state changed, %s -> %s",
+ priv->is_idle ? "yes" : "no",
+ is_idle ? "yes" : "no");
+
+ if (priv->state <= MC_PRESENCE_OFFLINE ||
+ priv->state == MC_PRESENCE_HIDDEN ||
+ !priv->auto_away) {
+ /* We are not online or we don't want to go auto away,
+ * nothing to do here */
+ priv->is_idle = is_idle;
+ return;
+ }
+
+ if (is_idle && !priv->is_idle) {
+ McPresence new_state;
+ /* We are now idle */
+
+ if (priv->state == MC_PRESENCE_AWAY ||
+ priv->state == MC_PRESENCE_EXTENDED_AWAY) {
+ /* User set away manually, when coming back we restore
+ * default presence. */
+ new_state = priv->state;
+ priv->away_saved_state = MC_PRESENCE_AVAILABLE;
+ priv->away_reset_status = TRUE;
+ } else {
+ new_state = MC_PRESENCE_AWAY;
+ priv->away_saved_state = priv->state;
+ priv->away_reset_status = FALSE;
+ }
+
+ DEBUG ("Going to autoaway");
+ empathy_idle_set_state (idle, new_state);
+
+ idle_ext_away_start (idle);
+ } else if (!is_idle && priv->is_idle) {
+ /* We are no more idle, restore state */
+ idle_ext_away_stop (idle);
+
+ DEBUG ("Restoring state to %d, reset status: %s",
+ priv->away_saved_state,
+ priv->away_reset_status ? "Yes" : "No");
+
+ if (priv->nm_connected) {
+ empathy_idle_set_presence (idle,
+ priv->away_saved_state,
+ priv->away_reset_status ? NULL : priv->status);
+ } else {
+ /* We can't restore state now, will do when NM gets
+ * connected. */
+ priv->nm_saved_state = priv->away_saved_state;
+ priv->nm_reset_status = priv->away_reset_status;
+ }
+
+ priv->away_saved_state = MC_PRESENCE_UNSET;
+ priv->away_reset_status = FALSE;
+ }
+
+ priv->is_idle = is_idle;
+}
+
+static void
+idle_nm_state_change_cb (DBusGProxy *proxy,
+ guint state,
+ EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv;
+ gboolean old_nm_connected;
+ gboolean new_nm_connected;
+
+ priv = GET_PRIV (idle);
+
+ DEBUG ("New network state (%d), in use = %s",
+ state, priv->use_nm ? "Yes" : "No");
+
+ if (!priv->use_nm) {
+ return;
+ }
+
+ old_nm_connected = priv->nm_connected;
+ new_nm_connected = !(state == NM_STATE_CONNECTING ||
+ state == NM_STATE_DISCONNECTED);
+ priv->nm_connected = TRUE; /* To be sure _set_state will work */
+
+ if (old_nm_connected && !new_nm_connected) {
+ /* We are no more connected */
+ idle_ext_away_stop (idle);
+
+ priv->nm_saved_state = priv->state;
+ empathy_idle_set_state (idle, MC_PRESENCE_OFFLINE);
+ }
+ else if (!old_nm_connected && new_nm_connected) {
+ /* We are now connected */
+ empathy_idle_set_presence (idle,
+ priv->nm_saved_state,
+ priv->nm_reset_status ? NULL : priv->status);
+ priv->nm_saved_state = MC_PRESENCE_UNSET;
+ priv->nm_reset_status = FALSE;
+ }
+
+ priv->nm_connected = new_nm_connected;
+}
+
+static void
+idle_ext_away_start (EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (idle);
+
+ idle_ext_away_stop (idle);
+ priv->ext_away_timeout = g_timeout_add_seconds (EXT_AWAY_TIME,
+ (GSourceFunc) idle_ext_away_cb,
+ idle);
+}
+
+static void
+idle_ext_away_stop (EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (idle);
+
+ if (priv->ext_away_timeout) {
+ g_source_remove (priv->ext_away_timeout);
+ priv->ext_away_timeout = 0;
+ }
+}
+
+static gboolean
+idle_ext_away_cb (EmpathyIdle *idle)
+{
+ EmpathyIdlePriv *priv;
+
+ priv = GET_PRIV (idle);
+
+ DEBUG ("Going to extended autoaway");
+ empathy_idle_set_state (idle, MC_PRESENCE_EXTENDED_AWAY);
+ priv->ext_away_timeout = 0;
+
+ return FALSE;
+}
+
diff --git a/trunk/libempathy/empathy-idle.h b/trunk/libempathy/empathy-idle.h
new file mode 100644
index 000000000..fbaab36a9
--- /dev/null
+++ b/trunk/libempathy/empathy-idle.h
@@ -0,0 +1,73 @@
+/* -*- 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_IDLE_H__
+#define __EMPATHY_IDLE_H__
+
+#include <glib.h>
+
+#include <libmissioncontrol/mission-control.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_IDLE (empathy_idle_get_type ())
+#define EMPATHY_IDLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_IDLE, EmpathyIdle))
+#define EMPATHY_IDLE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_IDLE, EmpathyIdleClass))
+#define EMPATHY_IS_IDLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_IDLE))
+#define EMPATHY_IS_IDLE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_IDLE))
+#define EMPATHY_IDLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_IDLE, EmpathyIdleClass))
+
+typedef struct _EmpathyIdle EmpathyIdle;
+typedef struct _EmpathyIdleClass EmpathyIdleClass;
+
+struct _EmpathyIdle {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyIdleClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_idle_get_type (void) G_GNUC_CONST;
+EmpathyIdle *empathy_idle_new (void);
+McPresence empathy_idle_get_state (EmpathyIdle *idle);
+void empathy_idle_set_state (EmpathyIdle *idle,
+ McPresence state);
+const gchar *empathy_idle_get_status (EmpathyIdle *idle);
+void empathy_idle_set_status (EmpathyIdle *idle,
+ const gchar *status);
+McPresence empathy_idle_get_flash_state (EmpathyIdle *idle);
+void empathy_idle_set_flash_state (EmpathyIdle *idle,
+ McPresence state);
+void empathy_idle_set_presence (EmpathyIdle *idle,
+ McPresence state,
+ const gchar *status);
+gboolean empathy_idle_get_auto_away (EmpathyIdle *idle);
+void empathy_idle_set_auto_away (EmpathyIdle *idle,
+ gboolean auto_away);
+gboolean empathy_idle_get_use_nm (EmpathyIdle *idle);
+void empathy_idle_set_use_nm (EmpathyIdle *idle,
+ gboolean use_nm);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_IDLE_H__ */
diff --git a/trunk/libempathy/empathy-irc-network-manager.c b/trunk/libempathy/empathy-irc-network-manager.c
new file mode 100644
index 000000000..ce1f90b23
--- /dev/null
+++ b/trunk/libempathy/empathy-irc-network-manager.c
@@ -0,0 +1,777 @@
+/*
+ * Copyright (C) 2007-2008 Guillaume Desmottes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <gdesmott@gnome.org>
+ */
+
+#include <config.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+#include "empathy-utils.h"
+#include "empathy-irc-network-manager.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_IRC
+#include "empathy-debug.h"
+
+#define IRC_NETWORKS_DTD_FILENAME "empathy-irc-networks.dtd"
+#define SAVE_TIMER 4
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIrcNetworkManager)
+typedef struct {
+ GHashTable *networks;
+
+ gchar *global_file;
+ gchar *user_file;
+ guint last_id;
+
+ /* Do we have to save modifications to the user file ? */
+ gboolean have_to_save;
+ /* Are we loading networks from XML files ? */
+ gboolean loading;
+ /* source id of the autosave timer */
+ gint save_timer_id;
+} EmpathyIrcNetworkManagerPriv;
+
+/* properties */
+enum
+{
+ PROP_GLOBAL_FILE = 1,
+ PROP_USER_FILE,
+ LAST_PROPERTY
+};
+
+G_DEFINE_TYPE (EmpathyIrcNetworkManager, empathy_irc_network_manager,
+ G_TYPE_OBJECT);
+
+static void irc_network_manager_load_servers (
+ EmpathyIrcNetworkManager *manager);
+static gboolean irc_network_manager_file_parse (
+ EmpathyIrcNetworkManager *manager, const gchar *filename,
+ gboolean user_defined);
+static gboolean irc_network_manager_file_save (
+ EmpathyIrcNetworkManager *manager);
+
+static void
+empathy_irc_network_manager_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyIrcNetworkManager *self = EMPATHY_IRC_NETWORK_MANAGER (object);
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+
+ switch (property_id)
+ {
+ case PROP_GLOBAL_FILE:
+ g_value_set_string (value, priv->global_file);
+ break;
+ case PROP_USER_FILE:
+ g_value_set_string (value, priv->user_file);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+empathy_irc_network_manager_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyIrcNetworkManager *self = EMPATHY_IRC_NETWORK_MANAGER (object);
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+
+ switch (property_id)
+ {
+ case PROP_GLOBAL_FILE:
+ g_free (priv->global_file);
+ priv->global_file = g_value_dup_string (value);
+ break;
+ case PROP_USER_FILE:
+ g_free (priv->user_file);
+ priv->user_file = g_value_dup_string (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static GObject *
+empathy_irc_network_manager_constructor (GType type,
+ guint n_props,
+ GObjectConstructParam *props)
+{
+ GObject *obj;
+ EmpathyIrcNetworkManager *self;
+
+ /* Parent constructor chain */
+ obj = G_OBJECT_CLASS (empathy_irc_network_manager_parent_class)->
+ constructor (type, n_props, props);
+
+ self = EMPATHY_IRC_NETWORK_MANAGER (obj);
+ irc_network_manager_load_servers (self);
+
+ return obj;
+}
+
+static void
+empathy_irc_network_manager_finalize (GObject *object)
+{
+ EmpathyIrcNetworkManager *self = EMPATHY_IRC_NETWORK_MANAGER (object);
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+
+ if (priv->save_timer_id > 0)
+ {
+ g_source_remove (priv->save_timer_id);
+ }
+
+ if (priv->have_to_save)
+ {
+ irc_network_manager_file_save (self);
+ }
+
+ g_free (priv->global_file);
+ g_free (priv->user_file);
+
+ g_hash_table_destroy (priv->networks);
+
+ G_OBJECT_CLASS (empathy_irc_network_manager_parent_class)->finalize (object);
+}
+
+static void
+empathy_irc_network_manager_init (EmpathyIrcNetworkManager *self)
+{
+ EmpathyIrcNetworkManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+ EMPATHY_TYPE_IRC_NETWORK_MANAGER, EmpathyIrcNetworkManagerPriv);
+
+ self->priv = priv;
+
+ priv->networks = g_hash_table_new_full (g_str_hash, g_str_equal,
+ (GDestroyNotify) g_free, (GDestroyNotify) g_object_unref);
+
+ priv->last_id = 0;
+
+ priv->have_to_save = FALSE;
+ priv->loading = FALSE;
+ priv->save_timer_id = 0;
+}
+
+static void
+empathy_irc_network_manager_class_init (EmpathyIrcNetworkManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GParamSpec *param_spec;
+
+ object_class->constructor = empathy_irc_network_manager_constructor;
+ object_class->get_property = empathy_irc_network_manager_get_property;
+ object_class->set_property = empathy_irc_network_manager_set_property;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyIrcNetworkManagerPriv));
+
+ object_class->finalize = empathy_irc_network_manager_finalize;
+
+ param_spec = g_param_spec_string (
+ "global-file",
+ "path of the global networks file",
+ "The path of the system-wide filename from which we have to load"
+ " the networks list",
+ NULL,
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property (object_class, PROP_GLOBAL_FILE, param_spec);
+
+ param_spec = g_param_spec_string (
+ "user-file",
+ "path of the user networks file",
+ "The path of user's filename from which we have to load"
+ " the networks list and to which we'll save his modifications",
+ NULL,
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property (object_class, PROP_USER_FILE, param_spec);
+}
+
+/**
+ * empathy_irc_network_manager_new:
+ * @global_file: the path of the global networks file, or %NULL
+ * @user_file: the path of the user networks file, or %NULL
+ *
+ * Creates a new #EmpathyIrcNetworkManager
+ *
+ * Returns: a new #EmpathyIrcNetworkManager
+ */
+EmpathyIrcNetworkManager *
+empathy_irc_network_manager_new (const gchar *global_file,
+ const gchar *user_file)
+{
+ EmpathyIrcNetworkManager *manager;
+
+ manager = g_object_new (EMPATHY_TYPE_IRC_NETWORK_MANAGER,
+ "global-file", global_file,
+ "user-file", user_file,
+ NULL);
+
+ return manager;
+}
+
+static gboolean
+save_timeout (EmpathyIrcNetworkManager *self)
+{
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+
+ priv->save_timer_id = 0;
+ irc_network_manager_file_save (self);
+
+ return FALSE;
+}
+
+static void
+reset_save_timeout (EmpathyIrcNetworkManager *self)
+{
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+
+ if (priv->save_timer_id > 0)
+ {
+ g_source_remove (priv->save_timer_id);
+ }
+
+ priv->save_timer_id = g_timeout_add_seconds (SAVE_TIMER,
+ (GSourceFunc) save_timeout, self);
+}
+
+static void
+network_modified (EmpathyIrcNetwork *network,
+ EmpathyIrcNetworkManager *self)
+{
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+
+ network->user_defined = TRUE;
+
+ if (!priv->loading)
+ {
+ priv->have_to_save = TRUE;
+ reset_save_timeout (self);
+ }
+}
+
+static void
+add_network (EmpathyIrcNetworkManager *self,
+ EmpathyIrcNetwork *network,
+ const gchar *id)
+{
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+
+ g_hash_table_insert (priv->networks, g_strdup (id), g_object_ref (network));
+
+ g_signal_connect (network, "modified", G_CALLBACK (network_modified), self);
+}
+
+/**
+ * empathy_irc_network_manager_add:
+ * @manager: an #EmpathyIrcNetworkManager
+ * @network: the #EmpathyIrcNetwork to add
+ *
+ * Add an #EmpathyIrcNetwork to the given #EmpathyIrcNetworkManager.
+ *
+ */
+void
+empathy_irc_network_manager_add (EmpathyIrcNetworkManager *self,
+ EmpathyIrcNetwork *network)
+{
+ EmpathyIrcNetworkManagerPriv *priv;
+ gchar *id = NULL;
+
+ g_return_if_fail (EMPATHY_IS_IRC_NETWORK_MANAGER (self));
+ g_return_if_fail (EMPATHY_IS_IRC_NETWORK (network));
+
+ priv = GET_PRIV (self);
+
+ /* generate an id for this network */
+ do
+ {
+ g_free (id);
+ id = g_strdup_printf ("id%u", ++priv->last_id);
+ } while (g_hash_table_lookup (priv->networks, id) != NULL &&
+ priv->last_id < G_MAXUINT);
+
+ if (priv->last_id == G_MAXUINT)
+ {
+ DEBUG ("Can't add network: too many networks using a similiar ID");
+ return;
+ }
+
+ DEBUG ("add server with \"%s\" as ID", id);
+
+ network->user_defined = TRUE;
+ add_network (self, network, id);
+
+ priv->have_to_save = TRUE;
+ reset_save_timeout (self);
+
+ g_free (id);
+}
+
+/**
+ * empathy_irc_network_manager_remove:
+ * @manager: an #EmpathyIrcNetworkManager
+ * @network: the #EmpathyIrcNetwork to remove
+ *
+ * Remove an #EmpathyIrcNetwork from the given #EmpathyIrcNetworkManager.
+ *
+ */
+void
+empathy_irc_network_manager_remove (EmpathyIrcNetworkManager *self,
+ EmpathyIrcNetwork *network)
+{
+ EmpathyIrcNetworkManagerPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_IRC_NETWORK_MANAGER (self));
+ g_return_if_fail (EMPATHY_IS_IRC_NETWORK (network));
+
+ priv = GET_PRIV (self);
+
+ network->user_defined = TRUE;
+ network->dropped = TRUE;
+
+ priv->have_to_save = TRUE;
+ reset_save_timeout (self);
+}
+
+static void
+append_network_to_list (const gchar *id,
+ EmpathyIrcNetwork *network,
+ GSList **list)
+{
+ if (network->dropped)
+ return;
+
+ *list = g_slist_prepend (*list, g_object_ref (network));
+}
+
+/**
+ * empathy_irc_network_manager_get_networks:
+ * @manager: an #EmpathyIrcNetworkManager
+ *
+ * Get the list of #EmpathyIrcNetwork associated with the given
+ * manager.
+ *
+ * Returns: a new #GSList of refed #EmpathyIrcNetwork
+ */
+GSList *
+empathy_irc_network_manager_get_networks (EmpathyIrcNetworkManager *self)
+{
+ EmpathyIrcNetworkManagerPriv *priv;
+ GSList *irc_networks = NULL;
+
+ g_return_val_if_fail (EMPATHY_IS_IRC_NETWORK_MANAGER (self), NULL);
+
+ priv = GET_PRIV (self);
+
+ g_hash_table_foreach (priv->networks, (GHFunc) append_network_to_list,
+ &irc_networks);
+
+ return irc_networks;
+}
+
+/*
+ * API to save/load and parse the irc_networks file.
+ */
+
+static void
+load_global_file (EmpathyIrcNetworkManager *self)
+{
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+
+ if (priv->global_file == NULL)
+ return;
+
+ if (!g_file_test (priv->global_file, G_FILE_TEST_EXISTS))
+ {
+ DEBUG ("Global networks file %s doesn't exist", priv->global_file);
+ return;
+ }
+
+ irc_network_manager_file_parse (self, priv->global_file, FALSE);
+}
+
+static void
+load_user_file (EmpathyIrcNetworkManager *self)
+{
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+
+ if (priv->user_file == NULL)
+ return;
+
+ if (!g_file_test (priv->user_file, G_FILE_TEST_EXISTS))
+ {
+ DEBUG ("User networks file %s doesn't exist", priv->global_file);
+ return;
+ }
+
+ irc_network_manager_file_parse (self, priv->user_file, TRUE);
+}
+
+static void
+irc_network_manager_load_servers (EmpathyIrcNetworkManager *self)
+{
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+
+ priv->loading = TRUE;
+
+ load_global_file (self);
+ load_user_file (self);
+
+ priv->loading = FALSE;
+ priv->have_to_save = FALSE;
+}
+
+static void
+irc_network_manager_parse_irc_server (EmpathyIrcNetwork *network,
+ xmlNodePtr node)
+{
+ xmlNodePtr server_node;
+
+ for (server_node = node->children; server_node;
+ server_node = server_node->next)
+ {
+ gchar *address = NULL, *port = NULL, *ssl = NULL;
+
+ if (strcmp (server_node->name, "server") != 0)
+ continue;
+
+ address = xmlGetProp (server_node, "address");
+ port = xmlGetProp (server_node, "port");
+ ssl = xmlGetProp (server_node, "ssl");
+
+ if (address != NULL)
+ {
+ gint port_nb = 0;
+ gboolean have_ssl = FALSE;
+ EmpathyIrcServer *server;
+
+ if (port != NULL)
+ port_nb = strtol (port, NULL, 10);
+
+ if (port_nb <= 0 || port_nb > G_MAXUINT16)
+ port_nb = 6667;
+
+ if (ssl == NULL || strcmp (ssl, "TRUE") == 0)
+ have_ssl = TRUE;
+
+ DEBUG ("parsed server %s port %d ssl %d", address, port_nb, have_ssl);
+
+ server = empathy_irc_server_new (address, port_nb, have_ssl);
+ empathy_irc_network_append_server (network, server);
+ }
+
+ if (address)
+ xmlFree (address);
+ if (port)
+ xmlFree (port);
+ if (ssl)
+ xmlFree (ssl);
+ }
+}
+
+static void
+irc_network_manager_parse_irc_network (EmpathyIrcNetworkManager *self,
+ xmlNodePtr node,
+ gboolean user_defined)
+{
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+ EmpathyIrcNetwork *network;
+ xmlNodePtr child;
+ gchar *str;
+ gchar *id, *name;
+
+ id = xmlGetProp (node, "id");
+ if (xmlHasProp (node, "dropped"))
+ {
+ if (!user_defined)
+ {
+ DEBUG ("the 'dropped' attribute shouldn't be used in the global file");
+ }
+
+ network = g_hash_table_lookup (priv->networks, id);
+ if (network != NULL)
+ {
+ network->dropped = TRUE;
+ network->user_defined = TRUE;
+ }
+ xmlFree (id);
+ return;
+ }
+
+ if (!xmlHasProp (node, "name"))
+ return;
+
+ name = xmlGetProp (node, "name");
+ network = empathy_irc_network_new (name);
+
+ if (xmlHasProp (node, "network_charset"))
+ {
+ gchar *charset;
+ charset = xmlGetProp (node, "network_charset");
+ g_object_set (network, "charset", charset, NULL);
+ xmlFree (charset);
+ }
+
+ add_network (self, network, id);
+ DEBUG ("add network %s (id %s)", name, id);
+
+ for (child = node->children; child; child = child->next)
+ {
+ gchar *tag;
+
+ tag = (gchar *) child->name;
+ str = (gchar *) xmlNodeGetContent (child);
+
+ if (!str)
+ continue;
+
+ if (strcmp (tag, "servers") == 0)
+ {
+ irc_network_manager_parse_irc_server (network, child);
+ }
+
+ xmlFree (str);
+ }
+
+ network->user_defined = user_defined;
+ g_object_unref (network);
+ xmlFree (name);
+ xmlFree (id);
+}
+
+static gboolean
+irc_network_manager_file_parse (EmpathyIrcNetworkManager *self,
+ const gchar *filename,
+ gboolean user_defined)
+{
+ EmpathyIrcNetworkManagerPriv *priv;
+ xmlParserCtxtPtr ctxt;
+ xmlDocPtr doc;
+ xmlNodePtr networks;
+ xmlNodePtr node;
+
+ priv = GET_PRIV (self);
+
+ DEBUG ("Attempting to parse file:'%s'...", filename);
+
+ ctxt = xmlNewParserCtxt ();
+
+ /* Parse and validate the file. */
+ doc = xmlCtxtReadFile (ctxt, filename, NULL, 0);
+ if (!doc)
+ {
+ g_warning ("Failed to parse file:'%s'", filename);
+ xmlFreeParserCtxt (ctxt);
+ return FALSE;
+ }
+
+ if (!empathy_xml_validate (doc, IRC_NETWORKS_DTD_FILENAME)) {
+ g_warning ("Failed to validate file:'%s'", filename);
+ xmlFreeDoc (doc);
+ xmlFreeParserCtxt (ctxt);
+ return FALSE;
+ }
+
+ /* The root node, networks. */
+ networks = xmlDocGetRootElement (doc);
+
+ for (node = networks->children; node; node = node->next)
+ {
+ irc_network_manager_parse_irc_network (self, node, user_defined);
+ }
+
+ xmlFreeDoc(doc);
+ xmlFreeParserCtxt (ctxt);
+
+ return TRUE;
+}
+
+static void
+write_network_to_xml (const gchar *id,
+ EmpathyIrcNetwork *network,
+ xmlNodePtr root)
+{
+ xmlNodePtr network_node, servers_node;
+ GSList *servers, *l;
+ gchar *name, *charset;
+
+ if (!network->user_defined)
+ /* no need to write this network to the XML */
+ return;
+
+ network_node = xmlNewChild (root, NULL, "network", NULL);
+ xmlNewProp (network_node, "id", id);
+
+ if (network->dropped)
+ {
+ xmlNewProp (network_node, "dropped", "1");
+ return;
+ }
+
+ g_object_get (network,
+ "name", &name,
+ "charset", &charset,
+ NULL);
+ xmlNewProp (network_node, "name", name);
+ xmlNewProp (network_node, "network_charset", charset);
+ g_free (name);
+ g_free (charset);
+
+ servers = empathy_irc_network_get_servers (network);
+
+ servers_node = xmlNewChild (network_node, NULL, "servers", NULL);
+ for (l = servers; l != NULL; l = g_slist_next (l))
+ {
+ EmpathyIrcServer *server;
+ xmlNodePtr server_node;
+ gchar *address, *tmp;
+ guint port;
+ gboolean ssl;
+
+ server = l->data;
+
+ server_node = xmlNewChild (servers_node, NULL, "server", NULL);
+
+ g_object_get (server,
+ "address", &address,
+ "port", &port,
+ "ssl", &ssl,
+ NULL);
+
+ xmlNewProp (server_node, "address", address);
+
+ tmp = g_strdup_printf ("%u", port);
+ xmlNewProp (server_node, "port", tmp);
+ g_free (tmp);
+
+ xmlNewProp (server_node, "ssl", ssl ? "TRUE": "FALSE");
+
+ g_free (address);
+ }
+
+ /* free the list */
+ g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
+ g_slist_free (servers);
+}
+
+static gboolean
+irc_network_manager_file_save (EmpathyIrcNetworkManager *self)
+{
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+ xmlDocPtr doc;
+ xmlNodePtr root;
+
+ if (priv->user_file == NULL)
+ {
+ DEBUG ("can't save: no user file defined");
+ return FALSE;
+ }
+
+ DEBUG ("Saving IRC networks");
+
+ doc = xmlNewDoc ("1.0");
+ root = xmlNewNode (NULL, "networks");
+ xmlDocSetRootElement (doc, root);
+
+ g_hash_table_foreach (priv->networks, (GHFunc) write_network_to_xml, root);
+
+ /* Make sure the XML is indented properly */
+ xmlIndentTreeOutput = 1;
+
+ xmlSaveFormatFileEnc (priv->user_file, doc, "utf-8", 1);
+ xmlFreeDoc (doc);
+
+ xmlCleanupParser ();
+ xmlMemoryDump ();
+
+ priv->have_to_save = FALSE;
+
+ return TRUE;
+}
+
+static gboolean
+find_network_by_address (const gchar *id,
+ EmpathyIrcNetwork *network,
+ const gchar *address)
+{
+ GSList *servers, *l;
+ gboolean found = FALSE;
+
+ if (network->dropped)
+ return FALSE;
+
+ servers = empathy_irc_network_get_servers (network);
+
+ for (l = servers; l != NULL && !found; l = g_slist_next (l))
+ {
+ EmpathyIrcServer *server = l->data;
+ gchar *_address;
+
+ g_object_get (server, "address", &_address, NULL);
+ found = (_address != NULL && strcmp (address, _address) == 0);
+
+ g_free (_address);
+ }
+
+ g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
+ g_slist_free (servers);
+
+ return found;
+}
+
+/**
+ * empathy_irc_network_manager_find_network_by_address:
+ * @manager: an #EmpathyIrcNetworkManager
+ * @address: the server address to look for
+ *
+ * Find the #EmpathyIrcNetwork which owns an #EmpathyIrcServer
+ * that has the given address.
+ *
+ * Returns: the found #EmpathyIrcNetwork, or %NULL if not found.
+ */
+EmpathyIrcNetwork *
+empathy_irc_network_manager_find_network_by_address (
+ EmpathyIrcNetworkManager *self,
+ const gchar *address)
+{
+ EmpathyIrcNetworkManagerPriv *priv = GET_PRIV (self);
+ EmpathyIrcNetwork *network;
+
+ g_return_val_if_fail (address != NULL, NULL);
+
+ network = g_hash_table_find (priv->networks,
+ (GHRFunc) find_network_by_address, (gchar *) address);
+
+ return network;
+}
diff --git a/trunk/libempathy/empathy-irc-network-manager.h b/trunk/libempathy/empathy-irc-network-manager.h
new file mode 100644
index 000000000..1ec862e91
--- /dev/null
+++ b/trunk/libempathy/empathy-irc-network-manager.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2007-2008 Guillaume Desmottes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <gdesmott@gnome.org>
+ */
+
+#ifndef __EMPATHY_IRC_NETWORK_MANAGER_H__
+#define __EMPATHY_IRC_NETWORK_MANAGER_H__
+
+#include <glib-object.h>
+
+#include "empathy-irc-network.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EmpathyIrcNetworkManager EmpathyIrcNetworkManager;
+typedef struct _EmpathyIrcNetworkManagerClass EmpathyIrcNetworkManagerClass;
+
+struct _EmpathyIrcNetworkManager
+{
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyIrcNetworkManagerClass
+{
+ GObjectClass parent_class;
+};
+
+GType
+empathy_irc_network_manager_get_type (void);
+
+/* TYPE MACROS */
+#define EMPATHY_TYPE_IRC_NETWORK_MANAGER \
+ (empathy_irc_network_manager_get_type ())
+#define EMPATHY_IRC_NETWORK_MANAGER(o) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_IRC_NETWORK_MANAGER, \
+ EmpathyIrcNetworkManager))
+#define EMPATHY_IRC_NETWORK_MANAGER_CLASS(k) \
+ (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_IRC_NETWORK_MANAGER, \
+ EmpathyIrcNetworkManagerClass))
+#define EMPATHY_IS_IRC_NETWORK_MANAGER(o) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_IRC_NETWORK_MANAGER))
+#define EMPATHY_IS_IRC_NETWORK_MANAGER_CLASS(k) \
+ (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_IRC_NETWORK_MANAGER))
+#define EMPATHY_IRC_NETWORK_MANAGER_GET_CLASS(o) \
+ (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_IRC_NETWORK_MANAGER, \
+ EmpathyIrcNetworkManagerClass))
+
+EmpathyIrcNetworkManager * empathy_irc_network_manager_new (
+ const gchar *global_file, const gchar *user_file);
+
+void empathy_irc_network_manager_add (EmpathyIrcNetworkManager *manager,
+ EmpathyIrcNetwork *network);
+
+void empathy_irc_network_manager_remove (EmpathyIrcNetworkManager *manager,
+ EmpathyIrcNetwork *network);
+
+GSList * empathy_irc_network_manager_get_networks (
+ EmpathyIrcNetworkManager *manager);
+
+EmpathyIrcNetwork * empathy_irc_network_manager_find_network_by_address (
+ EmpathyIrcNetworkManager *manager, const gchar *address);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_IRC_NETWORK_MANAGER_H__ */
diff --git a/trunk/libempathy/empathy-irc-network.c b/trunk/libempathy/empathy-irc-network.c
new file mode 100644
index 000000000..17abd36e9
--- /dev/null
+++ b/trunk/libempathy/empathy-irc-network.c
@@ -0,0 +1,361 @@
+/*
+ * Copyright (C) 2007 Guillaume Desmottes
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Guillaume Desmottes <gdesmott@gnome.org>
+ */
+
+#include <config.h>
+#include <string.h>
+#include <stdlib.h>
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <telepathy-glib/util.h>
+
+#include "empathy-marshal.h"
+#include "empathy-irc-network.h"
+#include "empathy-utils.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIrcNetwork)
+typedef struct
+{
+ gchar *name;
+ gchar *charset;
+ GSList *servers;
+} EmpathyIrcNetworkPriv;
+
+/* properties */
+enum
+{
+ PROP_NAME = 1,
+ PROP_CHARSET,
+ LAST_PROPERTY
+};
+
+/* signals */
+enum
+{
+ MODIFIED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = {0};
+
+G_DEFINE_TYPE (EmpathyIrcNetwork, empathy_irc_network, G_TYPE_OBJECT);
+
+static void
+server_modified_cb (EmpathyIrcServer *server,
+ EmpathyIrcNetwork *self)
+{
+ g_signal_emit (self, signals[MODIFIED], 0);
+}
+
+static void
+empathy_irc_network_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyIrcNetwork *self = EMPATHY_IRC_NETWORK (object);
+ EmpathyIrcNetworkPriv *priv = GET_PRIV (self);
+
+ switch (property_id)
+ {
+ case PROP_NAME:
+ g_value_set_string (value, priv->name);
+ break;
+ case PROP_CHARSET:
+ g_value_set_string (value, priv->charset);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+empathy_irc_network_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyIrcNetwork *self = EMPATHY_IRC_NETWORK (object);
+ EmpathyIrcNetworkPriv *priv = GET_PRIV (self);
+
+ switch (property_id)
+ {
+ case PROP_NAME:
+ if (tp_strdiff (priv->name, g_value_get_string (value)))
+ {
+ g_free (priv->name);
+ priv->name = g_value_dup_string (value);
+ g_signal_emit (object, signals[MODIFIED], 0);
+ }
+ break;
+ case PROP_CHARSET:
+ if (tp_strdiff (priv->charset, g_value_get_string (value)))
+ {
+ g_free (priv->charset);
+ priv->charset = g_value_dup_string (value);
+ g_signal_emit (object, signals[MODIFIED], 0);
+ }
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+empathy_irc_network_dispose (GObject *object)
+{
+ EmpathyIrcNetwork *self = EMPATHY_IRC_NETWORK (object);
+ EmpathyIrcNetworkPriv *priv = GET_PRIV (self);
+ GSList *l;
+
+ for (l = priv->servers; l != NULL; l = g_slist_next (l))
+ {
+ g_signal_handlers_disconnect_by_func (l->data,
+ G_CALLBACK (server_modified_cb), self);
+ g_object_unref (l->data);
+ }
+
+ G_OBJECT_CLASS (empathy_irc_network_parent_class)->dispose (object);
+}
+
+static void
+empathy_irc_network_finalize (GObject *object)
+{
+ EmpathyIrcNetwork *self = EMPATHY_IRC_NETWORK (object);
+ EmpathyIrcNetworkPriv *priv = GET_PRIV (self);
+
+ g_slist_free (priv->servers);
+ g_free (priv->name);
+ g_free (priv->charset);
+
+ G_OBJECT_CLASS (empathy_irc_network_parent_class)->finalize (object);
+}
+
+static void
+empathy_irc_network_init (EmpathyIrcNetwork *self)
+{
+ EmpathyIrcNetworkPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+ EMPATHY_TYPE_IRC_NETWORK, EmpathyIrcNetworkPriv);
+
+ self->priv = priv;
+
+ priv->servers = NULL;
+
+ self->user_defined = TRUE;
+ self->dropped = FALSE;
+}
+
+static void
+empathy_irc_network_class_init (EmpathyIrcNetworkClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GParamSpec *param_spec;
+
+ object_class->get_property = empathy_irc_network_get_property;
+ object_class->set_property = empathy_irc_network_set_property;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyIrcNetworkPriv));
+
+ object_class->dispose = empathy_irc_network_dispose;
+ object_class->finalize = empathy_irc_network_finalize;
+
+ param_spec = g_param_spec_string (
+ "name",
+ "Network name",
+ "The displayed name of this network",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property (object_class, PROP_NAME, param_spec);
+
+ param_spec = g_param_spec_string (
+ "charset",
+ "Charset",
+ "The charset to use on this network",
+ "UTF-8",
+ G_PARAM_CONSTRUCT |
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property (object_class, PROP_CHARSET, param_spec);
+
+ /**
+ * EmpathyIrcNetwork::modified:
+ * @network: the object that received the signal
+ *
+ * Emitted when either a property or a server of the network is modified.
+ *
+ */
+ signals[MODIFIED] = g_signal_new (
+ "modified",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+/**
+ * empathy_irc_network_new:
+ * @name: the name of the network
+ *
+ * Creates a new #EmpathyIrcNetwork.
+ *
+ * Returns: a new #EmpathyIrcNetwork
+ */
+EmpathyIrcNetwork *
+empathy_irc_network_new (const gchar *name)
+{
+ return g_object_new (EMPATHY_TYPE_IRC_NETWORK,
+ "name", name,
+ NULL);
+}
+
+/**
+ * empathy_irc_network_get_servers:
+ * @network: an #EmpathyIrcNetwork
+ *
+ * Get the list of #EmpathyIrcServer that belongs to this network.
+ * These servers are sorted according their priority.
+ * So the first one will be the first used when trying to connect to
+ * the network.
+ *
+ * Returns: a new #GSList of refed #EmpathyIrcServer.
+ */
+GSList *
+empathy_irc_network_get_servers (EmpathyIrcNetwork *self)
+{
+ EmpathyIrcNetworkPriv *priv;
+ GSList *servers = NULL, *l;
+
+ g_return_val_if_fail (EMPATHY_IS_IRC_NETWORK (self), NULL);
+ priv = GET_PRIV (self);
+
+ for (l = priv->servers; l != NULL; l = g_slist_next (l))
+ {
+ servers = g_slist_prepend (servers, g_object_ref (l->data));
+ }
+
+ return g_slist_reverse (servers);
+}
+
+/**
+ * empathy_irc_network_append_server:
+ * @network: an #EmpathyIrcNetwork
+ * @server: the #EmpathyIrcServer to add
+ *
+ * Add an #EmpathyIrcServer to the given #EmpathyIrcNetwork. The server
+ * is added at the last position in network's servers list.
+ *
+ */
+void
+empathy_irc_network_append_server (EmpathyIrcNetwork *self,
+ EmpathyIrcServer *server)
+{
+ EmpathyIrcNetworkPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_IRC_NETWORK (self));
+ g_return_if_fail (server != NULL && EMPATHY_IS_IRC_SERVER (server));
+
+ priv = GET_PRIV (self);
+
+ g_return_if_fail (g_slist_find (priv->servers, server) == NULL);
+
+ priv->servers = g_slist_append (priv->servers, g_object_ref (server));
+
+ g_signal_connect (server, "modified", G_CALLBACK (server_modified_cb), self);
+
+ g_signal_emit (self, signals[MODIFIED], 0);
+}
+
+/**
+ * empathy_irc_network_remove_server:
+ * @network: an #EmpathyIrcNetwork
+ * @server: the #EmpathyIrcServer to remove
+ *
+ * Remove an #EmpathyIrcServer from the servers list of the
+ * given #EmpathyIrcNetwork.
+ *
+ */
+void
+empathy_irc_network_remove_server (EmpathyIrcNetwork *self,
+ EmpathyIrcServer *server)
+{
+ EmpathyIrcNetworkPriv *priv;
+ GSList *l;
+
+ g_return_if_fail (EMPATHY_IS_IRC_NETWORK (self));
+ g_return_if_fail (server != NULL && EMPATHY_IS_IRC_SERVER (server));
+
+ priv = GET_PRIV (self);
+
+ l = g_slist_find (priv->servers, server);
+ if (l == NULL)
+ return;
+
+ g_object_unref (l->data);
+ priv->servers = g_slist_delete_link (priv->servers, l);
+ g_signal_handlers_disconnect_by_func (server, G_CALLBACK (server_modified_cb),
+ self);
+
+ g_signal_emit (self, signals[MODIFIED], 0);
+}
+
+/**
+ * empathy_irc_network_set_server_position:
+ * @network: an #EmpathyIrcNetwork
+ * @server: the #EmpathyIrcServer to move
+ * @pos: the position to move the server. If this is negative, or is larger than
+ * the number of servers in the list, the server is moved to the end of the
+ * list.
+ *
+ * Move an #EmpathyIrcServer in the servers list of the given
+ * #EmpathyIrcNetwork.
+ *
+ */
+void
+empathy_irc_network_set_server_position (EmpathyIrcNetwork *self,
+ EmpathyIrcServer *server,
+ gint pos)
+{
+ EmpathyIrcNetworkPriv *priv;
+ GSList *l;
+
+ g_return_if_fail (EMPATHY_IS_IRC_NETWORK (self));
+ g_return_if_fail (server != NULL && EMPATHY_IS_IRC_SERVER (server));
+
+ priv = GET_PRIV (self);
+
+ l = g_slist_find (priv->servers, server);
+ if (l == NULL)
+ return;
+
+ priv->servers = g_slist_delete_link (priv->servers, l);
+ priv->servers = g_slist_insert (priv->servers, server, pos);
+
+ g_signal_emit (self, signals[MODIFIED], 0);
+}
diff --git a/trunk/libempathy/empathy-irc-network.h b/trunk/libempathy/empathy-irc-network.h
new file mode 100644
index 000000000..b10b2769e
--- /dev/null
+++ b/trunk/libempathy/empathy-irc-network.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2007-2008 Guillaume Desmottes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <gdesmott@gnome.org>
+ */
+
+#ifndef __EMPATHY_IRC_NETWORK_H__
+#define __EMPATHY_IRC_NETWORK_H__
+
+#include <glib-object.h>
+
+#include "empathy-irc-server.h"
+
+G_BEGIN_DECLS
+
+typedef struct _EmpathyIrcNetwork EmpathyIrcNetwork;
+typedef struct _EmpathyIrcNetworkClass EmpathyIrcNetworkClass;
+
+struct _EmpathyIrcNetwork
+{
+ GObject parent;
+ gpointer priv;
+
+ gboolean user_defined;
+ gboolean dropped;
+};
+
+struct _EmpathyIrcNetworkClass
+{
+ GObjectClass parent_class;
+};
+
+GType empathy_irc_network_get_type (void);
+
+/* TYPE MACROS */
+#define EMPATHY_TYPE_IRC_NETWORK (empathy_irc_network_get_type ())
+#define EMPATHY_IRC_NETWORK(o) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_IRC_NETWORK, \
+ EmpathyIrcNetwork))
+#define EMPATHY_IRC_NETWORK_CLASS(k) \
+ (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_IRC_NETWORK,\
+ EmpathyIrcNetworkClass))
+#define EMPATHY_IS_IRC_NETWORK(o) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_IRC_NETWORK))
+#define EMPATHY_IS_IRC_NETWORK_CLASS(k) \
+ (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_IRC_NETWORK))
+#define EMPATHY_IRC_NETWORK_GET_CLASS(o) \
+ (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_IRC_NETWORK, \
+ EmpathyIrcNetworkClass))
+
+EmpathyIrcNetwork * empathy_irc_network_new (const gchar *name);
+
+GSList * empathy_irc_network_get_servers (EmpathyIrcNetwork *network);
+
+void empathy_irc_network_append_server (EmpathyIrcNetwork *network,
+ EmpathyIrcServer *server);
+
+void empathy_irc_network_remove_server (EmpathyIrcNetwork *network,
+ EmpathyIrcServer *server);
+
+void empathy_irc_network_set_server_position (EmpathyIrcNetwork *network,
+ EmpathyIrcServer *server, gint pos);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_IRC_NETWORK_H__ */
diff --git a/trunk/libempathy/empathy-irc-networks.dtd b/trunk/libempathy/empathy-irc-networks.dtd
new file mode 100644
index 000000000..692e613c1
--- /dev/null
+++ b/trunk/libempathy/empathy-irc-networks.dtd
@@ -0,0 +1,18 @@
+<!--
+ DTD for Empathys irc networks.
+ by Xavier Claessens <xclaesse@gmail.com>
+-->
+
+
+<!ELEMENT networks (network*)>
+<!ELEMENT network (servers*)>
+<!ATTLIST network id ID #REQUIRED>
+<!ATTLIST network name CDATA #IMPLIED>
+<!ATTLIST network network_charset CDATA #IMPLIED>
+<!ATTLIST network dropped CDATA #IMPLIED>
+
+<!ELEMENT servers (server*)>
+<!ELEMENT server EMPTY>
+<!ATTLIST server address CDATA #REQUIRED>
+<!ATTLIST server port CDATA #REQUIRED>
+<!ATTLIST server ssl CDATA #REQUIRED>
diff --git a/trunk/libempathy/empathy-irc-server.c b/trunk/libempathy/empathy-irc-server.c
new file mode 100644
index 000000000..482214532
--- /dev/null
+++ b/trunk/libempathy/empathy-irc-server.c
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2007-2008 Guillaume Desmottes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <gdesmott@gnome.org>
+ */
+
+#include <config.h>
+#include <string.h>
+#include <stdlib.h>
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <telepathy-glib/util.h>
+
+#include "empathy-marshal.h"
+#include "empathy-irc-server.h"
+#include "empathy-utils.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIrcServer)
+typedef struct
+{
+ gchar *address;
+ gint port;
+ gboolean ssl;
+} EmpathyIrcServerPriv;
+
+/* properties */
+enum
+{
+ PROP_ADDRESS = 1,
+ PROP_PORT,
+ PROP_SSL,
+ LAST_PROPERTY
+};
+
+/* signals */
+enum
+{
+ MODIFIED,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = {0};
+
+G_DEFINE_TYPE (EmpathyIrcServer, empathy_irc_server, G_TYPE_OBJECT);
+
+static void
+empathy_irc_server_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyIrcServer *self = EMPATHY_IRC_SERVER (object);
+ EmpathyIrcServerPriv *priv = GET_PRIV (self);
+
+ switch (property_id)
+ {
+ case PROP_ADDRESS:
+ g_value_set_string (value, priv->address);
+ break;
+ case PROP_PORT:
+ g_value_set_uint (value, priv->port);
+ break;
+ case PROP_SSL:
+ g_value_set_boolean (value, priv->ssl);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+empathy_irc_server_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyIrcServer *self = EMPATHY_IRC_SERVER (object);
+ EmpathyIrcServerPriv *priv = GET_PRIV (self);
+
+ switch (property_id)
+ {
+ case PROP_ADDRESS:
+ if (tp_strdiff (priv->address, g_value_get_string (value)))
+ {
+ g_free (priv->address);
+ priv->address = g_value_dup_string (value);
+ g_signal_emit (object, signals[MODIFIED], 0);
+ }
+ break;
+ case PROP_PORT:
+ if (priv->port != g_value_get_uint (value))
+ {
+ priv->port = g_value_get_uint (value);
+ g_signal_emit (object, signals[MODIFIED], 0);
+ }
+ break;
+ case PROP_SSL:
+ if (priv->ssl != g_value_get_boolean (value))
+ {
+ priv->ssl = g_value_get_boolean (value);
+ g_signal_emit (object, signals[MODIFIED], 0);
+ }
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+empathy_irc_server_finalize (GObject *object)
+{
+ EmpathyIrcServer *self = EMPATHY_IRC_SERVER (object);
+ EmpathyIrcServerPriv *priv = GET_PRIV (self);
+
+ g_free (priv->address);
+
+ G_OBJECT_CLASS (empathy_irc_server_parent_class)->finalize (object);
+}
+
+static void
+empathy_irc_server_init (EmpathyIrcServer *self)
+{
+ EmpathyIrcServerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
+ EMPATHY_TYPE_IRC_SERVER, EmpathyIrcServerPriv);
+
+ self->priv = priv;
+}
+
+static void
+empathy_irc_server_class_init (EmpathyIrcServerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GParamSpec *param_spec;
+
+ object_class->get_property = empathy_irc_server_get_property;
+ object_class->set_property = empathy_irc_server_set_property;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyIrcServerPriv));
+
+ object_class->finalize = empathy_irc_server_finalize;
+
+ param_spec = g_param_spec_string (
+ "address",
+ "Server address",
+ "The address of this server",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property (object_class, PROP_ADDRESS, param_spec);
+
+ param_spec = g_param_spec_uint (
+ "port",
+ "Server port",
+ "The port to use to connect on this server",
+ 1, G_MAXUINT16, 6667,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property (object_class, PROP_PORT, param_spec);
+
+ param_spec = g_param_spec_boolean (
+ "ssl",
+ "SSL",
+ "If this server needs SSL connection",
+ FALSE,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB);
+ g_object_class_install_property (object_class, PROP_SSL, param_spec);
+
+ /**
+ * EmpathyIrcServer::modified:
+ * @server: the object that received the signal
+ *
+ * Emitted when a property of the server is modified.
+ *
+ */
+ signals[MODIFIED] = g_signal_new (
+ "modified",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+}
+
+/**
+ * empathy_irc_server_new:
+ * @address: the address
+ * @port: the port
+ * @ssl: %TRUE if the server needs a SSL connection
+ *
+ * Creates a new #EmpathyIrcServer
+ *
+ * Returns: a new #EmpathyIrcServer
+ */
+EmpathyIrcServer *
+empathy_irc_server_new (const gchar *address,
+ guint port,
+ gboolean ssl)
+{
+ return g_object_new (EMPATHY_TYPE_IRC_SERVER,
+ "address", address,
+ "port", port,
+ "ssl", ssl,
+ NULL);
+}
diff --git a/trunk/libempathy/empathy-irc-server.h b/trunk/libempathy/empathy-irc-server.h
new file mode 100644
index 000000000..d72af64ac
--- /dev/null
+++ b/trunk/libempathy/empathy-irc-server.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2007-2008 Guillaume Desmottes
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <gdesmott@gnome.org>
+ */
+
+#ifndef __EMPATHY_IRC_SERVER_H__
+#define __EMPATHY_IRC_SERVER_H__
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EmpathyIrcServer EmpathyIrcServer;
+typedef struct _EmpathyIrcServerClass EmpathyIrcServerClass;
+
+struct _EmpathyIrcServer
+{
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyIrcServerClass
+{
+ GObjectClass parent_class;
+};
+
+GType empathy_irc_server_get_type (void);
+
+/* TYPE MACROS */
+#define EMPATHY_TYPE_IRC_SERVER (empathy_irc_server_get_type ())
+#define EMPATHY_IRC_SERVER(o) \
+ (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_IRC_SERVER, EmpathyIrcServer))
+#define EMPATHY_IRC_SERVER_CLASS(k) \
+ (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_IRC_SERVER, \
+ EmpathyIrcServerClass))
+#define EMPATHY_IS_IRC_SERVER(o) \
+ (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_IRC_SERVER))
+#define EMPATHY_IS_IRC_SERVER_CLASS(k) \
+ (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_IRC_SERVER))
+#define EMPATHY_IRC_SERVER_GET_CLASS(o) \
+ (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_IRC_SERVER,\
+ EmpathyIrcServerClass))
+
+EmpathyIrcServer * empathy_irc_server_new (const gchar *address, guint port,
+ gboolean ssl);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_IRC_SERVER_H__ */
diff --git a/trunk/libempathy/empathy-log-manager.c b/trunk/libempathy/empathy-log-manager.c
new file mode 100644
index 000000000..1115e43c3
--- /dev/null
+++ b/trunk/libempathy/empathy-log-manager.c
@@ -0,0 +1,796 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <glib/gstdio.h>
+
+#include "empathy-log-manager.h"
+#include "empathy-contact.h"
+#include "empathy-time.h"
+#include "empathy-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include "empathy-debug.h"
+
+#define LOG_DIR_CREATE_MODE (S_IRUSR | S_IWUSR | S_IXUSR)
+#define LOG_FILE_CREATE_MODE (S_IRUSR | S_IWUSR)
+#define LOG_DIR_CHATROOMS "chatrooms"
+#define LOG_FILENAME_SUFFIX ".log"
+#define LOG_TIME_FORMAT_FULL "%Y%m%dT%H:%M:%S"
+#define LOG_TIME_FORMAT "%Y%m%d"
+#define LOG_HEADER \
+ "<?xml version='1.0' encoding='utf-8'?>\n" \
+ "<?xml-stylesheet type=\"text/xsl\" href=\"empathy-log.xsl\"?>\n" \
+ "<log>\n"
+
+#define LOG_FOOTER \
+ "</log>\n"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyLogManager)
+typedef struct {
+ gchar *basedir;
+} EmpathyLogManagerPriv;
+
+static void log_manager_finalize (GObject *object);
+static const gchar * log_manager_get_basedir (EmpathyLogManager *manager);
+static GList * log_manager_get_all_files (EmpathyLogManager *manager,
+ const gchar *dir);
+static GList * log_manager_get_chats (EmpathyLogManager *manager,
+ const gchar *dir,
+ gboolean is_chatroom);
+static gchar * log_manager_get_dir (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom);
+static gchar * log_manager_get_filename (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom);
+static gchar * log_manager_get_filename_for_date (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom,
+ const gchar *date);
+static gchar * log_manager_get_timestamp_filename (void);
+static gchar * log_manager_get_timestamp_from_message (EmpathyMessage *message);
+static EmpathyLogSearchHit *log_manager_search_hit_new (EmpathyLogManager *manager,
+ const gchar *filename);
+static void log_manager_search_hit_free (EmpathyLogSearchHit *hit);
+
+G_DEFINE_TYPE (EmpathyLogManager, empathy_log_manager, G_TYPE_OBJECT);
+
+static void
+empathy_log_manager_class_init (EmpathyLogManagerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = log_manager_finalize;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyLogManagerPriv));
+}
+
+static void
+empathy_log_manager_init (EmpathyLogManager *manager)
+{
+ EmpathyLogManagerPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
+ EMPATHY_TYPE_LOG_MANAGER, EmpathyLogManagerPriv);
+
+ manager->priv = priv;
+}
+
+static void
+log_manager_finalize (GObject *object)
+{
+ EmpathyLogManagerPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ g_free (priv->basedir);
+}
+
+EmpathyLogManager *
+empathy_log_manager_new (void)
+{
+ static EmpathyLogManager *manager = NULL;
+
+ if (!manager) {
+ manager = g_object_new (EMPATHY_TYPE_LOG_MANAGER, NULL);
+ g_object_add_weak_pointer (G_OBJECT (manager), (gpointer) &manager);
+ } else {
+ g_object_ref (manager);
+ }
+
+ return manager;
+}
+
+void
+empathy_log_manager_add_message (EmpathyLogManager *manager,
+ const gchar *chat_id,
+ gboolean chatroom,
+ EmpathyMessage *message)
+{
+ FILE *file;
+ McAccount *account;
+ EmpathyContact *sender;
+ const gchar *body_str;
+ const gchar *str;
+ EmpathyAvatar *avatar;
+ gchar *avatar_token = NULL;
+ gchar *filename;
+ gchar *basedir;
+ gchar *body;
+ gchar *timestamp;
+ gchar *contact_name;
+ gchar *contact_id;
+ TpChannelTextMessageType msg_type;
+
+ g_return_if_fail (EMPATHY_IS_LOG_MANAGER (manager));
+ g_return_if_fail (chat_id != NULL);
+ g_return_if_fail (EMPATHY_IS_MESSAGE (message));
+
+ sender = empathy_message_get_sender (message);
+ account = empathy_contact_get_account (sender);
+ body_str = empathy_message_get_body (message);
+ msg_type = empathy_message_get_tptype (message);
+
+ if (G_STR_EMPTY (body_str)) {
+ return;
+ }
+
+ filename = log_manager_get_filename (manager, account, chat_id, chatroom);
+ basedir = g_path_get_dirname (filename);
+ if (!g_file_test (basedir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
+ DEBUG ("Creating directory:'%s'", basedir);
+
+ g_mkdir_with_parents (basedir, LOG_DIR_CREATE_MODE);
+ }
+ g_free (basedir);
+
+ DEBUG ("Adding message: '%s' to file: '%s'", body_str, filename);
+
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
+ file = g_fopen (filename, "w+");
+ if (file) {
+ g_fprintf (file, LOG_HEADER);
+ }
+ g_chmod (filename, LOG_FILE_CREATE_MODE);
+ } else {
+ file = g_fopen (filename, "r+");
+ if (file) {
+ fseek (file, - strlen (LOG_FOOTER), SEEK_END);
+ }
+ }
+
+ body = g_markup_escape_text (body_str, -1);
+ timestamp = log_manager_get_timestamp_from_message (message);
+
+ str = empathy_contact_get_name (sender);
+ contact_name = g_markup_escape_text (str, -1);
+
+ str = empathy_contact_get_id (sender);
+ contact_id = g_markup_escape_text (str, -1);
+
+ avatar = empathy_contact_get_avatar (sender);
+ if (avatar) {
+ avatar_token = g_markup_escape_text (avatar->token, -1);
+ }
+
+ g_fprintf (file,
+ "<message time='%s' id='%s' name='%s' token='%s' isuser='%s' type='%s'>%s</message>\n" LOG_FOOTER,
+ timestamp,
+ contact_id,
+ contact_name,
+ avatar_token ? avatar_token : "",
+ empathy_contact_is_user (sender) ? "true" : "false",
+ empathy_message_type_to_str (msg_type),
+ body);
+
+ fclose (file);
+ g_free (filename);
+ g_free (contact_id);
+ g_free (contact_name);
+ g_free (timestamp);
+ g_free (body);
+ g_free (avatar_token);
+}
+
+gboolean
+empathy_log_manager_exists (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom)
+{
+ gchar *dir;
+ gboolean exists;
+
+ dir = log_manager_get_dir (manager, account, chat_id, chatroom);
+ exists = g_file_test (dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR);
+ g_free (dir);
+
+ return exists;
+}
+
+GList *
+empathy_log_manager_get_dates (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom)
+{
+ GList *dates = NULL;
+ gchar *date;
+ gchar *directory;
+ GDir *dir;
+ const gchar *filename;
+ const gchar *p;
+
+ g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL);
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+ g_return_val_if_fail (chat_id != NULL, NULL);
+
+ directory = log_manager_get_dir (manager, account, chat_id, chatroom);
+ dir = g_dir_open (directory, 0, NULL);
+ if (!dir) {
+ DEBUG ("Could not open directory:'%s'", directory);
+ g_free (directory);
+ return NULL;
+ }
+
+ DEBUG ("Collating a list of dates in:'%s'", directory);
+
+ while ((filename = g_dir_read_name (dir)) != NULL) {
+ if (!g_str_has_suffix (filename, LOG_FILENAME_SUFFIX)) {
+ continue;
+ }
+
+ p = strstr (filename, LOG_FILENAME_SUFFIX);
+ date = g_strndup (filename, p - filename);
+ if (!date) {
+ continue;
+ }
+
+ if (!g_regex_match_simple ("\\d{8}", date, 0, 0)) {
+ continue;
+ }
+
+ dates = g_list_insert_sorted (dates, date, (GCompareFunc) strcmp);
+ }
+
+ g_free (directory);
+ g_dir_close (dir);
+
+ DEBUG ("Parsed %d dates", g_list_length (dates));
+
+ return dates;
+}
+
+GList *
+empathy_log_manager_get_messages_for_file (EmpathyLogManager *manager,
+ const gchar *filename)
+{
+ GList *messages = NULL;
+ xmlParserCtxtPtr ctxt;
+ xmlDocPtr doc;
+ xmlNodePtr log_node;
+ xmlNodePtr node;
+ EmpathyLogSearchHit *hit;
+ McAccount *account;
+
+ g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL);
+ g_return_val_if_fail (filename != NULL, NULL);
+
+ DEBUG ("Attempting to parse filename:'%s'...", filename);
+
+ if (!g_file_test (filename, G_FILE_TEST_EXISTS)) {
+ DEBUG ("Filename:'%s' does not exist", filename);
+ return NULL;
+ }
+
+ /* Get the account from the filename */
+ hit = log_manager_search_hit_new (manager, filename);
+ account = g_object_ref (hit->account);
+ log_manager_search_hit_free (hit);
+
+ /* Create parser. */
+ ctxt = xmlNewParserCtxt ();
+
+ /* Parse and validate the file. */
+ doc = xmlCtxtReadFile (ctxt, filename, NULL, 0);
+ if (!doc) {
+ g_warning ("Failed to parse file:'%s'", filename);
+ xmlFreeParserCtxt (ctxt);
+ return NULL;
+ }
+
+ /* The root node, presets. */
+ log_node = xmlDocGetRootElement (doc);
+ if (!log_node) {
+ xmlFreeDoc (doc);
+ xmlFreeParserCtxt (ctxt);
+ return NULL;
+ }
+
+ /* Now get the messages. */
+ for (node = log_node->children; node; node = node->next) {
+ EmpathyMessage *message;
+ EmpathyContact *sender;
+ EmpathyAvatar *avatar = NULL;
+ gchar *time;
+ time_t t;
+ gchar *sender_id;
+ gchar *sender_name;
+ gchar *sender_avatar_token;
+ gchar *body;
+ gchar *is_user_str;
+ gboolean is_user = FALSE;
+ gchar *msg_type_str;
+ TpChannelTextMessageType msg_type = TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL;
+
+ if (strcmp (node->name, "message") != 0) {
+ continue;
+ }
+
+ body = xmlNodeGetContent (node);
+ time = xmlGetProp (node, "time");
+ sender_id = xmlGetProp (node, "id");
+ sender_name = xmlGetProp (node, "name");
+ sender_avatar_token = xmlGetProp (node, "token");
+ is_user_str = xmlGetProp (node, "isuser");
+ msg_type_str = xmlGetProp (node, "type");
+
+ if (!G_STR_EMPTY (sender_avatar_token)) {
+ avatar = empathy_avatar_new_from_cache (sender_avatar_token);
+ }
+ if (is_user_str) {
+ is_user = strcmp (is_user_str, "true") == 0;
+ }
+ if (msg_type_str) {
+ msg_type = empathy_message_type_from_str (msg_type_str);
+ }
+
+ t = empathy_time_parse (time);
+
+ sender = empathy_contact_new_full (account, sender_id, sender_name);
+ empathy_contact_set_is_user (sender, is_user);
+ if (avatar) {
+ empathy_contact_set_avatar (sender, avatar);
+ empathy_avatar_unref (avatar);
+ }
+
+ message = empathy_message_new (body);
+ empathy_message_set_sender (message, sender);
+ empathy_message_set_timestamp (message, t);
+ empathy_message_set_tptype (message, msg_type);
+
+ messages = g_list_append (messages, message);
+
+ g_object_unref (sender);
+ xmlFree (time);
+ xmlFree (sender_id);
+ xmlFree (sender_name);
+ xmlFree (body);
+ xmlFree (is_user_str);
+ xmlFree (msg_type_str);
+ }
+
+ DEBUG ("Parsed %d messages", g_list_length (messages));
+
+ xmlFreeDoc (doc);
+ xmlFreeParserCtxt (ctxt);
+
+ return messages;
+}
+
+GList *
+empathy_log_manager_get_messages_for_date (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom,
+ const gchar *date)
+{
+ gchar *filename;
+ GList *messages;
+
+ g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL);
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+ g_return_val_if_fail (chat_id != NULL, NULL);
+
+ filename = log_manager_get_filename_for_date (manager, account, chat_id, chatroom, date);
+ messages = empathy_log_manager_get_messages_for_file (manager, filename);
+ g_free (filename);
+
+ return messages;
+}
+
+GList *
+empathy_log_manager_get_last_messages (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom)
+{
+ GList *messages = NULL;
+ GList *dates;
+ GList *l;
+
+ g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL);
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+ g_return_val_if_fail (chat_id != NULL, NULL);
+
+ dates = empathy_log_manager_get_dates (manager, account, chat_id, chatroom);
+
+ l = g_list_last (dates);
+ if (l) {
+ messages = empathy_log_manager_get_messages_for_date (manager,
+ account,
+ chat_id,
+ chatroom,
+ l->data);
+ }
+
+ g_list_foreach (dates, (GFunc) g_free, NULL);
+ g_list_free (dates);
+
+ return messages;
+}
+
+GList *
+empathy_log_manager_get_chats (EmpathyLogManager *manager,
+ McAccount *account)
+{
+ const gchar *basedir;
+ gchar *dir;
+
+ basedir = log_manager_get_basedir (manager);
+ dir = g_build_filename (basedir,
+ mc_account_get_unique_name (account),
+ NULL);
+
+ return log_manager_get_chats (manager, dir, FALSE);
+}
+
+GList *
+empathy_log_manager_search_new (EmpathyLogManager *manager,
+ const gchar *text)
+{
+ GList *files, *l;
+ GList *hits = NULL;
+ gchar *text_casefold;
+
+ g_return_val_if_fail (EMPATHY_IS_LOG_MANAGER (manager), NULL);
+ g_return_val_if_fail (!G_STR_EMPTY (text), NULL);
+
+ text_casefold = g_utf8_casefold (text, -1);
+
+ files = log_manager_get_all_files (manager, NULL);
+ DEBUG ("Found %d log files in total", g_list_length (files));
+
+ for (l = files; l; l = l->next) {
+ gchar *filename;
+ GMappedFile *file;
+ gsize length;
+ gchar *contents;
+ gchar *contents_casefold;
+
+ filename = l->data;
+
+ file = g_mapped_file_new (filename, FALSE, NULL);
+ if (!file) {
+ continue;
+ }
+
+ length = g_mapped_file_get_length (file);
+ contents = g_mapped_file_get_contents (file);
+ contents_casefold = g_utf8_casefold (contents, length);
+
+ g_mapped_file_free (file);
+
+ if (strstr (contents_casefold, text_casefold)) {
+ EmpathyLogSearchHit *hit;
+
+ hit = log_manager_search_hit_new (manager, filename);
+
+ if (hit) {
+ hits = g_list_prepend (hits, hit);
+ DEBUG ("Found text:'%s' in file:'%s' on date:'%s'",
+ text, hit->filename, hit->date);
+ }
+ }
+
+ g_free (contents_casefold);
+ g_free (filename);
+ }
+ g_list_free (files);
+
+ g_free (text_casefold);
+
+ return hits;
+}
+
+void
+empathy_log_manager_search_free (GList *hits)
+{
+ GList *l;
+
+ for (l = hits; l; l = l->next) {
+ log_manager_search_hit_free (l->data);
+ }
+
+ g_list_free (hits);
+}
+
+/* Format is just date, 20061201. */
+gchar *
+empathy_log_manager_get_date_readable (const gchar *date)
+{
+ time_t t;
+
+ t = empathy_time_parse (date);
+
+ return empathy_time_to_string_local (t, "%a %d %b %Y");
+}
+
+static const gchar *
+log_manager_get_basedir (EmpathyLogManager *manager)
+{
+ EmpathyLogManagerPriv *priv;
+
+ priv = GET_PRIV (manager);
+
+ if (priv->basedir) {
+ return priv->basedir;
+ }
+
+ priv->basedir = g_build_path (G_DIR_SEPARATOR_S,
+ g_get_home_dir (),
+ ".gnome2",
+ PACKAGE_NAME,
+ "logs",
+ NULL);
+
+ return priv->basedir;
+}
+
+static GList *
+log_manager_get_all_files (EmpathyLogManager *manager,
+ const gchar *dir)
+{
+ GDir *gdir;
+ GList *files = NULL;
+ const gchar *name;
+
+ if (!dir) {
+ dir = log_manager_get_basedir (manager);
+ }
+
+ gdir = g_dir_open (dir, 0, NULL);
+ if (!gdir) {
+ return NULL;
+ }
+
+ while ((name = g_dir_read_name (gdir)) != NULL) {
+ gchar *filename;
+
+ filename = g_build_filename (dir, name, NULL);
+ if (g_str_has_suffix (filename, LOG_FILENAME_SUFFIX)) {
+ files = g_list_prepend (files, filename);
+ continue;
+ }
+
+ if (g_file_test (filename, G_FILE_TEST_IS_DIR)) {
+ /* Recursively get all log files */
+ files = g_list_concat (files, log_manager_get_all_files (manager, filename));
+ }
+ g_free (filename);
+ }
+
+ g_dir_close (gdir);
+
+ return files;
+}
+
+static GList *
+log_manager_get_chats (EmpathyLogManager *manager,
+ const gchar *dir,
+ gboolean is_chatroom)
+{
+ GDir *gdir;
+ GList *hits = NULL;
+ const gchar *name;
+
+ gdir = g_dir_open (dir, 0, NULL);
+ if (!gdir) {
+ return NULL;
+ }
+
+ while ((name = g_dir_read_name (gdir)) != NULL) {
+ EmpathyLogSearchHit *hit;
+ gchar *filename;
+
+ filename = g_build_filename (dir, name, NULL);
+ if (strcmp (name, LOG_DIR_CHATROOMS) == 0) {
+ hits = g_list_concat (hits, log_manager_get_chats (manager, filename, TRUE));
+ g_free (filename);
+ continue;
+ }
+
+ hit = g_slice_new0 (EmpathyLogSearchHit);
+ hit->chat_id = g_strdup (name);
+ hit->is_chatroom = is_chatroom;
+
+ hits = g_list_prepend (hits, hit);
+ }
+
+ g_dir_close (gdir);
+
+ return hits;
+}
+
+static gchar *
+log_manager_get_dir (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom)
+{
+ const gchar *account_id;
+ gchar *basedir;
+
+ account_id = mc_account_get_unique_name (account);
+
+ if (chatroom) {
+ basedir = g_build_path (G_DIR_SEPARATOR_S,
+ log_manager_get_basedir (manager),
+ account_id,
+ LOG_DIR_CHATROOMS,
+ chat_id,
+ NULL);
+ } else {
+ basedir = g_build_path (G_DIR_SEPARATOR_S,
+ log_manager_get_basedir (manager),
+ account_id,
+ chat_id,
+ NULL);
+ }
+
+ return basedir;
+}
+
+static gchar *
+log_manager_get_filename (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom)
+{
+ gchar *basedir;
+ gchar *timestamp;
+ gchar *filename;
+
+ basedir = log_manager_get_dir (manager, account, chat_id, chatroom);
+ timestamp = log_manager_get_timestamp_filename ();
+ filename = g_build_filename (basedir, timestamp, NULL);
+
+ g_free (basedir);
+ g_free (timestamp);
+
+ return filename;
+}
+
+static gchar *
+log_manager_get_filename_for_date (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom,
+ const gchar *date)
+{
+ gchar *basedir;
+ gchar *timestamp;
+ gchar *filename;
+
+ basedir = log_manager_get_dir (manager, account, chat_id, chatroom);
+ timestamp = g_strconcat (date, LOG_FILENAME_SUFFIX, NULL);
+ filename = g_build_filename (basedir, timestamp, NULL);
+
+ g_free (basedir);
+ g_free (timestamp);
+
+ return filename;
+}
+
+static gchar *
+log_manager_get_timestamp_filename (void)
+{
+ time_t t;
+ gchar *time_str;
+ gchar *filename;
+
+ t = empathy_time_get_current ();
+ time_str = empathy_time_to_string_local (t, LOG_TIME_FORMAT);
+ filename = g_strconcat (time_str, LOG_FILENAME_SUFFIX, NULL);
+
+ g_free (time_str);
+
+ return filename;
+}
+
+static gchar *
+log_manager_get_timestamp_from_message (EmpathyMessage *message)
+{
+ time_t t;
+
+ t = empathy_message_get_timestamp (message);
+
+ /* We keep the timestamps in the messages as UTC. */
+ return empathy_time_to_string_utc (t, LOG_TIME_FORMAT_FULL);
+}
+
+static EmpathyLogSearchHit *
+log_manager_search_hit_new (EmpathyLogManager *manager,
+ const gchar *filename)
+{
+ EmpathyLogSearchHit *hit;
+ const gchar *account_name;
+ const gchar *end;
+ gchar **strv;
+ guint len;
+
+ if (!g_str_has_suffix (filename, LOG_FILENAME_SUFFIX)) {
+ return NULL;
+ }
+
+ strv = g_strsplit (filename, G_DIR_SEPARATOR_S, -1);
+ len = g_strv_length (strv);
+
+ hit = g_slice_new0 (EmpathyLogSearchHit);
+
+ end = strstr (strv[len-1], LOG_FILENAME_SUFFIX);
+ hit->date = g_strndup (strv[len-1], end - strv[len-1]);
+ hit->chat_id = g_strdup (strv[len-2]);
+ hit->is_chatroom = (strcmp (strv[len-3], LOG_DIR_CHATROOMS) == 0);
+ if (hit->is_chatroom) {
+ account_name = strv[len-4];
+ } else {
+ account_name = strv[len-3];
+ }
+ hit->account = mc_account_lookup (account_name);
+ hit->filename = g_strdup (filename);
+
+ g_strfreev (strv);
+
+ return hit;
+}
+
+static void
+log_manager_search_hit_free (EmpathyLogSearchHit *hit)
+{
+ if (hit->account) {
+ g_object_unref (hit->account);
+ }
+
+ g_free (hit->date);
+ g_free (hit->filename);
+ g_free (hit->chat_id);
+
+ g_slice_free (EmpathyLogSearchHit, hit);
+}
diff --git a/trunk/libempathy/empathy-log-manager.h b/trunk/libempathy/empathy-log-manager.h
new file mode 100644
index 000000000..4aec816c6
--- /dev/null
+++ b/trunk/libempathy/empathy-log-manager.h
@@ -0,0 +1,99 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_LOG_MANAGER_H__
+#define __EMPATHY_LOG_MANAGER_H__
+
+#include <glib-object.h>
+
+#include <libmissioncontrol/mc-account.h>
+
+#include "empathy-message.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_LOG_MANAGER (empathy_log_manager_get_type ())
+#define EMPATHY_LOG_MANAGER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_LOG_MANAGER, EmpathyLogManager))
+#define EMPATHY_LOG_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_LOG_MANAGER, EmpathyLogManagerClass))
+#define EMPATHY_IS_LOG_MANAGER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_LOG_MANAGER))
+#define EMPATHY_IS_LOG_MANAGER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_LOG_MANAGER))
+#define EMPATHY_LOG_MANAGER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_LOG_MANAGER, EmpathyLogManagerClass))
+
+typedef struct _EmpathyLogManager EmpathyLogManager;
+typedef struct _EmpathyLogManagerClass EmpathyLogManagerClass;
+typedef struct _EmpathyLogSearchHit EmpathyLogSearchHit;
+
+struct _EmpathyLogManager {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyLogManagerClass {
+ GObjectClass parent_class;
+};
+
+struct _EmpathyLogSearchHit {
+ McAccount *account;
+ gchar *chat_id;
+ gboolean is_chatroom;
+ gchar *filename;
+ gchar *date;
+};
+
+GType empathy_log_manager_get_type (void) G_GNUC_CONST;
+EmpathyLogManager *empathy_log_manager_new (void);
+void empathy_log_manager_add_message (EmpathyLogManager *manager,
+ const gchar *chat_id,
+ gboolean chatroom,
+ EmpathyMessage *message);
+gboolean empathy_log_manager_exists (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom);
+GList * empathy_log_manager_get_dates (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom);
+GList * empathy_log_manager_get_messages_for_file (EmpathyLogManager *manager,
+ const gchar *filename);
+GList * empathy_log_manager_get_messages_for_date (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom,
+ const gchar *date);
+GList * empathy_log_manager_get_last_messages (EmpathyLogManager *manager,
+ McAccount *account,
+ const gchar *chat_id,
+ gboolean chatroom);
+GList * empathy_log_manager_get_messages_for_file (EmpathyLogManager *manager,
+ const gchar *filename);
+GList * empathy_log_manager_get_chats (EmpathyLogManager *manager,
+ McAccount *account);
+GList * empathy_log_manager_search_new (EmpathyLogManager *manager,
+ const gchar *text);
+void empathy_log_manager_search_free (GList *hits);
+gchar * empathy_log_manager_get_date_readable (const gchar *date);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_LOG_MANAGER_H__ */
diff --git a/trunk/libempathy/empathy-log-manager.xsl b/trunk/libempathy/empathy-log-manager.xsl
new file mode 100644
index 000000000..a934f3ab3
--- /dev/null
+++ b/trunk/libempathy/empathy-log-manager.xsl
@@ -0,0 +1,148 @@
+<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+ <xsl:output method="html" encoding="utf-8" indent="yes"/>
+
+ <xsl:template match="/">
+ <html>
+ <head>
+ <style type="text/css">
+ <xsl:text>
+ body {
+ background: #fff;
+ font-family: Verdana, "Bitstream Vera Sans", Sans-Serif;
+ font-size: 10pt;
+ }
+ .stamp {
+ color: #999;
+ }
+ .top-day-stamp {
+ color: #999;
+ text-align: center;
+ margin-bottom: 1em;
+ }
+ .new-day-stamp {
+ color: #999;
+ text-align: center;
+ margin-bottom: 1em;
+ margin-top: 1em;
+ }
+ .nick {
+ color: rgb(54,100, 139);
+ }
+ .nick-self {
+ color: rgb(46,139,87);
+ }
+ .nick-highlight {
+ color: rgb(205,92,92);
+ }
+ </xsl:text>
+ </style>
+ <title><xsl:value-of select="$title"/></title>
+ </head>
+ <body>
+ <xsl:apply-templates/>
+ </body>
+ </html>
+ </xsl:template>
+
+ <xsl:template name="get-day">
+ <xsl:param name="stamp"/>
+ <xsl:value-of select="substring ($stamp, 1, 8)"/>
+ </xsl:template>
+
+ <xsl:template name="format-stamp">
+ <xsl:param name="stamp"/>
+ <xsl:variable name="hour" select="substring ($stamp, 10, 2)"/>
+ <xsl:variable name="min" select="substring ($stamp, 13, 2)"/>
+
+ <xsl:value-of select="$hour"/>:<xsl:value-of select="$min"/>
+ </xsl:template>
+
+ <xsl:template name="format-day-stamp">
+ <xsl:param name="stamp"/>
+ <xsl:variable name="year" select="substring ($stamp, 1, 4)"/>
+ <xsl:variable name="month" select="substring ($stamp, 5, 2)"/>
+ <xsl:variable name="day" select="substring ($stamp, 7, 2)"/>
+
+ <xsl:value-of select="$year"/>-<xsl:value-of select="$month"/>-<xsl:value-of select="$day"/>
+ </xsl:template>
+
+ <xsl:template name="header">
+ <xsl:param name="stamp"/>
+ <div class="top-day-stamp">
+ <xsl:call-template name="format-day-stamp">
+ <xsl:with-param name="stamp" select="@time"/>
+ </xsl:call-template>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="a">
+ <xsl:text disable-output-escaping="yes">&lt;a href="</xsl:text>
+
+ <xsl:value-of disable-output-escaping="yes" select="@href"/>
+
+ <xsl:text disable-output-escaping="yes">"&gt;</xsl:text>
+
+ <xsl:value-of select="@href"/>
+ <xsl:text disable-output-escaping="yes">&lt;/a&gt;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="log">
+
+ <div class="top-day-stamp">
+ <xsl:call-template name="format-day-stamp">
+ <xsl:with-param name="stamp" select="//message[1]/@time"/>
+ </xsl:call-template>
+ </div>
+
+ <xsl:for-each select="*">
+
+ <xsl:variable name="prev-time">
+ <xsl:call-template name="get-day">
+ <xsl:with-param name="stamp" select="preceding-sibling::*[1]/@time"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="this-time">
+ <xsl:call-template name="get-day">
+ <xsl:with-param name="stamp" select="@time"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:if test="$prev-time &lt; $this-time">
+ <div class="new-day-stamp">
+ <xsl:call-template name="format-day-stamp">
+ <xsl:with-param name="stamp" select="@time"/>
+ </xsl:call-template>
+ </div>
+ </xsl:if>
+
+ <xsl:variable name="stamp">
+ <xsl:call-template name="format-stamp">
+ <xsl:with-param name="stamp" select="@time"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <span class="stamp">
+ <xsl:value-of select="$stamp"/>
+ </span>
+
+ <xsl:variable name="nick-class">
+ <xsl:choose>
+ <xsl:when test="not(string(@id))">nick-self</xsl:when>
+ <xsl:otherwise>nick</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <span class="{$nick-class}">
+ &lt;<xsl:value-of select="@name"/>&gt;
+ </span>
+
+ <xsl:apply-templates/>
+ <br/>
+
+ </xsl:for-each>
+
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/trunk/libempathy/empathy-message.c b/trunk/libempathy/empathy-message.c
new file mode 100644
index 000000000..6636fe69d
--- /dev/null
+++ b/trunk/libempathy/empathy-message.c
@@ -0,0 +1,500 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include "empathy-message.h"
+#include "empathy-enum-types.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyMessage)
+typedef struct {
+ TpChannelTextMessageType type;
+ EmpathyContact *sender;
+ EmpathyContact *receiver;
+ gchar *body;
+ time_t timestamp;
+} EmpathyMessagePriv;
+
+static void empathy_message_finalize (GObject *object);
+static void message_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void message_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+
+G_DEFINE_TYPE (EmpathyMessage, empathy_message, G_TYPE_OBJECT);
+
+enum {
+ PROP_0,
+ PROP_TYPE,
+ PROP_SENDER,
+ PROP_RECEIVER,
+ PROP_BODY,
+ PROP_TIMESTAMP,
+};
+
+static void
+empathy_message_class_init (EmpathyMessageClass *class)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (class);
+ object_class->finalize = empathy_message_finalize;
+ object_class->get_property = message_get_property;
+ object_class->set_property = message_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_TYPE,
+ g_param_spec_uint ("type",
+ "Message Type",
+ "The type of message",
+ TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
+ TP_CHANNEL_TEXT_MESSAGE_TYPE_AUTO_REPLY,
+ TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_SENDER,
+ g_param_spec_object ("sender",
+ "Message Sender",
+ "The sender of the message",
+ EMPATHY_TYPE_CONTACT,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_RECEIVER,
+ g_param_spec_object ("receiver",
+ "Message Receiver",
+ "The receiver of the message",
+ EMPATHY_TYPE_CONTACT,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_BODY,
+ g_param_spec_string ("body",
+ "Message Body",
+ "The content of the message",
+ NULL,
+ G_PARAM_READWRITE));
+ g_object_class_install_property (object_class,
+ PROP_TIMESTAMP,
+ g_param_spec_long ("timestamp",
+ "timestamp",
+ "timestamp",
+ -1,
+ G_MAXLONG,
+ -1,
+ G_PARAM_READWRITE));
+
+
+ g_type_class_add_private (object_class, sizeof (EmpathyMessagePriv));
+
+}
+
+static void
+empathy_message_init (EmpathyMessage *message)
+{
+ EmpathyMessagePriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (message,
+ EMPATHY_TYPE_MESSAGE, EmpathyMessagePriv);
+
+ message->priv = priv;
+ priv->timestamp = empathy_time_get_current ();
+}
+
+static void
+empathy_message_finalize (GObject *object)
+{
+ EmpathyMessagePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ if (priv->sender) {
+ g_object_unref (priv->sender);
+ }
+ if (priv->receiver) {
+ g_object_unref (priv->receiver);
+ }
+
+ g_free (priv->body);
+
+ G_OBJECT_CLASS (empathy_message_parent_class)->finalize (object);
+}
+
+static void
+message_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyMessagePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_TYPE:
+ g_value_set_uint (value, priv->type);
+ break;
+ case PROP_SENDER:
+ g_value_set_object (value, priv->sender);
+ break;
+ case PROP_RECEIVER:
+ g_value_set_object (value, priv->receiver);
+ break;
+ case PROP_BODY:
+ g_value_set_string (value, priv->body);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+message_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyMessagePriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_TYPE:
+ empathy_message_set_tptype (EMPATHY_MESSAGE (object),
+ g_value_get_uint (value));
+ break;
+ case PROP_SENDER:
+ empathy_message_set_sender (EMPATHY_MESSAGE (object),
+ EMPATHY_CONTACT (g_value_get_object (value)));
+ break;
+ case PROP_RECEIVER:
+ empathy_message_set_receiver (EMPATHY_MESSAGE (object),
+ EMPATHY_CONTACT (g_value_get_object (value)));
+ break;
+ case PROP_BODY:
+ empathy_message_set_body (EMPATHY_MESSAGE (object),
+ g_value_get_string (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+EmpathyMessage *
+empathy_message_new (const gchar *body)
+{
+ return g_object_new (EMPATHY_TYPE_MESSAGE,
+ "body", body,
+ NULL);
+}
+
+TpChannelTextMessageType
+empathy_message_get_tptype (EmpathyMessage *message)
+{
+ EmpathyMessagePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_MESSAGE (message),
+ TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL);
+
+ priv = GET_PRIV (message);
+
+ return priv->type;
+}
+
+void
+empathy_message_set_tptype (EmpathyMessage *message,
+ TpChannelTextMessageType type)
+{
+ EmpathyMessagePriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_MESSAGE (message));
+
+ priv = GET_PRIV (message);
+
+ priv->type = type;
+
+ g_object_notify (G_OBJECT (message), "type");
+}
+
+EmpathyContact *
+empathy_message_get_sender (EmpathyMessage *message)
+{
+ EmpathyMessagePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), NULL);
+
+ priv = GET_PRIV (message);
+
+ return priv->sender;
+}
+
+void
+empathy_message_set_sender (EmpathyMessage *message, EmpathyContact *contact)
+{
+ EmpathyMessagePriv *priv;
+ EmpathyContact *old_sender;
+
+ g_return_if_fail (EMPATHY_IS_MESSAGE (message));
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ priv = GET_PRIV (message);
+
+ old_sender = priv->sender;
+ priv->sender = g_object_ref (contact);
+
+ if (old_sender) {
+ g_object_unref (old_sender);
+ }
+
+ g_object_notify (G_OBJECT (message), "sender");
+}
+
+EmpathyContact *
+empathy_message_get_receiver (EmpathyMessage *message)
+{
+ EmpathyMessagePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), NULL);
+
+ priv = GET_PRIV (message);
+
+ return priv->receiver;
+}
+
+void
+empathy_message_set_receiver (EmpathyMessage *message, EmpathyContact *contact)
+{
+ EmpathyMessagePriv *priv;
+ EmpathyContact *old_receiver;
+
+ g_return_if_fail (EMPATHY_IS_MESSAGE (message));
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ priv = GET_PRIV (message);
+
+ old_receiver = priv->receiver;
+ priv->receiver = g_object_ref (contact);
+
+ if (old_receiver) {
+ g_object_unref (old_receiver);
+ }
+
+ g_object_notify (G_OBJECT (message), "receiver");
+}
+
+const gchar *
+empathy_message_get_body (EmpathyMessage *message)
+{
+ EmpathyMessagePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), NULL);
+
+ priv = GET_PRIV (message);
+
+ return priv->body;
+}
+
+void
+empathy_message_set_body (EmpathyMessage *message,
+ const gchar *body)
+{
+ EmpathyMessagePriv *priv = GET_PRIV (message);
+ TpChannelTextMessageType type;
+
+ g_return_if_fail (EMPATHY_IS_MESSAGE (message));
+
+ g_free (priv->body);
+ priv->body = NULL;
+
+ type = TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL;
+ if (g_str_has_prefix (body, "/me")) {
+ type = TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION;
+ body += 4;
+ }
+ else if (g_str_has_prefix (body, "/say")) {
+ body += 5;
+ }
+
+ if (body) {
+ priv->body = g_strdup (body);
+ }
+
+ if (type != priv->type) {
+ empathy_message_set_tptype (message, type);
+ }
+
+ g_object_notify (G_OBJECT (message), "body");
+}
+
+time_t
+empathy_message_get_timestamp (EmpathyMessage *message)
+{
+ EmpathyMessagePriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), -1);
+
+ priv = GET_PRIV (message);
+
+ return priv->timestamp;
+}
+
+void
+empathy_message_set_timestamp (EmpathyMessage *message,
+ time_t timestamp)
+{
+ EmpathyMessagePriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_MESSAGE (message));
+ g_return_if_fail (timestamp >= -1);
+
+ priv = GET_PRIV (message);
+
+ if (timestamp <= 0) {
+ priv->timestamp = empathy_time_get_current ();
+ } else {
+ priv->timestamp = timestamp;
+ }
+
+ g_object_notify (G_OBJECT (message), "timestamp");
+}
+
+GDate *
+empathy_message_get_date_and_time (EmpathyMessage *message, time_t *timestamp)
+{
+ GDate *date;
+
+ *timestamp = 0;
+ if (message) {
+ *timestamp = empathy_message_get_timestamp (message);
+ }
+
+ if (timestamp <= 0) {
+ *timestamp = empathy_time_get_current ();
+ }
+
+ date = g_date_new ();
+ g_date_set_time_t (date, *timestamp);
+
+ return date;
+}
+
+#define IS_SEPARATOR(ch) (ch == ' ' || ch == ',' || ch == '.' || ch == ':')
+gboolean
+empathy_message_should_highlight (EmpathyMessage *message)
+{
+ EmpathyContact *contact;
+ const gchar *msg, *to;
+ gchar *cf_msg, *cf_to;
+ gchar *ch;
+ gboolean ret_val;
+
+ g_return_val_if_fail (EMPATHY_IS_MESSAGE (message), FALSE);
+
+ ret_val = FALSE;
+
+ msg = empathy_message_get_body (message);
+ if (!msg) {
+ return FALSE;
+ }
+
+ contact = empathy_message_get_receiver (message);
+ if (!contact || !empathy_contact_is_user (contact)) {
+ return FALSE;
+ }
+
+ to = empathy_contact_get_name (contact);
+ if (!to) {
+ return FALSE;
+ }
+
+ cf_msg = g_utf8_casefold (msg, -1);
+ cf_to = g_utf8_casefold (to, -1);
+
+ ch = strstr (cf_msg, cf_to);
+ if (ch == NULL) {
+ goto finished;
+ }
+ if (ch != cf_msg) {
+ /* Not first in the message */
+ if (!IS_SEPARATOR (*(ch - 1))) {
+ goto finished;
+ }
+ }
+
+ ch = ch + strlen (cf_to);
+ if (ch >= cf_msg + strlen (cf_msg)) {
+ ret_val = TRUE;
+ goto finished;
+ }
+
+ if (IS_SEPARATOR (*ch)) {
+ ret_val = TRUE;
+ goto finished;
+ }
+
+finished:
+ g_free (cf_msg);
+ g_free (cf_to);
+
+ return ret_val;
+}
+
+TpChannelTextMessageType
+empathy_message_type_from_str (const gchar *type_str)
+{
+ if (strcmp (type_str, "normal") == 0) {
+ return TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL;
+ }
+ if (strcmp (type_str, "action") == 0) {
+ return TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION;
+ }
+ else if (strcmp (type_str, "notice") == 0) {
+ return TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE;
+ }
+ else if (strcmp (type_str, "auto-reply") == 0) {
+ return TP_CHANNEL_TEXT_MESSAGE_TYPE_AUTO_REPLY;
+ }
+
+ return TP_CHANNEL_TEXT_MESSAGE_TYPE_NORMAL;
+}
+
+const gchar *
+empathy_message_type_to_str (TpChannelTextMessageType type)
+{
+ switch (type) {
+ case TP_CHANNEL_TEXT_MESSAGE_TYPE_ACTION:
+ return "action";
+ case TP_CHANNEL_TEXT_MESSAGE_TYPE_NOTICE:
+ return "notice";
+ case TP_CHANNEL_TEXT_MESSAGE_TYPE_AUTO_REPLY:
+ return "auto-reply";
+ default:
+ return "normal";
+ }
+}
+
diff --git a/trunk/libempathy/empathy-message.h b/trunk/libempathy/empathy-message.h
new file mode 100644
index 000000000..fd3e0735c
--- /dev/null
+++ b/trunk/libempathy/empathy-message.h
@@ -0,0 +1,79 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_MESSAGE_H__
+#define __EMPATHY_MESSAGE_H__
+
+#include <glib-object.h>
+
+#include "empathy-contact.h"
+#include "empathy-time.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_MESSAGE (empathy_message_get_type ())
+#define EMPATHY_MESSAGE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_MESSAGE, EmpathyMessage))
+#define EMPATHY_MESSAGE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_MESSAGE, EmpathyMessageClass))
+#define EMPATHY_IS_MESSAGE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_MESSAGE))
+#define EMPATHY_IS_MESSAGE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_MESSAGE))
+#define EMPATHY_MESSAGE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_MESSAGE, EmpathyMessageClass))
+
+typedef struct _EmpathyMessage EmpathyMessage;
+typedef struct _EmpathyMessageClass EmpathyMessageClass;
+
+struct _EmpathyMessage {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyMessageClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_message_get_type (void) G_GNUC_CONST;
+EmpathyMessage * empathy_message_new (const gchar *body);
+TpChannelTextMessageType empathy_message_get_tptype (EmpathyMessage *message);
+void empathy_message_set_tptype (EmpathyMessage *message,
+ TpChannelTextMessageType type);
+EmpathyContact * empathy_message_get_sender (EmpathyMessage *message);
+void empathy_message_set_sender (EmpathyMessage *message,
+ EmpathyContact *contact);
+EmpathyContact * empathy_message_get_receiver (EmpathyMessage *message);
+void empathy_message_set_receiver (EmpathyMessage *message,
+ EmpathyContact *contact);
+const gchar * empathy_message_get_body (EmpathyMessage *message);
+void empathy_message_set_body (EmpathyMessage *message,
+ const gchar *body);
+time_t empathy_message_get_timestamp (EmpathyMessage *message);
+void empathy_message_set_timestamp (EmpathyMessage *message,
+ time_t timestamp);
+GDate * empathy_message_get_date_and_time (EmpathyMessage *message,
+ time_t *timestamp);
+gboolean empathy_message_should_highlight (EmpathyMessage *message);
+TpChannelTextMessageType empathy_message_type_from_str (const gchar *type_str);
+const gchar * empathy_message_type_to_str (TpChannelTextMessageType type);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_MESSAGE_H__ */
diff --git a/trunk/libempathy/empathy-status-presets.c b/trunk/libempathy/empathy-status-presets.c
new file mode 100644
index 000000000..b5e1f9bf8
--- /dev/null
+++ b/trunk/libempathy/empathy-status-presets.c
@@ -0,0 +1,407 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Martyn Russell <martyn@imendio.com>
+ */
+
+#include "config.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <string.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+#include <telepathy-glib/util.h>
+
+#include "empathy-utils.h"
+#include "empathy-status-presets.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include "empathy-debug.h"
+
+#define STATUS_PRESETS_XML_FILENAME "status-presets.xml"
+#define STATUS_PRESETS_DTD_FILENAME "empathy-status-presets.dtd"
+#define STATUS_PRESETS_MAX_EACH 15
+
+typedef struct {
+ gchar *status;
+ McPresence state;
+} StatusPreset;
+
+static StatusPreset *status_preset_new (McPresence state,
+ const gchar *status);
+static void status_preset_free (StatusPreset *status);
+static void status_presets_file_parse (const gchar *filename);
+const gchar * status_presets_get_state_as_str (McPresence state);
+static gboolean status_presets_file_save (void);
+static void status_presets_set_default (McPresence state,
+ const gchar *status);
+
+static GList *presets = NULL;
+static StatusPreset *default_preset = NULL;
+
+static StatusPreset *
+status_preset_new (McPresence state,
+ const gchar *status)
+{
+ StatusPreset *preset;
+
+ preset = g_new0 (StatusPreset, 1);
+
+ preset->status = g_strdup (status);
+ preset->state = state;
+
+ return preset;
+}
+
+static void
+status_preset_free (StatusPreset *preset)
+{
+ g_free (preset->status);
+ g_free (preset);
+}
+
+static void
+status_presets_file_parse (const gchar *filename)
+{
+ xmlParserCtxtPtr ctxt;
+ xmlDocPtr doc;
+ xmlNodePtr presets_node;
+ xmlNodePtr node;
+
+ DEBUG ("Attempting to parse file:'%s'...", filename);
+
+ ctxt = xmlNewParserCtxt ();
+
+ /* Parse and validate the file. */
+ doc = xmlCtxtReadFile (ctxt, filename, NULL, 0);
+ if (!doc) {
+ g_warning ("Failed to parse file:'%s'", filename);
+ xmlFreeParserCtxt (ctxt);
+ return;
+ }
+
+ if (!empathy_xml_validate (doc, STATUS_PRESETS_DTD_FILENAME)) {
+ g_warning ("Failed to validate file:'%s'", filename);
+ xmlFreeDoc(doc);
+ xmlFreeParserCtxt (ctxt);
+ return;
+ }
+
+ /* The root node, presets. */
+ presets_node = xmlDocGetRootElement (doc);
+
+ node = presets_node->children;
+ while (node) {
+ if (strcmp ((gchar *) node->name, "status") == 0 ||
+ strcmp ((gchar *) node->name, "default") == 0) {
+ McPresence state;
+ gchar *status;
+ gchar *state_str;
+ StatusPreset *preset;
+ gboolean is_default = FALSE;
+
+ if (strcmp ((gchar *) node->name, "default") == 0) {
+ is_default = TRUE;
+ }
+
+ status = (gchar *) xmlNodeGetContent (node);
+ state_str = (gchar *) xmlGetProp (node, "presence");
+
+ if (state_str) {
+ state = empathy_presence_from_str (state_str);
+
+ if (is_default) {
+ DEBUG ("Default status preset state is:"
+ " '%s', status:'%s'", state_str,
+ status);
+
+ status_presets_set_default (state, status);
+ } else {
+ preset = status_preset_new (state, status);
+ presets = g_list_append (presets, preset);
+ }
+ }
+
+ xmlFree (status);
+ xmlFree (state_str);
+ }
+
+ node = node->next;
+ }
+
+ /* Use the default if not set */
+ if (!default_preset) {
+ status_presets_set_default (MC_PRESENCE_OFFLINE, NULL);
+ }
+
+ DEBUG ("Parsed %d status presets", g_list_length (presets));
+
+ xmlFreeDoc (doc);
+ xmlFreeParserCtxt (ctxt);
+}
+
+void
+empathy_status_presets_get_all (void)
+{
+ gchar *dir;
+ gchar *file_with_path;
+
+ /* If already set up clean up first. */
+ if (presets) {
+ g_list_foreach (presets, (GFunc) status_preset_free, NULL);
+ g_list_free (presets);
+ presets = NULL;
+ }
+
+ dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+ g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
+ file_with_path = g_build_filename (dir, STATUS_PRESETS_XML_FILENAME, NULL);
+ g_free (dir);
+
+ if (g_file_test (file_with_path, G_FILE_TEST_EXISTS)) {
+ status_presets_file_parse (file_with_path);
+ }
+
+ g_free (file_with_path);
+}
+
+static gboolean
+status_presets_file_save (void)
+{
+ xmlDocPtr doc;
+ xmlNodePtr root;
+ GList *l;
+ gchar *dir;
+ gchar *file;
+ gint count[LAST_MC_PRESENCE];
+ gint i;
+
+ for (i = 0; i < LAST_MC_PRESENCE; i++) {
+ count[i] = 0;
+ }
+
+ dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+ g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
+ file = g_build_filename (dir, STATUS_PRESETS_XML_FILENAME, NULL);
+ g_free (dir);
+
+ doc = xmlNewDoc ("1.0");
+ root = xmlNewNode (NULL, "presets");
+ xmlDocSetRootElement (doc, root);
+
+ if (default_preset) {
+ xmlNodePtr subnode;
+ xmlChar *state;
+
+ state = (gchar*) empathy_presence_to_str (default_preset->state);
+
+ subnode = xmlNewTextChild (root, NULL, "default",
+ default_preset->status);
+ xmlNewProp (subnode, "presence", state);
+ }
+
+ for (l = presets; l; l = l->next) {
+ StatusPreset *sp;
+ xmlNodePtr subnode;
+ xmlChar *state;
+
+ sp = l->data;
+ state = (gchar*) empathy_presence_to_str (sp->state);
+
+ count[sp->state]++;
+ if (count[sp->state] > STATUS_PRESETS_MAX_EACH) {
+ continue;
+ }
+
+ subnode = xmlNewTextChild (root, NULL,
+ "status", sp->status);
+ xmlNewProp (subnode, "presence", state);
+ }
+
+ /* Make sure the XML is indented properly */
+ xmlIndentTreeOutput = 1;
+
+ DEBUG ("Saving file:'%s'", file);
+ xmlSaveFormatFileEnc (file, doc, "utf-8", 1);
+ xmlFreeDoc (doc);
+
+ g_free (file);
+
+ return TRUE;
+}
+
+GList *
+empathy_status_presets_get (McPresence state,
+ gint max_number)
+{
+ GList *list = NULL;
+ GList *l;
+ gint i;
+
+ i = 0;
+ for (l = presets; l; l = l->next) {
+ StatusPreset *sp;
+
+ sp = l->data;
+
+ if (sp->state != state) {
+ continue;
+ }
+
+ list = g_list_append (list, sp->status);
+ i++;
+
+ if (max_number != -1 && i >= max_number) {
+ break;
+ }
+ }
+
+ return list;
+}
+
+void
+empathy_status_presets_set_last (McPresence state,
+ const gchar *status)
+{
+ GList *l;
+ StatusPreset *preset;
+ gint num;
+
+ /* Check if duplicate */
+ for (l = presets; l; l = l->next) {
+ preset = l->data;
+
+ if (state == preset->state &&
+ !tp_strdiff (status, preset->status)) {
+ return;
+ }
+ }
+
+ preset = status_preset_new (state, status);
+ presets = g_list_prepend (presets, preset);
+
+ num = 0;
+ for (l = presets; l; l = l->next) {
+ preset = l->data;
+
+ if (state != preset->state) {
+ continue;
+ }
+
+ num++;
+
+ if (num > STATUS_PRESETS_MAX_EACH) {
+ status_preset_free (preset);
+ presets = g_list_delete_link (presets, l);
+ break;
+ }
+ }
+
+ status_presets_file_save ();
+}
+
+void
+empathy_status_presets_remove (McPresence state,
+ const gchar *status)
+{
+ StatusPreset *preset;
+ GList *l;
+
+ for (l = presets; l; l = l->next) {
+ preset = l->data;
+
+ if (state == preset->state &&
+ !tp_strdiff (status, preset->status)) {
+ status_preset_free (preset);
+ presets = g_list_delete_link (presets, l);
+ status_presets_file_save ();
+ break;
+ }
+ }
+}
+
+void
+empathy_status_presets_reset (void)
+{
+ g_list_foreach (presets, (GFunc) status_preset_free, NULL);
+ g_list_free (presets);
+
+ presets = NULL;
+
+ status_presets_set_default (MC_PRESENCE_AVAILABLE, NULL);
+
+ status_presets_file_save ();
+}
+
+McPresence
+empathy_status_presets_get_default_state (void)
+{
+ if (!default_preset) {
+ return MC_PRESENCE_OFFLINE;
+ }
+
+ return default_preset->state;
+}
+
+const gchar *
+empathy_status_presets_get_default_status (void)
+{
+ if (!default_preset ||
+ !default_preset->status) {
+ return NULL;
+ }
+
+ return default_preset->status;
+}
+
+static void
+status_presets_set_default (McPresence state,
+ const gchar *status)
+{
+ if (default_preset) {
+ status_preset_free (default_preset);
+ }
+
+ default_preset = status_preset_new (state, status);
+}
+
+void
+empathy_status_presets_set_default (McPresence state,
+ const gchar *status)
+{
+ status_presets_set_default (state, status);
+ status_presets_file_save ();
+}
+
+void
+empathy_status_presets_clear_default (void)
+{
+ if (default_preset) {
+ status_preset_free (default_preset);
+ default_preset = NULL;
+ }
+
+ status_presets_file_save ();
+}
diff --git a/trunk/libempathy/empathy-status-presets.dtd b/trunk/libempathy/empathy-status-presets.dtd
new file mode 100644
index 000000000..872be6b4e
--- /dev/null
+++ b/trunk/libempathy/empathy-status-presets.dtd
@@ -0,0 +1,14 @@
+<!--
+ DTD for Empathys status presets.
+ by Martyn Russell <martyn@imendio.com>
+-->
+
+<!-- Root element. -->
+<!ELEMENT presets ((default?),status*)>
+
+<!ELEMENT default (#PCDATA)>
+<!ATTLIST default presence CDATA #REQUIRED>
+
+<!ELEMENT status (#PCDATA)>
+<!ATTLIST status presence CDATA #REQUIRED>
+
diff --git a/trunk/libempathy/empathy-status-presets.h b/trunk/libempathy/empathy-status-presets.h
new file mode 100644
index 000000000..06b6c7912
--- /dev/null
+++ b/trunk/libempathy/empathy-status-presets.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2005-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Martyn Russell <martyn@imendio.com>
+ */
+
+#ifndef __EMPATHY_STATUS_PRESETS_H__
+#define __EMPATHY_STATUS_PRESETS_H__
+
+#include <libmissioncontrol/mission-control.h>
+
+G_BEGIN_DECLS
+
+void empathy_status_presets_get_all (void);
+GList * empathy_status_presets_get (McPresence state,
+ gint max_number);
+void empathy_status_presets_set_last (McPresence state,
+ const gchar *status);
+void empathy_status_presets_remove (McPresence state,
+ const gchar *status);
+void empathy_status_presets_reset (void);
+McPresence empathy_status_presets_get_default_state (void);
+const gchar * empathy_status_presets_get_default_status (void);
+void empathy_status_presets_set_default (McPresence state,
+ const gchar *status);
+void empathy_status_presets_clear_default (void);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_STATUS_PRESETS_H__ */
diff --git a/trunk/libempathy/empathy-time.c b/trunk/libempathy/empathy-time.c
new file mode 100644
index 000000000..9eec8adc0
--- /dev/null
+++ b/trunk/libempathy/empathy-time.c
@@ -0,0 +1,124 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Richard Hult <richard@imendio.com>
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "empathy-time.h"
+
+/* Note: EmpathyTime is always in UTC. */
+
+time_t
+empathy_time_get_current (void)
+{
+ return time (NULL);
+}
+
+time_t
+empathy_time_get_local_time (struct tm *tm)
+{
+ const gchar *timezone;
+ time_t t;
+
+ timezone = g_getenv ("TZ");
+ g_setenv ("TZ", "", TRUE);
+
+ tzset ();
+
+ t = mktime (tm);
+
+ if (timezone) {
+ g_setenv ("TZ", timezone, TRUE);
+ } else {
+ g_unsetenv ("TZ");
+ }
+
+ tzset ();
+
+ return t;
+}
+
+/* The format is: "20021209T23:51:30" and is in UTC. 0 is returned on
+ * failure. The alternative format "20021209" is also accepted.
+ */
+time_t
+empathy_time_parse (const gchar *str)
+{
+ struct tm tm;
+ gint year, month;
+ gint n_parsed;
+
+ memset (&tm, 0, sizeof (struct tm));
+
+ n_parsed = sscanf (str, "%4d%2d%2dT%2d:%2d:%2d",
+ &year, &month, &tm.tm_mday, &tm.tm_hour,
+ &tm.tm_min, &tm.tm_sec);
+ if (n_parsed != 3 && n_parsed != 6) {
+ return 0;
+ }
+
+ tm.tm_year = year - 1900;
+ tm.tm_mon = month - 1;
+ tm.tm_isdst = -1;
+
+ return empathy_time_get_local_time (&tm);
+}
+
+/* Converts the UTC timestamp to a string, also in UTC. Returns NULL on failure. */
+gchar *
+empathy_time_to_string_utc (time_t t,
+ const gchar *format)
+{
+ gchar stamp[128];
+ struct tm *tm;
+
+ g_return_val_if_fail (format != NULL, NULL);
+
+ tm = gmtime (&t);
+ if (strftime (stamp, sizeof (stamp), format, tm) == 0) {
+ return NULL;
+ }
+
+ return g_strdup (stamp);
+}
+
+/* Converts the UTC timestamp to a string, in local time. Returns NULL on failure. */
+gchar *
+empathy_time_to_string_local (time_t t,
+ const gchar *format)
+{
+ gchar stamp[128];
+ struct tm *tm;
+
+ g_return_val_if_fail (format != NULL, NULL);
+
+ tm = localtime (&t);
+ if (strftime (stamp, sizeof (stamp), format, tm) == 0) {
+ return NULL;
+ }
+
+ return g_strdup (stamp);
+}
+
diff --git a/trunk/libempathy/empathy-time.h b/trunk/libempathy/empathy-time.h
new file mode 100644
index 000000000..ce520cdf9
--- /dev/null
+++ b/trunk/libempathy/empathy-time.h
@@ -0,0 +1,47 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __EMPATHY_TIME_H__
+#define __EMPATHY_TIME_H__
+
+#ifndef __USE_XOPEN
+#define __USE_XOPEN
+#endif
+#include <time.h>
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TIME_FORMAT_DISPLAY_SHORT "%H:%M"
+#define EMPATHY_TIME_FORMAT_DISPLAY_LONG "%a %d %b %Y"
+
+time_t empathy_time_get_current (void);
+time_t empathy_time_get_local_time (struct tm *tm);
+time_t empathy_time_parse (const gchar *str);
+gchar *empathy_time_to_string_utc (time_t t,
+ const gchar *format);
+gchar *empathy_time_to_string_local (time_t t,
+ const gchar *format);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_TIME_H__ */
+
diff --git a/trunk/libempathy/empathy-tp-call.c b/trunk/libempathy/empathy-tp-call.c
new file mode 100644
index 000000000..4dab14a1e
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-call.c
@@ -0,0 +1,843 @@
+/* -*- 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>
+ */
+
+#include <string.h>
+
+#include <telepathy-glib/proxy-subclass.h>
+#include <telepathy-glib/dbus.h>
+
+#include <extensions/extensions.h>
+
+#include "empathy-tp-call.h"
+#include "empathy-contact-factory.h"
+#include "empathy-tp-group.h"
+#include "empathy-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_TP
+#include "empathy-debug.h"
+
+#define STREAM_ENGINE_BUS_NAME "org.freedesktop.Telepathy.StreamEngine"
+#define STREAM_ENGINE_OBJECT_PATH "/org/freedesktop/Telepathy/StreamEngine"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpCall)
+typedef struct
+{
+ TpChannel *channel;
+ TpProxy *stream_engine;
+ TpDBusDaemon *dbus_daemon;
+ EmpathyTpGroup *group;
+ EmpathyContact *contact;
+ gboolean is_incoming;
+ guint status;
+ gboolean stream_engine_running;
+
+ EmpathyTpCallStream *audio;
+ EmpathyTpCallStream *video;
+} EmpathyTpCallPriv;
+
+enum
+{
+ PROP_0,
+ PROP_CHANNEL,
+ PROP_CONTACT,
+ PROP_IS_INCOMING,
+ PROP_STATUS,
+ PROP_AUDIO_STREAM,
+ PROP_VIDEO_STREAM
+};
+
+G_DEFINE_TYPE (EmpathyTpCall, empathy_tp_call, G_TYPE_OBJECT)
+
+static void
+tp_call_add_stream (EmpathyTpCall *call,
+ guint stream_id,
+ guint contact_handle,
+ guint stream_type,
+ guint stream_state,
+ guint stream_direction)
+{
+ EmpathyTpCallPriv *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_call_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_call_add_stream (EMPATHY_TP_CALL (call), stream_id, contact_handle,
+ stream_type, TP_MEDIA_STREAM_STATE_DISCONNECTED,
+ TP_MEDIA_STREAM_DIRECTION_NONE);
+}
+
+static void
+tp_call_stream_removed_cb (TpChannel *channel,
+ guint stream_id,
+ gpointer user_data,
+ GObject *call)
+{
+ EmpathyTpCallPriv *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_call_stream_state_changed_cb (TpChannel *proxy,
+ guint stream_id,
+ guint stream_state,
+ gpointer user_data,
+ GObject *call)
+{
+ EmpathyTpCallPriv *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_call_stream_direction_changed_cb (TpChannel *channel,
+ guint stream_id,
+ guint stream_direction,
+ guint pending_flags,
+ gpointer user_data,
+ GObject *call)
+{
+ EmpathyTpCallPriv *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_call_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_call_add_stream (EMPATHY_TP_CALL (call), stream_id, contact_handle,
+ stream_type, stream_state, stream_direction);
+ }
+}
+
+static void
+tp_call_request_streams_for_capabilities (EmpathyTpCall *call,
+ EmpathyCapabilities capabilities)
+{
+ EmpathyTpCallPriv *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_call_request_streams_cb, NULL, NULL,
+ G_OBJECT (call));
+
+ g_array_free (stream_types, TRUE);
+}
+
+static void
+tp_call_member_added_cb (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ const gchar *message,
+ EmpathyTpCall *call)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ g_object_ref (call);
+ if (!priv->contact && !empathy_contact_is_user (contact))
+ {
+ priv->contact = g_object_ref (contact);
+ priv->is_incoming = TRUE;
+ priv->status = EMPATHY_TP_CALL_STATUS_PENDING;
+ g_object_notify (G_OBJECT (call), "is-incoming");
+ g_object_notify (G_OBJECT (call), "contact");
+ g_object_notify (G_OBJECT (call), "status");
+ tp_call_request_streams_for_capabilities (call,
+ EMPATHY_CAPABILITIES_AUDIO);
+
+ }
+
+ if (priv->status == EMPATHY_TP_CALL_STATUS_PENDING &&
+ ((priv->is_incoming && contact != priv->contact) ||
+ (!priv->is_incoming && contact == priv->contact)))
+ {
+ priv->status = EMPATHY_TP_CALL_STATUS_ACCEPTED;
+ g_object_notify (G_OBJECT (call), "status");
+ }
+ g_object_unref (call);
+}
+
+static void
+tp_call_remote_pending_cb (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ const gchar *message,
+ EmpathyTpCall *call)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ g_object_ref (call);
+ if (!priv->contact && !empathy_contact_is_user (contact))
+ {
+ priv->contact = g_object_ref (contact);
+ priv->is_incoming = FALSE;
+ priv->status = EMPATHY_TP_CALL_STATUS_PENDING;
+ g_object_notify (G_OBJECT (call), "is-incoming");
+ g_object_notify (G_OBJECT (call), "contact");
+ g_object_notify (G_OBJECT (call), "status");
+ tp_call_request_streams_for_capabilities (call,
+ EMPATHY_CAPABILITIES_AUDIO);
+ }
+ g_object_unref (call);
+}
+
+static void
+tp_call_channel_invalidated_cb (TpChannel *channel,
+ GQuark domain,
+ gint code,
+ gchar *message,
+ EmpathyTpCall *call)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ DEBUG ("Channel invalidated: %s", message);
+ priv->status = EMPATHY_TP_CALL_STATUS_CLOSED;
+ g_object_notify (G_OBJECT (call), "status");
+}
+
+static void
+tp_call_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_call_close_channel (EmpathyTpCall *call)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ if (priv->status == EMPATHY_TP_CALL_STATUS_CLOSED)
+ return;
+
+ DEBUG ("Closing channel");
+
+ tp_cli_channel_call_close (priv->channel, -1,
+ NULL, NULL, NULL, NULL);
+
+ priv->status = EMPATHY_TP_CALL_STATUS_CLOSED;
+ g_object_notify (G_OBJECT (call), "status");
+}
+
+static void
+tp_call_stream_engine_invalidated_cb (TpProxy *stream_engine,
+ GQuark domain,
+ gint code,
+ gchar *message,
+ EmpathyTpCall *call)
+{
+ DEBUG ("Stream engine proxy invalidated: %s", message);
+ tp_call_close_channel (call);
+}
+
+static void
+tp_call_stream_engine_watch_name_owner_cb (TpDBusDaemon *daemon,
+ const gchar *name,
+ const gchar *new_owner,
+ gpointer call)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ /* G_STR_EMPTY(new_owner) means either stream-engine has not started yet or
+ * has crashed. We want to close the channel if stream-engine has crashed.
+ * */
+ DEBUG ("Watch SE: name='%s' SE running='%s' new_owner='%s'",
+ name, priv->stream_engine_running ? "yes" : "no",
+ new_owner ? new_owner : "none");
+ if (priv->stream_engine_running && G_STR_EMPTY (new_owner))
+ {
+ DEBUG ("Stream engine falled off the bus");
+ tp_call_close_channel (call);
+ return;
+ }
+
+ priv->stream_engine_running = !G_STR_EMPTY (new_owner);
+}
+
+static void
+tp_call_stream_engine_handle_channel (EmpathyTpCall *call)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+ gchar *channel_type;
+ gchar *object_path;
+ guint handle_type;
+ guint handle;
+ TpProxy *connection;
+
+ DEBUG ("Revving up the stream engine");
+
+ priv->stream_engine = g_object_new (TP_TYPE_PROXY,
+ "bus-name", STREAM_ENGINE_BUS_NAME,
+ "dbus-connection", tp_get_bus (),
+ "object-path", STREAM_ENGINE_OBJECT_PATH,
+ NULL);
+ tp_proxy_add_interface_by_id (priv->stream_engine,
+ EMP_IFACE_QUARK_STREAM_ENGINE);
+ tp_proxy_add_interface_by_id (priv->stream_engine,
+ EMP_IFACE_QUARK_CHANNEL_HANDLER);
+
+ g_signal_connect (priv->stream_engine, "invalidated",
+ G_CALLBACK (tp_call_stream_engine_invalidated_cb),
+ call);
+
+ /* FIXME: dbus daemon should be unique */
+ priv->dbus_daemon = tp_dbus_daemon_new (tp_get_bus ());
+ tp_dbus_daemon_watch_name_owner (priv->dbus_daemon, STREAM_ENGINE_BUS_NAME,
+ tp_call_stream_engine_watch_name_owner_cb,
+ call, NULL);
+
+ g_object_get (priv->channel,
+ "connection", &connection,
+ "channel-type", &channel_type,
+ "object-path", &object_path,
+ "handle_type", &handle_type,
+ "handle", &handle,
+ NULL);
+
+ emp_cli_channel_handler_call_handle_channel (priv->stream_engine, -1,
+ connection->bus_name,
+ connection->object_path,
+ channel_type, object_path, handle_type, handle,
+ tp_call_async_cb, "calling handle channel", NULL,
+ G_OBJECT (call));
+
+ g_object_unref (connection);
+ g_free (channel_type);
+ g_free (object_path);
+}
+
+static GObject *
+tp_call_constructor (GType type,
+ guint n_construct_params,
+ GObjectConstructParam *construct_params)
+{
+ GObject *object;
+ EmpathyTpCall *call;
+ EmpathyTpCallPriv *priv;
+
+ object = G_OBJECT_CLASS (empathy_tp_call_parent_class)->constructor (type,
+ n_construct_params, construct_params);
+
+ call = EMPATHY_TP_CALL (object);
+ priv = GET_PRIV (call);
+
+ /* Setup streamed media channel */
+ g_signal_connect (priv->channel, "invalidated",
+ G_CALLBACK (tp_call_channel_invalidated_cb), call);
+ tp_cli_channel_type_streamed_media_connect_to_stream_added (priv->channel,
+ tp_call_stream_added_cb, NULL, NULL, G_OBJECT (call), NULL);
+ tp_cli_channel_type_streamed_media_connect_to_stream_removed (priv->channel,
+ tp_call_stream_removed_cb, NULL, NULL, G_OBJECT (call), NULL);
+ tp_cli_channel_type_streamed_media_connect_to_stream_state_changed (priv->channel,
+ tp_call_stream_state_changed_cb, NULL, NULL, G_OBJECT (call), NULL);
+ tp_cli_channel_type_streamed_media_connect_to_stream_direction_changed (priv->channel,
+ tp_call_stream_direction_changed_cb, NULL, NULL, G_OBJECT (call), NULL);
+ tp_cli_channel_type_streamed_media_call_list_streams (priv->channel, -1,
+ tp_call_request_streams_cb, NULL, NULL, G_OBJECT (call));
+
+ /* Setup group interface */
+ priv->group = empathy_tp_group_new (priv->channel);
+
+ g_signal_connect (priv->group, "member-added",
+ G_CALLBACK (tp_call_member_added_cb), call);
+ g_signal_connect (priv->group, "remote-pending",
+ G_CALLBACK (tp_call_remote_pending_cb), call);
+
+ /* Start stream engine */
+ tp_call_stream_engine_handle_channel (call);
+
+ return object;
+}
+
+static void
+tp_call_finalize (GObject *object)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (object);
+
+ DEBUG ("Finalizing: %p", object);
+
+ g_slice_free (EmpathyTpCallStream, priv->audio);
+ g_slice_free (EmpathyTpCallStream, priv->video);
+ g_object_unref (priv->group);
+
+ if (priv->channel != NULL)
+ {
+ g_signal_handlers_disconnect_by_func (priv->channel,
+ tp_call_channel_invalidated_cb, object);
+ tp_call_close_channel (EMPATHY_TP_CALL (object));
+ g_object_unref (priv->channel);
+ }
+
+ if (priv->stream_engine != NULL)
+ {
+ g_signal_handlers_disconnect_by_func (priv->stream_engine,
+ tp_call_stream_engine_invalidated_cb, object);
+ g_object_unref (priv->stream_engine);
+ }
+
+ if (priv->contact != NULL)
+ g_object_unref (priv->contact);
+
+ if (priv->dbus_daemon != NULL)
+ {
+ tp_dbus_daemon_cancel_name_owner_watch (priv->dbus_daemon,
+ STREAM_ENGINE_BUS_NAME,
+ tp_call_stream_engine_watch_name_owner_cb,
+ object);
+ g_object_unref (priv->dbus_daemon);
+ }
+
+ (G_OBJECT_CLASS (empathy_tp_call_parent_class)->finalize) (object);
+}
+
+static void
+tp_call_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (object);
+
+ switch (prop_id)
+ {
+ case PROP_CHANNEL:
+ priv->channel = g_value_dup_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+tp_call_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (object);
+
+ switch (prop_id)
+ {
+ case PROP_CHANNEL:
+ g_value_set_object (value, priv->channel);
+ break;
+ case PROP_CONTACT:
+ g_value_set_object (value, priv->contact);
+ break;
+ case PROP_IS_INCOMING:
+ g_value_set_boolean (value, priv->is_incoming);
+ 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_call_class_init (EmpathyTpCallClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ emp_cli_init ();
+
+ object_class->constructor = tp_call_constructor;
+ object_class->finalize = tp_call_finalize;
+ object_class->set_property = tp_call_set_property;
+ object_class->get_property = tp_call_get_property;
+
+ g_type_class_add_private (klass, sizeof (EmpathyTpCallPriv));
+
+ 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_IS_INCOMING,
+ g_param_spec_boolean ("is-incoming", "Is media stream incoming",
+ "Is media stream incoming", FALSE, 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));
+}
+
+static void
+empathy_tp_call_init (EmpathyTpCall *call)
+{
+ EmpathyTpCallPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (call,
+ EMPATHY_TYPE_TP_CALL, EmpathyTpCallPriv);
+
+ call->priv = priv;
+ priv->status = EMPATHY_TP_CALL_STATUS_READYING;
+ priv->contact = NULL;
+ priv->stream_engine_running = FALSE;
+ priv->audio = g_slice_new0 (EmpathyTpCallStream);
+ priv->video = g_slice_new0 (EmpathyTpCallStream);
+ priv->audio->exists = FALSE;
+ priv->video->exists = FALSE;
+}
+
+EmpathyTpCall *
+empathy_tp_call_new (TpChannel *channel)
+{
+ g_return_val_if_fail (TP_IS_CHANNEL (channel), NULL);
+
+ return g_object_new (EMPATHY_TYPE_TP_CALL,
+ "channel", channel,
+ NULL);
+}
+
+void
+empathy_tp_call_accept_incoming_call (EmpathyTpCall *call)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+ EmpathyContact *self_contact;
+
+ g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+ g_return_if_fail (priv->status == EMPATHY_TP_CALL_STATUS_PENDING);
+
+ DEBUG ("Accepting incoming call");
+
+ self_contact = empathy_tp_group_get_self_contact (priv->group);
+ empathy_tp_group_add_member (priv->group, self_contact, NULL);
+ g_object_unref (self_contact);
+}
+
+void
+empathy_tp_call_request_video_stream_direction (EmpathyTpCall *call,
+ gboolean is_sending)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+ guint new_direction;
+
+ g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+ g_return_if_fail (priv->status == EMPATHY_TP_CALL_STATUS_ACCEPTED);
+
+ DEBUG ("Requesting video stream direction - is_sending: %d", is_sending);
+
+ if (!priv->video->exists)
+ {
+ if (is_sending)
+ tp_call_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_call_async_cb, NULL, NULL, G_OBJECT (call));
+}
+
+void
+empathy_tp_call_add_preview_video (EmpathyTpCall *call,
+ guint preview_video_socket_id)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+
+ DEBUG ("Adding preview video");
+
+ emp_cli_stream_engine_call_add_preview_window (priv->stream_engine, -1,
+ preview_video_socket_id,
+ tp_call_async_cb,
+ "adding preview window", NULL,
+ G_OBJECT (call));
+}
+
+void
+empathy_tp_call_remove_preview_video (EmpathyTpCall *call,
+ guint preview_video_socket_id)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+
+ DEBUG ("Removing preview video");
+
+ emp_cli_stream_engine_call_remove_preview_window (priv->stream_engine, -1,
+ preview_video_socket_id,
+ tp_call_async_cb,
+ "removing preview window", NULL,
+ G_OBJECT (call));
+}
+
+void
+empathy_tp_call_add_output_video (EmpathyTpCall *call,
+ guint output_video_socket_id)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+
+ DEBUG ("Adding output video - socket: %d", output_video_socket_id);
+
+ emp_cli_stream_engine_call_set_output_window (priv->stream_engine, -1,
+ TP_PROXY (priv->channel)->object_path,
+ priv->video->id, output_video_socket_id,
+ tp_call_async_cb,
+ "setting output window", NULL,
+ G_OBJECT (call));
+}
+
+void
+empathy_tp_call_set_output_volume (EmpathyTpCall *call,
+ guint volume)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+ g_return_if_fail (priv->status != EMPATHY_TP_CALL_STATUS_CLOSED);
+
+ DEBUG ("Setting output volume: %d", volume);
+
+ emp_cli_stream_engine_call_set_output_volume (priv->stream_engine, -1,
+ TP_PROXY (priv->channel)->object_path,
+ priv->audio->id, volume,
+ tp_call_async_cb,
+ "setting output volume", NULL,
+ G_OBJECT (call));
+}
+
+void
+empathy_tp_call_mute_output (EmpathyTpCall *call,
+ gboolean is_muted)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+
+ DEBUG ("Setting output mute: %d", is_muted);
+
+ emp_cli_stream_engine_call_mute_output (priv->stream_engine, -1,
+ TP_PROXY (priv->channel)->object_path,
+ priv->audio->id, is_muted,
+ tp_call_async_cb,
+ "muting output", NULL,
+ G_OBJECT (call));
+}
+
+void
+empathy_tp_call_mute_input (EmpathyTpCall *call,
+ gboolean is_muted)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+
+ DEBUG ("Setting input mute: %d", is_muted);
+
+ emp_cli_stream_engine_call_mute_input (priv->stream_engine, -1,
+ TP_PROXY (priv->channel)->object_path,
+ priv->audio->id, is_muted,
+ tp_call_async_cb,
+ "muting input", NULL,
+ G_OBJECT (call));
+}
+
+void
+empathy_tp_call_start_tone (EmpathyTpCall *call, TpDTMFEvent event)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+ g_return_if_fail (priv->status == EMPATHY_TP_CALL_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_call_async_cb,
+ "starting tone", NULL, G_OBJECT (call));
+}
+
+void
+empathy_tp_call_stop_tone (EmpathyTpCall *call)
+{
+ EmpathyTpCallPriv *priv = GET_PRIV (call);
+
+ g_return_if_fail (EMPATHY_IS_TP_CALL (call));
+ g_return_if_fail (priv->status == EMPATHY_TP_CALL_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_call_async_cb,
+ "stoping tone", NULL, G_OBJECT (call));
+}
+
diff --git a/trunk/libempathy/empathy-tp-call.h b/trunk/libempathy/empathy-tp-call.h
new file mode 100644
index 000000000..644d778fb
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-call.h
@@ -0,0 +1,92 @@
+/* -*- 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_CALL_H__
+#define __EMPATHY_TP_CALL_H__
+
+#include <glib.h>
+#include <telepathy-glib/channel.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_TP_CALL (empathy_tp_call_get_type ())
+#define EMPATHY_TP_CALL(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), \
+ EMPATHY_TYPE_TP_CALL, EmpathyTpCall))
+#define EMPATHY_TP_CALL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \
+ EMPATHY_TYPE_TP_CALL, EmpathyTpCallClass))
+#define EMPATHY_IS_TP_CALL(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), \
+ EMPATHY_TYPE_TP_CALL))
+#define EMPATHY_IS_TP_CALL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ EMPATHY_TYPE_TP_CALL))
+#define EMPATHY_TP_CALL_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), \
+ EMPATHY_TYPE_TP_CALL, EmpathyTpCallClass))
+
+typedef struct _EmpathyTpCall EmpathyTpCall;
+typedef struct _EmpathyTpCallClass EmpathyTpCallClass;
+
+struct _EmpathyTpCall {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyTpCallClass {
+ GObjectClass parent_class;
+};
+
+typedef enum
+{
+ EMPATHY_TP_CALL_STATUS_READYING,
+ EMPATHY_TP_CALL_STATUS_PENDING,
+ EMPATHY_TP_CALL_STATUS_ACCEPTED,
+ EMPATHY_TP_CALL_STATUS_CLOSED
+} EmpathyTpCallStatus;
+
+typedef struct
+{
+ gboolean exists;
+ guint id;
+ guint state;
+ guint direction;
+} EmpathyTpCallStream;
+
+GType empathy_tp_call_get_type (void) G_GNUC_CONST;
+EmpathyTpCall *empathy_tp_call_new (TpChannel *channel);
+
+void empathy_tp_call_accept_incoming_call (EmpathyTpCall *call);
+void empathy_tp_call_request_video_stream_direction (EmpathyTpCall *call,
+ gboolean is_sending);
+void empathy_tp_call_add_preview_video (EmpathyTpCall *call,
+ guint preview_video_socket_id);
+void empathy_tp_call_remove_preview_video (EmpathyTpCall *call,
+ guint preview_video_socket_id);
+void empathy_tp_call_add_output_video (EmpathyTpCall *call,
+ guint output_video_socket_id);
+void empathy_tp_call_set_output_volume (EmpathyTpCall *call, guint volume);
+void empathy_tp_call_mute_output (EmpathyTpCall *call, gboolean is_muted);
+void empathy_tp_call_mute_input (EmpathyTpCall *call, gboolean is_muted);
+void empathy_tp_call_start_tone (EmpathyTpCall *call, TpDTMFEvent event);
+void empathy_tp_call_stop_tone (EmpathyTpCall *call);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_TP_CALL_H__ */
diff --git a/trunk/libempathy/empathy-tp-chat.c b/trunk/libempathy/empathy-tp-chat.c
new file mode 100644
index 000000000..286896bbe
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-chat.c
@@ -0,0 +1,1230 @@
+/* -*- 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 "empathy-tp-chat.h"
+#include "empathy-contact-factory.h"
+#include "empathy-contact-list.h"
+#include "empathy-marshal.h"
+#include "empathy-time.h"
+#include "empathy-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_TP | EMPATHY_DEBUG_CHAT
+#include "empathy-debug.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpChat)
+typedef struct {
+ EmpathyContactFactory *factory;
+ EmpathyContact *user;
+ EmpathyContact *remote_contact;
+ EmpathyTpGroup *group;
+ McAccount *account;
+ TpChannel *channel;
+ gchar *id;
+ gboolean acknowledge;
+ gboolean listing_pending_messages;
+ GSList *message_queue;
+ gboolean had_properties_list;
+ GPtrArray *properties;
+ gboolean ready;
+ guint members_count;
+} EmpathyTpChatPriv;
+
+typedef struct {
+ gchar *name;
+ guint id;
+ TpPropertyFlags flags;
+ GValue *value;
+} TpChatProperty;
+
+static void tp_chat_iface_init (EmpathyContactListIface *iface);
+
+enum {
+ PROP_0,
+ PROP_CHANNEL,
+ PROP_ACKNOWLEDGE,
+ PROP_REMOTE_CONTACT,
+ PROP_READY,
+};
+
+enum {
+ MESSAGE_RECEIVED,
+ SEND_ERROR,
+ CHAT_STATE_CHANGED,
+ PROPERTY_CHANGED,
+ DESTROY,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE_WITH_CODE (EmpathyTpChat, empathy_tp_chat, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_CONTACT_LIST,
+ tp_chat_iface_init));
+
+static void
+tp_chat_invalidated_cb (TpProxy *proxy,
+ guint domain,
+ gint code,
+ gchar *message,
+ EmpathyTpChat *chat)
+{
+ DEBUG ("Channel invalidated: %s", message);
+ g_signal_emit (chat, signals[DESTROY], 0);
+}
+
+static void
+tp_chat_async_cb (TpChannel *proxy,
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ if (error) {
+ DEBUG ("Error %s: %s", (gchar*) user_data, error->message);
+ }
+}
+
+static void
+tp_chat_member_added_cb (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ const gchar *message,
+ EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ guint handle_type = 0;
+
+ priv->members_count++;
+ g_signal_emit_by_name (chat, "members-changed",
+ contact, actor, reason, message,
+ TRUE);
+
+ g_object_get (priv->channel, "handle-type", &handle_type, NULL);
+ if (handle_type == TP_HANDLE_TYPE_ROOM) {
+ return;
+ }
+
+ if (priv->members_count > 2 && priv->remote_contact) {
+ /* We now have more than 2 members, this is not a p2p chat
+ * anymore. Remove the remote-contact as it makes no sense, the
+ * EmpathyContactList interface must be used now. */
+ g_object_unref (priv->remote_contact);
+ priv->remote_contact = NULL;
+ g_object_notify (G_OBJECT (chat), "remote-contact");
+ }
+ if (priv->members_count <= 2 && !priv->remote_contact &&
+ !empathy_contact_is_user (contact)) {
+ /* This is a p2p chat, if it's not ourself that means this is
+ * the remote contact with who we are chatting. This is to
+ * avoid forcing the usage of the EmpathyContactList interface
+ * for p2p chats. */
+ priv->remote_contact = g_object_ref (contact);
+ g_object_notify (G_OBJECT (chat), "remote-contact");
+ }
+}
+
+static void
+tp_chat_member_removed_cb (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ const gchar *message,
+ EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ guint handle_type = 0;
+
+ priv->members_count--;
+ g_signal_emit_by_name (chat, "members-changed",
+ contact, actor, reason, message,
+ FALSE);
+
+ g_object_get (priv->channel, "handle-type", &handle_type, NULL);
+ if (handle_type == TP_HANDLE_TYPE_ROOM) {
+ return;
+ }
+
+ if (priv->members_count <= 2 && !priv->remote_contact) {
+ GList *members, *l;
+
+ /* We are not a MUC anymore, get the remote contact back */
+ members = empathy_tp_group_get_members (group);
+ for (l = members; l; l = l->next) {
+ if (!empathy_contact_is_user (l->data)) {
+ priv->remote_contact = g_object_ref (l->data);
+ g_object_notify (G_OBJECT (chat), "remote-contact");
+ break;
+ }
+ }
+ g_list_foreach (members, (GFunc) g_object_unref, NULL);
+ g_list_free (members);
+ }
+}
+
+static void
+tp_chat_local_pending_cb (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ const gchar *message,
+ EmpathyTpChat *chat)
+{
+ g_signal_emit_by_name (chat, "pendings-changed",
+ contact, actor, reason, message,
+ TRUE);
+}
+
+static void
+tp_chat_add (EmpathyContactList *list,
+ EmpathyContact *contact,
+ const gchar *message)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (list);
+
+ g_return_if_fail (EMPATHY_IS_TP_CHAT (list));
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ if (priv->group) {
+ empathy_tp_group_add_member (priv->group, contact, message);
+ }
+}
+
+static void
+tp_chat_remove (EmpathyContactList *list,
+ EmpathyContact *contact,
+ const gchar *message)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (list);
+
+ g_return_if_fail (EMPATHY_IS_TP_CHAT (list));
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ if (priv->group) {
+ empathy_tp_group_remove_member (priv->group, contact, message);
+ }
+}
+
+static GList *
+tp_chat_get_members (EmpathyContactList *list)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (list);
+ GList *members = NULL;
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (list), NULL);
+
+ if (priv->group) {
+ members = empathy_tp_group_get_members (priv->group);
+ } else {
+ members = g_list_prepend (members, g_object_ref (priv->user));
+ members = g_list_prepend (members, g_object_ref (priv->remote_contact));
+ }
+
+ return members;
+}
+
+static EmpathyMessage *
+tp_chat_build_message (EmpathyTpChat *chat,
+ guint type,
+ guint timestamp,
+ guint from_handle,
+ const gchar *message_body)
+{
+ EmpathyTpChatPriv *priv;
+ EmpathyMessage *message;
+ EmpathyContact *sender;
+
+ priv = GET_PRIV (chat);
+
+ if (from_handle == 0) {
+ sender = g_object_ref (priv->user);
+ } else {
+ sender = empathy_contact_factory_get_from_handle (priv->factory,
+ priv->account,
+ from_handle);
+ }
+
+ message = empathy_message_new (message_body);
+ empathy_message_set_tptype (message, type);
+ empathy_message_set_sender (message, sender);
+ empathy_message_set_receiver (message, priv->user);
+ empathy_message_set_timestamp (message, timestamp);
+
+ g_object_unref (sender);
+
+ return message;
+}
+
+static void
+tp_chat_sender_ready_notify_cb (EmpathyContact *contact,
+ GParamSpec *param_spec,
+ EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ EmpathyMessage *message;
+ EmpathyContactReady ready;
+ EmpathyContact *sender;
+ gboolean removed = FALSE;
+
+ /* Emit all messages queued until we find a message with not
+ * ready sender. When leaving this loop, sender is the first not ready
+ * contact queued and removed tells if at least one message got removed
+ * from the queue. */
+ while (priv->message_queue) {
+ message = priv->message_queue->data;
+ sender = empathy_message_get_sender (message);
+ ready = empathy_contact_get_ready (sender);
+
+ if (!(ready & EMPATHY_CONTACT_READY_NAME)) {
+ break;
+ }
+
+ DEBUG ("Queued message ready");
+ g_signal_emit (chat, signals[MESSAGE_RECEIVED], 0, message);
+ priv->message_queue = g_slist_remove (priv->message_queue,
+ message);
+ g_object_unref (message);
+ removed = TRUE;
+ }
+
+ if (removed) {
+ g_signal_handlers_disconnect_by_func (contact,
+ tp_chat_sender_ready_notify_cb,
+ chat);
+
+ if (priv->message_queue) {
+ g_signal_connect (sender, "notify::ready",
+ G_CALLBACK (tp_chat_sender_ready_notify_cb),
+ chat);
+ }
+ }
+}
+
+static void
+tp_chat_emit_or_queue_message (EmpathyTpChat *chat,
+ EmpathyMessage *message)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ EmpathyContact *sender;
+ EmpathyContactReady ready;
+
+ if (priv->message_queue != NULL) {
+ DEBUG ("Message queue not empty");
+ priv->message_queue = g_slist_append (priv->message_queue,
+ g_object_ref (message));
+ return;
+ }
+
+ sender = empathy_message_get_sender (message);
+ ready = empathy_contact_get_ready (sender);
+ if (ready & EMPATHY_CONTACT_READY_NAME) {
+ DEBUG ("Message queue empty and sender ready");
+ g_signal_emit (chat, signals[MESSAGE_RECEIVED], 0, message);
+ return;
+ }
+
+ DEBUG ("Sender not ready");
+ priv->message_queue = g_slist_append (priv->message_queue,
+ g_object_ref (message));
+ g_signal_connect (sender, "notify::ready",
+ G_CALLBACK (tp_chat_sender_ready_notify_cb),
+ chat);
+}
+
+static void
+tp_chat_received_cb (TpChannel *channel,
+ guint message_id,
+ guint timestamp,
+ guint from_handle,
+ guint message_type,
+ guint message_flags,
+ const gchar *message_body,
+ gpointer user_data,
+ GObject *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ EmpathyMessage *message;
+
+ if (priv->listing_pending_messages) {
+ return;
+ }
+
+ DEBUG ("Message received: %s", message_body);
+
+ message = tp_chat_build_message (EMPATHY_TP_CHAT (chat),
+ message_type,
+ timestamp,
+ from_handle,
+ message_body);
+
+ tp_chat_emit_or_queue_message (EMPATHY_TP_CHAT (chat), message);
+ g_object_unref (message);
+
+ if (priv->acknowledge) {
+ GArray *message_ids;
+
+ message_ids = g_array_new (FALSE, FALSE, sizeof (guint));
+ g_array_append_val (message_ids, message_id);
+ tp_cli_channel_type_text_call_acknowledge_pending_messages (priv->channel,
+ -1,
+ message_ids,
+ tp_chat_async_cb,
+ "acknowledging received message",
+ NULL,
+ chat);
+ g_array_free (message_ids, TRUE);
+ }
+}
+
+static void
+tp_chat_sent_cb (TpChannel *channel,
+ guint timestamp,
+ guint message_type,
+ const gchar *message_body,
+ gpointer user_data,
+ GObject *chat)
+{
+ EmpathyMessage *message;
+
+ DEBUG ("Message sent: %s", message_body);
+
+ message = tp_chat_build_message (EMPATHY_TP_CHAT (chat),
+ message_type,
+ timestamp,
+ 0,
+ message_body);
+
+ tp_chat_emit_or_queue_message (EMPATHY_TP_CHAT (chat), message);
+ g_object_unref (message);
+}
+
+static void
+tp_chat_send_error_cb (TpChannel *channel,
+ guint error_code,
+ guint timestamp,
+ guint message_type,
+ const gchar *message_body,
+ gpointer user_data,
+ GObject *chat)
+{
+ EmpathyMessage *message;
+
+ DEBUG ("Message sent error: %s (%d)", message_body, error_code);
+
+ message = tp_chat_build_message (EMPATHY_TP_CHAT (chat),
+ message_type,
+ timestamp,
+ 0,
+ message_body);
+
+ g_signal_emit (chat, signals[SEND_ERROR], 0, message, error_code);
+ g_object_unref (message);
+}
+
+static void
+tp_chat_state_changed_cb (TpChannel *channel,
+ guint handle,
+ guint state,
+ gpointer user_data,
+ GObject *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ EmpathyContact *contact;
+
+ contact = empathy_contact_factory_get_from_handle (priv->factory,
+ priv->account,
+ handle);
+
+ DEBUG ("Chat state changed for %s (%d): %d",
+ empathy_contact_get_name (contact), handle, state);
+
+ g_signal_emit (chat, signals[CHAT_STATE_CHANGED], 0, contact, state);
+ g_object_unref (contact);
+}
+
+static void
+tp_chat_list_pending_messages_cb (TpChannel *channel,
+ const GPtrArray *messages_list,
+ const GError *error,
+ gpointer user_data,
+ GObject *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ guint i;
+ GArray *message_ids = NULL;
+
+ priv->listing_pending_messages = FALSE;
+
+ if (error) {
+ DEBUG ("Error listing pending messages: %s", error->message);
+ return;
+ }
+
+ if (priv->acknowledge) {
+ message_ids = g_array_sized_new (FALSE, FALSE, sizeof (guint),
+ messages_list->len);
+ }
+
+ for (i = 0; i < messages_list->len; i++) {
+ EmpathyMessage *message;
+ GValueArray *message_struct;
+ const gchar *message_body;
+ guint message_id;
+ guint timestamp;
+ guint from_handle;
+ guint message_type;
+ guint message_flags;
+
+ message_struct = g_ptr_array_index (messages_list, i);
+
+ message_id = g_value_get_uint (g_value_array_get_nth (message_struct, 0));
+ timestamp = g_value_get_uint (g_value_array_get_nth (message_struct, 1));
+ from_handle = g_value_get_uint (g_value_array_get_nth (message_struct, 2));
+ message_type = g_value_get_uint (g_value_array_get_nth (message_struct, 3));
+ message_flags = g_value_get_uint (g_value_array_get_nth (message_struct, 4));
+ message_body = g_value_get_string (g_value_array_get_nth (message_struct, 5));
+
+ DEBUG ("Message pending: %s", message_body);
+
+ if (message_ids) {
+ g_array_append_val (message_ids, message_id);
+ }
+
+ message = tp_chat_build_message (EMPATHY_TP_CHAT (chat),
+ message_type,
+ timestamp,
+ from_handle,
+ message_body);
+
+ tp_chat_emit_or_queue_message (EMPATHY_TP_CHAT (chat), message);
+ g_object_unref (message);
+ }
+
+ if (message_ids) {
+ tp_cli_channel_type_text_call_acknowledge_pending_messages (priv->channel,
+ -1,
+ message_ids,
+ tp_chat_async_cb,
+ "acknowledging pending messages",
+ NULL,
+ chat);
+ g_array_free (message_ids, TRUE);
+ }
+}
+
+static void
+tp_chat_property_flags_changed_cb (TpProxy *proxy,
+ const GPtrArray *properties,
+ gpointer user_data,
+ GObject *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ guint i, j;
+
+ if (!priv->had_properties_list || !properties) {
+ return;
+ }
+
+ for (i = 0; i < properties->len; i++) {
+ GValueArray *prop_struct;
+ TpChatProperty *property;
+ guint id;
+ guint flags;
+
+ prop_struct = g_ptr_array_index (properties, i);
+ id = g_value_get_uint (g_value_array_get_nth (prop_struct, 0));
+ flags = g_value_get_uint (g_value_array_get_nth (prop_struct, 1));
+
+ for (j = 0; j < priv->properties->len; j++) {
+ property = g_ptr_array_index (priv->properties, j);
+ if (property->id == id) {
+ property->flags = flags;
+ DEBUG ("property %s flags changed: %d",
+ property->name, property->flags);
+ break;
+ }
+ }
+ }
+}
+
+static void
+tp_chat_properties_changed_cb (TpProxy *proxy,
+ const GPtrArray *properties,
+ gpointer user_data,
+ GObject *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ guint i, j;
+
+ if (!priv->had_properties_list || !properties) {
+ return;
+ }
+
+ for (i = 0; i < properties->len; i++) {
+ GValueArray *prop_struct;
+ TpChatProperty *property;
+ guint id;
+ GValue *src_value;
+
+ prop_struct = g_ptr_array_index (properties, i);
+ id = g_value_get_uint (g_value_array_get_nth (prop_struct, 0));
+ src_value = g_value_get_boxed (g_value_array_get_nth (prop_struct, 1));
+
+ for (j = 0; j < priv->properties->len; j++) {
+ property = g_ptr_array_index (priv->properties, j);
+ if (property->id == id) {
+ if (property->value) {
+ g_value_copy (src_value, property->value);
+ } else {
+ property->value = tp_g_value_slice_dup (src_value);
+ }
+
+ DEBUG ("property %s changed", property->name);
+ g_signal_emit (chat, signals[PROPERTY_CHANGED], 0,
+ property->name, property->value);
+ break;
+ }
+ }
+ }
+}
+
+static void
+tp_chat_get_properties_cb (TpProxy *proxy,
+ const GPtrArray *properties,
+ const GError *error,
+ gpointer user_data,
+ GObject *chat)
+{
+ if (error) {
+ DEBUG ("Error getting properties: %s", error->message);
+ return;
+ }
+
+ tp_chat_properties_changed_cb (proxy, properties, user_data, chat);
+}
+
+static void
+tp_chat_list_properties_cb (TpProxy *proxy,
+ const GPtrArray *properties,
+ const GError *error,
+ gpointer user_data,
+ GObject *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ GArray *ids;
+ guint i;
+
+ priv->had_properties_list = TRUE;
+
+ if (error) {
+ DEBUG ("Error listing properties: %s", error->message);
+ return;
+ }
+
+ ids = g_array_sized_new (FALSE, FALSE, sizeof (guint), properties->len);
+ priv->properties = g_ptr_array_sized_new (properties->len);
+ for (i = 0; i < properties->len; i++) {
+ GValueArray *prop_struct;
+ TpChatProperty *property;
+
+ prop_struct = g_ptr_array_index (properties, i);
+ property = g_slice_new0 (TpChatProperty);
+ property->id = g_value_get_uint (g_value_array_get_nth (prop_struct, 0));
+ property->name = g_value_dup_string (g_value_array_get_nth (prop_struct, 1));
+ property->flags = g_value_get_uint (g_value_array_get_nth (prop_struct, 3));
+
+ DEBUG ("Adding property name=%s id=%d flags=%d",
+ property->name, property->id, property->flags);
+ g_ptr_array_add (priv->properties, property);
+ if (property->flags & TP_PROPERTY_FLAG_READ) {
+ g_array_append_val (ids, property->id);
+ }
+ }
+
+ tp_cli_properties_interface_call_get_properties (proxy, -1,
+ ids,
+ tp_chat_get_properties_cb,
+ NULL, NULL,
+ chat);
+
+ g_array_free (ids, TRUE);
+}
+
+void
+empathy_tp_chat_set_property (EmpathyTpChat *chat,
+ const gchar *name,
+ const GValue *value)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ TpChatProperty *property;
+ guint i;
+
+ g_return_if_fail (priv->ready);
+
+ for (i = 0; i < priv->properties->len; i++) {
+ property = g_ptr_array_index (priv->properties, i);
+ if (!tp_strdiff (property->name, name)) {
+ GPtrArray *properties;
+ GValueArray *prop;
+ GValue id = {0, };
+ GValue dest_value = {0, };
+
+ if (!(property->flags & TP_PROPERTY_FLAG_WRITE)) {
+ break;
+ }
+
+ g_value_init (&id, G_TYPE_UINT);
+ g_value_init (&dest_value, G_TYPE_VALUE);
+ g_value_set_uint (&id, property->id);
+ g_value_set_boxed (&dest_value, value);
+
+ prop = g_value_array_new (2);
+ g_value_array_append (prop, &id);
+ g_value_array_append (prop, &dest_value);
+
+ properties = g_ptr_array_sized_new (1);
+ g_ptr_array_add (properties, prop);
+
+ DEBUG ("Set property %s", name);
+ tp_cli_properties_interface_call_set_properties (priv->channel, -1,
+ properties,
+ (tp_cli_properties_interface_callback_for_set_properties)
+ tp_chat_async_cb,
+ "Seting property", NULL,
+ G_OBJECT (chat));
+
+ g_ptr_array_free (properties, TRUE);
+ g_value_array_free (prop);
+
+ break;
+ }
+ }
+}
+
+static void
+tp_chat_channel_ready_cb (EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ TpConnection *connection;
+ guint handle, handle_type;
+
+ DEBUG ("Channel ready");
+
+ g_object_get (priv->channel,
+ "connection", &connection,
+ "handle", &handle,
+ "handle_type", &handle_type,
+ NULL);
+
+ if (handle_type != TP_HANDLE_TYPE_NONE && handle != 0) {
+ GArray *handles;
+ gchar **names;
+
+ handles = g_array_new (FALSE, FALSE, sizeof (guint));
+ g_array_append_val (handles, handle);
+ tp_cli_connection_run_inspect_handles (connection, -1,
+ handle_type, handles,
+ &names, NULL, NULL);
+ priv->id = *names;
+ g_array_free (handles, TRUE);
+ g_free (names);
+ }
+
+ if (handle_type == TP_HANDLE_TYPE_CONTACT && handle != 0) {
+ priv->remote_contact = empathy_contact_factory_get_from_handle (priv->factory,
+ priv->account,
+ handle);
+ g_object_notify (G_OBJECT (chat), "remote-contact");
+ }
+
+ if (tp_proxy_has_interface_by_id (priv->channel,
+ TP_IFACE_QUARK_CHANNEL_INTERFACE_GROUP)) {
+ priv->group = empathy_tp_group_new (priv->channel);
+
+ g_signal_connect (priv->group, "member-added",
+ G_CALLBACK (tp_chat_member_added_cb),
+ chat);
+ g_signal_connect (priv->group, "member-removed",
+ G_CALLBACK (tp_chat_member_removed_cb),
+ chat);
+ g_signal_connect (priv->group, "local-pending",
+ G_CALLBACK (tp_chat_local_pending_cb),
+ chat);
+ empathy_run_until_ready (priv->group);
+ } else {
+ priv->members_count = 2;
+ }
+
+ if (tp_proxy_has_interface_by_id (priv->channel,
+ TP_IFACE_QUARK_PROPERTIES_INTERFACE)) {
+ tp_cli_properties_interface_call_list_properties (priv->channel, -1,
+ tp_chat_list_properties_cb,
+ NULL, NULL,
+ G_OBJECT (chat));
+ tp_cli_properties_interface_connect_to_properties_changed (priv->channel,
+ tp_chat_properties_changed_cb,
+ NULL, NULL,
+ G_OBJECT (chat), NULL);
+ tp_cli_properties_interface_connect_to_property_flags_changed (priv->channel,
+ tp_chat_property_flags_changed_cb,
+ NULL, NULL,
+ G_OBJECT (chat), NULL);
+ }
+
+ priv->listing_pending_messages = TRUE;
+ tp_cli_channel_type_text_call_list_pending_messages (priv->channel, -1,
+ FALSE,
+ tp_chat_list_pending_messages_cb,
+ NULL, NULL,
+ G_OBJECT (chat));
+
+ tp_cli_channel_type_text_connect_to_received (priv->channel,
+ tp_chat_received_cb,
+ NULL, NULL,
+ G_OBJECT (chat), NULL);
+ tp_cli_channel_type_text_connect_to_sent (priv->channel,
+ tp_chat_sent_cb,
+ NULL, NULL,
+ G_OBJECT (chat), NULL);
+ tp_cli_channel_type_text_connect_to_send_error (priv->channel,
+ tp_chat_send_error_cb,
+ NULL, NULL,
+ G_OBJECT (chat), NULL);
+ tp_cli_channel_interface_chat_state_connect_to_chat_state_changed (priv->channel,
+ tp_chat_state_changed_cb,
+ NULL, NULL,
+ G_OBJECT (chat), NULL);
+ tp_cli_channel_interface_chat_state_connect_to_chat_state_changed (priv->channel,
+ tp_chat_state_changed_cb,
+ NULL, NULL,
+ G_OBJECT (chat), NULL);
+
+ priv->ready = TRUE;
+ g_object_notify (G_OBJECT (chat), "ready");
+}
+
+static void
+tp_chat_finalize (GObject *object)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (object);
+ guint i;
+
+ DEBUG ("Finalize: %p", object);
+
+ if (priv->acknowledge && priv->channel) {
+ DEBUG ("Closing channel...");
+ tp_cli_channel_call_close (priv->channel, -1,
+ tp_chat_async_cb,
+ "closing channel", NULL,
+ NULL);
+ }
+
+ if (priv->channel) {
+ g_signal_handlers_disconnect_by_func (priv->channel,
+ tp_chat_invalidated_cb,
+ object);
+ g_object_unref (priv->channel);
+ }
+
+ if (priv->properties) {
+ for (i = 0; i < priv->properties->len; i++) {
+ TpChatProperty *property;
+
+ property = g_ptr_array_index (priv->properties, i);
+ g_free (property->name);
+ if (property->value) {
+ tp_g_value_slice_free (property->value);
+ }
+ g_slice_free (TpChatProperty, property);
+ }
+ g_ptr_array_free (priv->properties, TRUE);
+ }
+
+ if (priv->remote_contact) {
+ g_object_unref (priv->remote_contact);
+ }
+ if (priv->group) {
+ g_object_unref (priv->group);
+ }
+
+ g_object_unref (priv->factory);
+ g_object_unref (priv->user);
+ g_object_unref (priv->account);
+ g_free (priv->id);
+
+ if (priv->message_queue) {
+ EmpathyMessage *message;
+ EmpathyContact *contact;
+
+ message = priv->message_queue->data;
+ contact = empathy_message_get_sender (message);
+ g_signal_handlers_disconnect_by_func (contact,
+ tp_chat_sender_ready_notify_cb,
+ object);
+ }
+ g_slist_foreach (priv->message_queue, (GFunc) g_object_unref, NULL);
+ g_slist_free (priv->message_queue);
+
+ G_OBJECT_CLASS (empathy_tp_chat_parent_class)->finalize (object);
+}
+
+static GObject *
+tp_chat_constructor (GType type,
+ guint n_props,
+ GObjectConstructParam *props)
+{
+ GObject *chat;
+ EmpathyTpChatPriv *priv;
+ gboolean channel_ready;
+
+ chat = G_OBJECT_CLASS (empathy_tp_chat_parent_class)->constructor (type, n_props, props);
+
+ priv = GET_PRIV (chat);
+ priv->account = empathy_channel_get_account (priv->channel);
+ priv->factory = empathy_contact_factory_new ();
+ priv->user = empathy_contact_factory_get_user (priv->factory, priv->account);
+
+ g_signal_connect (priv->channel, "invalidated",
+ G_CALLBACK (tp_chat_invalidated_cb),
+ chat);
+
+ g_object_get (priv->channel, "channel-ready", &channel_ready, NULL);
+ if (channel_ready) {
+ tp_chat_channel_ready_cb (EMPATHY_TP_CHAT (chat));
+ } else {
+ g_signal_connect_swapped (priv->channel, "notify::channel-ready",
+ G_CALLBACK (tp_chat_channel_ready_cb),
+ chat);
+ }
+
+ return chat;
+}
+
+static void
+tp_chat_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_CHANNEL:
+ g_value_set_object (value, priv->channel);
+ break;
+ case PROP_ACKNOWLEDGE:
+ g_value_set_boolean (value, priv->acknowledge);
+ break;
+ case PROP_REMOTE_CONTACT:
+ g_value_set_object (value, priv->remote_contact);
+ break;
+ case PROP_READY:
+ g_value_set_boolean (value, priv->ready);
+ 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)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_CHANNEL:
+ priv->channel = g_object_ref (g_value_get_object (value));
+ break;
+ case PROP_ACKNOWLEDGE:
+ priv->acknowledge = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+empathy_tp_chat_class_init (EmpathyTpChatClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = tp_chat_finalize;
+ object_class->constructor = tp_chat_constructor;
+ object_class->get_property = tp_chat_get_property;
+ object_class->set_property = tp_chat_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_CHANNEL,
+ g_param_spec_object ("channel",
+ "telepathy channel",
+ "The text channel for the chat",
+ TP_TYPE_CHANNEL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (object_class,
+ PROP_ACKNOWLEDGE,
+ g_param_spec_boolean ("acknowledge",
+ "acknowledge messages",
+ "Wheter or not received messages should be acknowledged",
+ FALSE,
+ G_PARAM_READWRITE));
+
+ 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_READY,
+ g_param_spec_boolean ("ready",
+ "Is the object ready",
+ "This object can't be used until this becomes true",
+ FALSE,
+ G_PARAM_READABLE));
+
+ /* Signals */
+ signals[MESSAGE_RECEIVED] =
+ g_signal_new ("message-received",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__OBJECT,
+ 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,
+ _empathy_marshal_VOID__OBJECT_UINT,
+ G_TYPE_NONE,
+ 2, EMPATHY_TYPE_MESSAGE, G_TYPE_UINT);
+
+ signals[CHAT_STATE_CHANGED] =
+ g_signal_new ("chat-state-changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _empathy_marshal_VOID__OBJECT_UINT,
+ G_TYPE_NONE,
+ 2, EMPATHY_TYPE_CONTACT, G_TYPE_UINT);
+
+ signals[PROPERTY_CHANGED] =
+ g_signal_new ("property-changed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _empathy_marshal_VOID__STRING_BOXED,
+ G_TYPE_NONE,
+ 2, G_TYPE_STRING, G_TYPE_VALUE);
+
+ signals[DESTROY] =
+ g_signal_new ("destroy",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ g_type_class_add_private (object_class, sizeof (EmpathyTpChatPriv));
+}
+
+static void
+empathy_tp_chat_init (EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (chat,
+ EMPATHY_TYPE_TP_CHAT, EmpathyTpChatPriv);
+
+ chat->priv = priv;
+}
+
+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;
+}
+
+EmpathyTpChat *
+empathy_tp_chat_new (TpChannel *channel)
+{
+ return g_object_new (EMPATHY_TYPE_TP_CHAT,
+ "channel", channel,
+ NULL);
+}
+
+const gchar *
+empathy_tp_chat_get_id (EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (chat), NULL);
+ g_return_val_if_fail (priv->ready, NULL);
+
+ return priv->id;
+}
+
+EmpathyContact *
+empathy_tp_chat_get_remote_contact (EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (chat), NULL);
+
+ return priv->remote_contact;
+}
+
+McAccount *
+empathy_tp_chat_get_account (EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (chat), FALSE);
+
+ return priv->account;
+}
+
+TpChannel *
+empathy_tp_chat_get_channel (EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (chat), NULL);
+
+ return priv->channel;
+}
+
+gboolean
+empathy_tp_chat_is_ready (EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (chat), FALSE);
+
+ return priv->ready;
+}
+
+guint
+empathy_tp_chat_get_members_count (EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CHAT (chat), 0);
+
+ return priv->members_count;
+}
+
+void
+empathy_tp_chat_set_acknowledge (EmpathyTpChat *chat,
+ gboolean acknowledge)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ g_return_if_fail (EMPATHY_IS_TP_CHAT (chat));
+
+ priv->acknowledge = acknowledge;
+ g_object_notify (G_OBJECT (chat), "acknowledge");
+}
+
+void
+empathy_tp_chat_emit_pendings (EmpathyTpChat *chat)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ g_return_if_fail (EMPATHY_IS_TP_CHAT (chat));
+ g_return_if_fail (priv->ready);
+
+ if (priv->listing_pending_messages) {
+ return;
+ }
+
+ priv->listing_pending_messages = TRUE;
+ tp_cli_channel_type_text_call_list_pending_messages (priv->channel, -1,
+ FALSE,
+ tp_chat_list_pending_messages_cb,
+ NULL, NULL,
+ G_OBJECT (chat));
+}
+
+void
+empathy_tp_chat_send (EmpathyTpChat *chat,
+ EmpathyMessage *message)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+ const gchar *message_body;
+ TpChannelTextMessageType message_type;
+
+ g_return_if_fail (EMPATHY_IS_TP_CHAT (chat));
+ g_return_if_fail (EMPATHY_IS_MESSAGE (message));
+ g_return_if_fail (priv->ready);
+
+ message_body = empathy_message_get_body (message);
+ message_type = empathy_message_get_tptype (message);
+
+ DEBUG ("Sending message: %s", message_body);
+ tp_cli_channel_type_text_call_send (priv->channel, -1,
+ message_type,
+ message_body,
+ tp_chat_async_cb,
+ "sending message", NULL,
+ G_OBJECT (chat));
+}
+
+void
+empathy_tp_chat_set_state (EmpathyTpChat *chat,
+ TpChannelChatState state)
+{
+ EmpathyTpChatPriv *priv = GET_PRIV (chat);
+
+ g_return_if_fail (EMPATHY_IS_TP_CHAT (chat));
+ g_return_if_fail (priv->ready);
+
+ DEBUG ("Set state: %d", state);
+ tp_cli_channel_interface_chat_state_call_set_chat_state (priv->channel, -1,
+ state,
+ tp_chat_async_cb,
+ "setting chat state",
+ NULL,
+ G_OBJECT (chat));
+}
+
diff --git a/trunk/libempathy/empathy-tp-chat.h b/trunk/libempathy/empathy-tp-chat.h
new file mode 100644
index 000000000..4aae240b8
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-chat.h
@@ -0,0 +1,76 @@
+/* -*- 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_CHAT_H__
+#define __EMPATHY_TP_CHAT_H__
+
+#include <glib.h>
+
+#include <telepathy-glib/channel.h>
+#include <telepathy-glib/enums.h>
+
+#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_TP_CHAT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_TP_CHAT, EmpathyTpChatClass))
+
+typedef struct _EmpathyTpChat EmpathyTpChat;
+typedef struct _EmpathyTpChatClass EmpathyTpChatClass;
+
+struct _EmpathyTpChat {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyTpChatClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_tp_chat_get_type (void) G_GNUC_CONST;
+EmpathyTpChat *empathy_tp_chat_new (TpChannel *channel);
+const gchar * empathy_tp_chat_get_id (EmpathyTpChat *chat);
+EmpathyContact*empathy_tp_chat_get_remote_contact (EmpathyTpChat *chat);
+McAccount * empathy_tp_chat_get_account (EmpathyTpChat *chat);
+TpChannel * empathy_tp_chat_get_channel (EmpathyTpChat *chat);
+gboolean empathy_tp_chat_is_ready (EmpathyTpChat *chat);
+guint empathy_tp_chat_get_members_count (EmpathyTpChat *chat);
+void empathy_tp_chat_set_acknowledge (EmpathyTpChat *chat,
+ gboolean acknowledge);
+void empathy_tp_chat_emit_pendings (EmpathyTpChat *chat);
+void empathy_tp_chat_send (EmpathyTpChat *chat,
+ EmpathyMessage *message);
+void empathy_tp_chat_set_state (EmpathyTpChat *chat,
+ TpChannelChatState state);
+void empathy_tp_chat_set_property (EmpathyTpChat *chat,
+ const gchar *name,
+ const GValue *value);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_TP_CHAT_H__ */
diff --git a/trunk/libempathy/empathy-tp-contact-factory.c b/trunk/libempathy/empathy-tp-contact-factory.c
new file mode 100644
index 000000000..7cf0b53cc
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-contact-factory.c
@@ -0,0 +1,1291 @@
+/* -*- 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/util.h>
+#include <telepathy-glib/connection.h>
+#include <libmissioncontrol/mission-control.h>
+
+#include "empathy-tp-contact-factory.h"
+#include "empathy-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_TP | EMPATHY_DEBUG_CONTACT
+#include "empathy-debug.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpContactFactory)
+typedef struct {
+ MissionControl *mc;
+ McAccount *account;
+ TpConnection *connection;
+ gboolean ready;
+
+ GList *contacts;
+ EmpathyContact *user;
+ gpointer token;
+} EmpathyTpContactFactoryPriv;
+
+G_DEFINE_TYPE (EmpathyTpContactFactory, empathy_tp_contact_factory, G_TYPE_OBJECT);
+
+enum {
+ PROP_0,
+ PROP_ACCOUNT,
+ PROP_READY
+};
+
+static EmpathyContact *
+tp_contact_factory_find_by_handle (EmpathyTpContactFactory *tp_factory,
+ guint handle)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+ GList *l;
+
+ for (l = priv->contacts; l; l = l->next) {
+ if (empathy_contact_get_handle (l->data) == handle) {
+ return l->data;
+ }
+ }
+
+ return NULL;
+}
+
+static EmpathyContact *
+tp_contact_factory_find_by_id (EmpathyTpContactFactory *tp_factory,
+ const gchar *id)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+ GList *l;
+
+ for (l = priv->contacts; l; l = l->next) {
+ if (!tp_strdiff (empathy_contact_get_id (l->data), id)) {
+ return l->data;
+ }
+ }
+
+ return NULL;
+}
+
+static void
+tp_contact_factory_weak_notify (gpointer data,
+ GObject *where_the_object_was)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (data);
+
+ DEBUG ("Remove finalized contact %p", where_the_object_was);
+
+ priv->contacts = g_list_remove (priv->contacts, where_the_object_was);
+}
+
+static void
+tp_contact_factory_presences_table_foreach (const gchar *state_str,
+ GHashTable *presences_table,
+ EmpathyContact *contact)
+{
+ const GValue *message;
+ const gchar *message_str = NULL;
+
+ empathy_contact_set_presence (contact,
+ empathy_presence_from_str (state_str));
+
+ message = g_hash_table_lookup (presences_table, "message");
+ if (message) {
+ message_str = g_value_get_string (message);
+ }
+
+ if (!G_STR_EMPTY (message_str)) {
+ empathy_contact_set_presence_message (contact, message_str);
+ } else {
+ empathy_contact_set_presence_message (contact, NULL);
+ }
+}
+
+static void
+tp_contact_factory_parse_presence_foreach (guint handle,
+ GValueArray *presence_struct,
+ EmpathyTpContactFactory *tp_factory)
+{
+ GHashTable *presences_table;
+ EmpathyContact *contact;
+
+ contact = tp_contact_factory_find_by_handle (tp_factory, handle);
+ if (!contact) {
+ return;
+ }
+
+ presences_table = g_value_get_boxed (g_value_array_get_nth (presence_struct, 1));
+
+ g_hash_table_foreach (presences_table,
+ (GHFunc) tp_contact_factory_presences_table_foreach,
+ contact);
+
+ DEBUG ("Changing presence for contact %s (%d) to '%s' (%d)",
+ empathy_contact_get_id (contact),
+ handle,
+ empathy_contact_get_presence_message (contact),
+ empathy_contact_get_presence (contact));
+}
+
+static void
+tp_contact_factory_get_presence_cb (TpConnection *connection,
+ GHashTable *handle_table,
+ const GError *error,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ if (error) {
+ DEBUG ("Error getting presence: %s", error->message);
+ if (error->domain == TP_DBUS_ERRORS &&
+ error->code == TP_DBUS_ERROR_NO_INTERFACE) {
+ guint *handles = user_data;
+
+ /* We have no presence iface, set default presence
+ * to available */
+ while (*handles != 0) {
+ EmpathyContact *contact;
+
+ contact = tp_contact_factory_find_by_handle (
+ (EmpathyTpContactFactory*) tp_factory,
+ *handles);
+ if (contact) {
+ empathy_contact_set_presence (contact,
+ MC_PRESENCE_AVAILABLE);
+ }
+
+ handles++;
+ }
+ }
+
+ return;
+ }
+
+ g_hash_table_foreach (handle_table,
+ (GHFunc) tp_contact_factory_parse_presence_foreach,
+ EMPATHY_TP_CONTACT_FACTORY (tp_factory));
+}
+
+static void
+tp_contact_factory_presence_update_cb (TpConnection *connection,
+ GHashTable *handle_table,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ g_hash_table_foreach (handle_table,
+ (GHFunc) tp_contact_factory_parse_presence_foreach,
+ EMPATHY_TP_CONTACT_FACTORY (tp_factory));
+}
+
+static void
+tp_contact_factory_set_aliases_cb (TpConnection *connection,
+ const GError *error,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ if (error) {
+ DEBUG ("Error setting alias: %s", error->message);
+ }
+}
+
+static void
+tp_contact_factory_request_aliases_cb (TpConnection *connection,
+ const gchar **contact_names,
+ const GError *error,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ guint *handles = user_data;
+ guint i = 0;
+ const gchar **name;
+
+ if (error) {
+ DEBUG ("Error requesting aliases: %s", error->message);
+
+ /* If we failed to get alias set it to NULL, like that if
+ * someone is waiting for the name to be ready it won't wait
+ * infinitely */
+ while (*handles != 0) {
+ EmpathyContact *contact;
+
+ contact = tp_contact_factory_find_by_handle (
+ (EmpathyTpContactFactory*) tp_factory,
+ *handles);
+ if (contact) {
+ empathy_contact_set_name (contact, NULL);
+ }
+
+ handles++;
+ }
+ return;
+ }
+
+ for (name = contact_names; *name; name++) {
+ EmpathyContact *contact;
+
+ contact = tp_contact_factory_find_by_handle (EMPATHY_TP_CONTACT_FACTORY (tp_factory),
+ handles[i]);
+ if (!contact) {
+ continue;
+ }
+
+ DEBUG ("Renaming contact %s (%d) to %s (request cb)",
+ empathy_contact_get_id (contact),
+ empathy_contact_get_handle (contact),
+ *name);
+
+ empathy_contact_set_name (contact, *name);
+
+ i++;
+ }
+}
+
+static void
+tp_contact_factory_aliases_changed_cb (TpConnection *connection,
+ const GPtrArray *renamed_handlers,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ EmpathyTpContactFactory *tp_factory = EMPATHY_TP_CONTACT_FACTORY (weak_object);
+ guint i;
+
+ for (i = 0; renamed_handlers->len > i; i++) {
+ guint handle;
+ const gchar *alias;
+ GValueArray *renamed_struct;
+ EmpathyContact *contact;
+
+ renamed_struct = g_ptr_array_index (renamed_handlers, i);
+ handle = g_value_get_uint (g_value_array_get_nth (renamed_struct, 0));
+ alias = g_value_get_string (g_value_array_get_nth (renamed_struct, 1));
+ contact = tp_contact_factory_find_by_handle (tp_factory, handle);
+
+ if (!contact) {
+ /* We don't know this contact, skip */
+ continue;
+ }
+
+ DEBUG ("Renaming contact %s (%d) to %s (changed cb)",
+ empathy_contact_get_id (contact),
+ handle, alias);
+
+ empathy_contact_set_name (contact, alias);
+ }
+}
+
+static void
+tp_contact_factory_set_avatar_cb (TpConnection *connection,
+ const gchar *token,
+ const GError *error,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ if (error) {
+ DEBUG ("Error setting avatar: %s", error->message);
+ }
+}
+
+static void
+tp_contact_factory_clear_avatar_cb (TpConnection *connection,
+ const GError *error,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ if (error) {
+ DEBUG ("Error clearing avatar: %s", error->message);
+ }
+}
+
+static void
+tp_contact_factory_avatar_retrieved_cb (TpConnection *connection,
+ guint handle,
+ const gchar *token,
+ const GArray *avatar_data,
+ const gchar *mime_type,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ EmpathyContact *contact;
+ EmpathyAvatar *avatar;
+
+ contact = tp_contact_factory_find_by_handle (EMPATHY_TP_CONTACT_FACTORY (tp_factory),
+ handle);
+ if (!contact) {
+ return;
+ }
+
+ DEBUG ("Avatar retrieved for contact %s (%d)",
+ empathy_contact_get_id (contact),
+ handle);
+
+ avatar = empathy_avatar_new (avatar_data->data,
+ avatar_data->len,
+ mime_type,
+ token);
+
+ empathy_contact_set_avatar (contact, avatar);
+ empathy_avatar_unref (avatar);
+}
+
+static void
+tp_contact_factory_request_avatars_cb (TpConnection *connection,
+ const GError *error,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ if (error) {
+ DEBUG ("Error requesting avatars: %s", error->message);
+ }
+}
+
+static gboolean
+tp_contact_factory_avatar_maybe_update (EmpathyTpContactFactory *tp_factory,
+ guint handle,
+ const gchar *token)
+{
+ EmpathyContact *contact;
+ EmpathyAvatar *avatar;
+
+ contact = tp_contact_factory_find_by_handle (tp_factory, handle);
+ if (!contact) {
+ return TRUE;
+ }
+
+ /* Check if we have an avatar */
+ if (G_STR_EMPTY (token)) {
+ empathy_contact_set_avatar (contact, NULL);
+ return TRUE;
+ }
+
+ /* Check if the avatar changed */
+ avatar = empathy_contact_get_avatar (contact);
+ if (avatar && !tp_strdiff (avatar->token, token)) {
+ return TRUE;
+ }
+
+ /* The avatar changed, search the new one in the cache */
+ avatar = empathy_avatar_new_from_cache (token);
+ if (avatar) {
+ /* Got from cache, use it */
+ empathy_contact_set_avatar (contact, avatar);
+ empathy_avatar_unref (avatar);
+ return TRUE;
+ }
+
+ /* Avatar is not up-to-date, we have to request it. */
+ return FALSE;
+}
+
+typedef struct {
+ EmpathyTpContactFactory *tp_factory;
+ GArray *handles;
+} TokensData;
+
+static void
+tp_contact_factory_avatar_tokens_foreach (gpointer key,
+ gpointer value,
+ gpointer user_data)
+{
+ TokensData *data = user_data;
+ const gchar *token = value;
+ guint handle = GPOINTER_TO_UINT (key);
+
+ if (!tp_contact_factory_avatar_maybe_update (data->tp_factory,
+ handle, token)) {
+ g_array_append_val (data->handles, handle);
+ }
+}
+
+static void
+tp_contact_factory_get_known_avatar_tokens_cb (TpConnection *connection,
+ GHashTable *tokens,
+ const GError *error,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ TokensData data;
+
+ if (error) {
+ DEBUG ("Error getting known avatars tokens: %s", error->message);
+ return;
+ }
+
+ data.tp_factory = EMPATHY_TP_CONTACT_FACTORY (tp_factory);
+ data.handles = g_array_new (FALSE, FALSE, sizeof (guint));
+ g_hash_table_foreach (tokens,
+ tp_contact_factory_avatar_tokens_foreach,
+ &data);
+
+ DEBUG ("Got %d tokens, need to request %d avatars",
+ g_hash_table_size (tokens), data.handles->len);
+
+ /* Request needed avatars */
+ if (data.handles->len > 0) {
+ tp_cli_connection_interface_avatars_call_request_avatars (connection,
+ -1,
+ data.handles,
+ tp_contact_factory_request_avatars_cb,
+ NULL, NULL,
+ tp_factory);
+ }
+
+ g_array_free (data.handles, TRUE);
+}
+
+static void
+tp_contact_factory_avatar_updated_cb (TpConnection *connection,
+ guint handle,
+ const gchar *new_token,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ GArray *handles;
+
+ if (tp_contact_factory_avatar_maybe_update (EMPATHY_TP_CONTACT_FACTORY (tp_factory),
+ handle, new_token)) {
+ /* Avatar was cached, nothing to do */
+ return;
+ }
+
+ DEBUG ("Need to request avatar for token %s", new_token);
+
+ handles = g_array_new (FALSE, FALSE, sizeof (guint));
+ g_array_append_val (handles, handle);
+
+ tp_cli_connection_interface_avatars_call_request_avatars (connection,
+ -1,
+ handles,
+ tp_contact_factory_request_avatars_cb,
+ NULL, NULL,
+ tp_factory);
+ g_array_free (handles, TRUE);
+}
+
+static void
+tp_contact_factory_update_capabilities (EmpathyTpContactFactory *tp_factory,
+ guint handle,
+ const gchar *channel_type,
+ guint generic,
+ guint specific)
+{
+ EmpathyContact *contact;
+ EmpathyCapabilities capabilities;
+
+ contact = tp_contact_factory_find_by_handle (tp_factory, handle);
+ if (!contact) {
+ return;
+ }
+
+ capabilities = empathy_contact_get_capabilities (contact);
+ capabilities &= ~EMPATHY_CAPABILITIES_UNKNOWN;
+
+ if (strcmp (channel_type, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA) == 0) {
+ capabilities &= ~EMPATHY_CAPABILITIES_AUDIO;
+ capabilities &= ~EMPATHY_CAPABILITIES_VIDEO;
+ if (specific & TP_CHANNEL_MEDIA_CAPABILITY_AUDIO) {
+ capabilities |= EMPATHY_CAPABILITIES_AUDIO;
+ }
+ if (specific & TP_CHANNEL_MEDIA_CAPABILITY_VIDEO) {
+ capabilities |= EMPATHY_CAPABILITIES_VIDEO;
+ }
+ }
+
+ DEBUG ("Changing capabilities for contact %s (%d) to %d",
+ empathy_contact_get_id (contact),
+ empathy_contact_get_handle (contact),
+ capabilities);
+
+ empathy_contact_set_capabilities (contact, capabilities);
+}
+
+static void
+tp_contact_factory_get_capabilities_cb (TpConnection *connection,
+ const GPtrArray *capabilities,
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ EmpathyTpContactFactory *tp_factory = EMPATHY_TP_CONTACT_FACTORY (weak_object);
+ guint i;
+
+ if (error) {
+ DEBUG ("Error getting capabilities: %s", error->message);
+ /* FIXME Should set the capabilities of the contacts for which this request
+ * originated to NONE */
+ return;
+ }
+
+ for (i = 0; i < capabilities->len; i++) {
+ GValueArray *values;
+ guint handle;
+ const gchar *channel_type;
+ guint generic;
+ guint specific;
+
+ values = g_ptr_array_index (capabilities, i);
+ handle = g_value_get_uint (g_value_array_get_nth (values, 0));
+ channel_type = g_value_get_string (g_value_array_get_nth (values, 1));
+ generic = g_value_get_uint (g_value_array_get_nth (values, 2));
+ specific = g_value_get_uint (g_value_array_get_nth (values, 3));
+
+ tp_contact_factory_update_capabilities (tp_factory,
+ handle,
+ channel_type,
+ generic,
+ specific);
+ }
+}
+
+static void
+tp_contact_factory_capabilities_changed_cb (TpConnection *connection,
+ const GPtrArray *capabilities,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ EmpathyTpContactFactory *tp_factory = EMPATHY_TP_CONTACT_FACTORY (weak_object);
+ guint i;
+
+ for (i = 0; i < capabilities->len; i++) {
+ GValueArray *values;
+ guint handle;
+ const gchar *channel_type;
+ guint generic;
+ guint specific;
+
+ values = g_ptr_array_index (capabilities, i);
+ handle = g_value_get_uint (g_value_array_get_nth (values, 0));
+ channel_type = g_value_get_string (g_value_array_get_nth (values, 1));
+ generic = g_value_get_uint (g_value_array_get_nth (values, 3));
+ specific = g_value_get_uint (g_value_array_get_nth (values, 5));
+
+ tp_contact_factory_update_capabilities (tp_factory,
+ handle,
+ channel_type,
+ generic,
+ specific);
+ }
+}
+
+static void
+tp_contact_factory_request_everything (EmpathyTpContactFactory *tp_factory,
+ const GArray *handles)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+ guint *dup_handles;
+
+ g_return_if_fail (priv->ready);
+
+ dup_handles = g_malloc0 ((handles->len + 1) * sizeof (guint));
+ g_memmove (dup_handles, handles->data, handles->len * sizeof (guint));
+ tp_cli_connection_interface_presence_call_get_presence (priv->connection,
+ -1,
+ handles,
+ tp_contact_factory_get_presence_cb,
+ dup_handles, g_free,
+ G_OBJECT (tp_factory));
+
+ /* FIXME: Sometimes the dbus call timesout because CM takes
+ * too much time to request all aliases from the server,
+ * that's why we increase the timeout here. See fd.o bug #14795 */
+ dup_handles = g_malloc0 ((handles->len + 1) * sizeof (guint));
+ g_memmove (dup_handles, handles->data, handles->len * sizeof (guint));
+ tp_cli_connection_interface_aliasing_call_request_aliases (priv->connection,
+ 5*60*1000,
+ handles,
+ tp_contact_factory_request_aliases_cb,
+ dup_handles, g_free,
+ G_OBJECT (tp_factory));
+
+ tp_cli_connection_interface_avatars_call_get_known_avatar_tokens (priv->connection,
+ -1,
+ handles,
+ tp_contact_factory_get_known_avatar_tokens_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory));
+
+ tp_cli_connection_interface_capabilities_call_get_capabilities (priv->connection,
+ -1,
+ handles,
+ tp_contact_factory_get_capabilities_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory));
+}
+
+static void
+tp_contact_factory_list_free (gpointer data)
+{
+ GList *l = data;
+
+ g_list_foreach (l, (GFunc) g_object_unref, NULL);
+ g_list_free (l);
+}
+
+static void
+tp_contact_factory_request_handles_cb (TpConnection *connection,
+ const GArray *handles,
+ const GError *error,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ GList *contacts = user_data;
+ GList *l;
+ guint i = 0;
+
+ if (error) {
+ DEBUG ("Failed to request handles: %s", error->message);
+ return;
+ }
+
+ for (l = contacts; l; l = l->next) {
+ guint handle;
+
+ handle = g_array_index (handles, guint, i);
+ empathy_contact_set_handle (l->data, handle);
+
+ i++;
+ }
+
+ tp_contact_factory_request_everything (EMPATHY_TP_CONTACT_FACTORY (tp_factory),
+ handles);
+}
+
+static void
+tp_contact_factory_inspect_handles_cb (TpConnection *connection,
+ const gchar **ids,
+ const GError *error,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ const gchar **id;
+ GList *contacts = user_data;
+ GList *l;
+
+ if (error) {
+ DEBUG ("Failed to inspect handles: %s", error->message);
+ return;
+ }
+
+ id = ids;
+ for (l = contacts; l; l = l->next) {
+ empathy_contact_set_id (l->data, *id);
+ id++;
+ }
+}
+
+static void
+tp_contact_factory_disconnect_contact_foreach (gpointer data,
+ gpointer user_data)
+{
+ EmpathyContact *contact = data;
+
+ empathy_contact_set_presence (contact, MC_PRESENCE_UNSET);
+ empathy_contact_set_handle (contact, 0);
+}
+
+static void
+tp_contact_factory_connection_invalidated_cb (EmpathyTpContactFactory *tp_factory)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+
+ DEBUG ("Connection invalidated");
+
+ g_object_unref (priv->connection);
+ priv->connection = NULL;
+ priv->ready = FALSE;
+ g_object_notify (G_OBJECT (tp_factory), "ready");
+
+
+ g_list_foreach (priv->contacts,
+ tp_contact_factory_disconnect_contact_foreach,
+ tp_factory);
+}
+
+
+static void
+tp_contact_factory_got_self_handle_cb (TpConnection *proxy,
+ guint handle,
+ const GError *error,
+ gpointer user_data,
+ GObject *tp_factory)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+ GList *l;
+ GArray *handle_needed;
+ GArray *id_needed;
+ GList *handle_needed_contacts = NULL;
+ GList *id_needed_contacts = NULL;
+
+ if (error) {
+ DEBUG ("Failed to get self handles: %s", error->message);
+ return;
+ }
+
+ DEBUG ("Connection ready");
+
+ empathy_contact_set_handle (priv->user, handle);
+ priv->ready = TRUE;
+ g_object_notify (tp_factory, "ready");
+
+ /* Connect signals */
+ tp_cli_connection_interface_aliasing_connect_to_aliases_changed (priv->connection,
+ tp_contact_factory_aliases_changed_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory),
+ NULL);
+ tp_cli_connection_interface_avatars_connect_to_avatar_updated (priv->connection,
+ tp_contact_factory_avatar_updated_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory),
+ NULL);
+ tp_cli_connection_interface_avatars_connect_to_avatar_retrieved (priv->connection,
+ tp_contact_factory_avatar_retrieved_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory),
+ NULL);
+ tp_cli_connection_interface_presence_connect_to_presence_update (priv->connection,
+ tp_contact_factory_presence_update_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory),
+ NULL);
+ tp_cli_connection_interface_capabilities_connect_to_capabilities_changed (priv->connection,
+ tp_contact_factory_capabilities_changed_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory),
+ NULL);
+
+ /* Request needed info for all existing contacts */
+ handle_needed = g_array_new (TRUE, FALSE, sizeof (gchar*));
+ id_needed = g_array_new (FALSE, FALSE, sizeof (guint));
+ for (l = priv->contacts; l; l = l->next) {
+ EmpathyContact *contact;
+ guint handle;
+ const gchar *id;
+
+ contact = l->data;
+ handle = empathy_contact_get_handle (contact);
+ id = empathy_contact_get_id (contact);
+ if (handle == 0) {
+ g_assert (!G_STR_EMPTY (id));
+ g_array_append_val (handle_needed, id);
+ handle_needed_contacts = g_list_prepend (handle_needed_contacts,
+ g_object_ref (contact));
+ }
+ if (G_STR_EMPTY (id)) {
+ g_array_append_val (id_needed, handle);
+ id_needed_contacts = g_list_prepend (id_needed_contacts,
+ g_object_ref (contact));
+ }
+ }
+ handle_needed_contacts = g_list_reverse (handle_needed_contacts);
+ id_needed_contacts = g_list_reverse (id_needed_contacts);
+
+ tp_cli_connection_call_request_handles (priv->connection,
+ -1,
+ TP_HANDLE_TYPE_CONTACT,
+ (const gchar**) handle_needed->data,
+ tp_contact_factory_request_handles_cb,
+ handle_needed_contacts, tp_contact_factory_list_free,
+ G_OBJECT (tp_factory));
+
+ tp_contact_factory_request_everything ((EmpathyTpContactFactory*) tp_factory,
+ id_needed);
+ tp_cli_connection_call_inspect_handles (priv->connection,
+ -1,
+ TP_HANDLE_TYPE_CONTACT,
+ id_needed,
+ tp_contact_factory_inspect_handles_cb,
+ id_needed_contacts, tp_contact_factory_list_free,
+ G_OBJECT (tp_factory));
+
+ g_array_free (handle_needed, TRUE);
+ g_array_free (id_needed, TRUE);
+}
+
+static void
+tp_contact_factory_connection_ready_cb (EmpathyTpContactFactory *tp_factory)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+
+ /* Get our own handle */
+ tp_cli_connection_call_get_self_handle (priv->connection,
+ -1,
+ tp_contact_factory_got_self_handle_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory));
+}
+
+static void
+tp_contact_factory_status_updated (EmpathyTpContactFactory *tp_factory)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+ gboolean connection_ready;
+
+ if (priv->connection) {
+ /* We already have our connection object */
+ return;
+ }
+
+ priv->connection = mission_control_get_tpconnection (priv->mc, priv->account, NULL);
+ if (!priv->connection) {
+ return;
+ }
+
+ /* We got a new connection, wait for it to be ready */
+ g_signal_connect_swapped (priv->connection, "invalidated",
+ G_CALLBACK (tp_contact_factory_connection_invalidated_cb),
+ tp_factory);
+
+ g_object_get (priv->connection, "connection-ready", &connection_ready, NULL);
+ if (connection_ready) {
+ tp_contact_factory_connection_ready_cb (tp_factory);
+ } else {
+ g_signal_connect_swapped (priv->connection, "notify::connection-ready",
+ G_CALLBACK (tp_contact_factory_connection_ready_cb),
+ tp_factory);
+ }
+}
+
+static void
+tp_contact_factory_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyTpContactFactory *tp_factory)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+ McAccount *account;
+
+ account = mc_account_lookup (unique_name);
+ if (account && empathy_account_equal (account, priv->account)) {
+ tp_contact_factory_status_updated (tp_factory);
+ }
+ g_object_unref (account);
+}
+
+static void
+tp_contact_factory_add_contact (EmpathyTpContactFactory *tp_factory,
+ EmpathyContact *contact)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+
+ g_object_weak_ref (G_OBJECT (contact),
+ tp_contact_factory_weak_notify,
+ tp_factory);
+ priv->contacts = g_list_prepend (priv->contacts, contact);
+
+ DEBUG ("Contact added: %s (%d)",
+ empathy_contact_get_id (contact),
+ empathy_contact_get_handle (contact));
+}
+
+static void
+tp_contact_factory_hold_handles_cb (TpConnection *connection,
+ const GError *error,
+ gpointer userdata,
+ GObject *tp_factory)
+{
+ if (error) {
+ DEBUG ("Failed to hold handles: %s", error->message);
+ }
+}
+
+EmpathyContact *
+empathy_tp_contact_factory_get_user (EmpathyTpContactFactory *tp_factory)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CONTACT_FACTORY (tp_factory), NULL);
+
+ return g_object_ref (priv->user);
+}
+
+EmpathyContact *
+empathy_tp_contact_factory_get_from_id (EmpathyTpContactFactory *tp_factory,
+ const gchar *id)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+ EmpathyContact *contact;
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CONTACT_FACTORY (tp_factory), NULL);
+ g_return_val_if_fail (id != NULL, NULL);
+
+ /* Check if the contact already exists */
+ contact = tp_contact_factory_find_by_id (tp_factory, id);
+ if (contact) {
+ return g_object_ref (contact);
+ }
+
+ /* Create new contact */
+ contact = g_object_new (EMPATHY_TYPE_CONTACT,
+ "account", priv->account,
+ "id", id,
+ NULL);
+ tp_contact_factory_add_contact (tp_factory, contact);
+
+ if (priv->ready) {
+ const gchar *contact_ids[] = {id, NULL};
+ GList *contacts;
+
+ contacts = g_list_prepend (NULL, g_object_ref (contact));
+ tp_cli_connection_call_request_handles (priv->connection,
+ -1,
+ TP_HANDLE_TYPE_CONTACT,
+ contact_ids,
+ tp_contact_factory_request_handles_cb,
+ contacts, tp_contact_factory_list_free,
+ G_OBJECT (tp_factory));
+ }
+
+ return contact;
+}
+
+EmpathyContact *
+empathy_tp_contact_factory_get_from_handle (EmpathyTpContactFactory *tp_factory,
+ guint handle)
+{
+ EmpathyContact *contact;
+ GArray *handles;
+ GList *contacts;
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CONTACT_FACTORY (tp_factory), NULL);
+
+ handles = g_array_new (FALSE, FALSE, sizeof (guint));
+ g_array_append_val (handles, handle);
+
+ contacts = empathy_tp_contact_factory_get_from_handles (tp_factory, handles);
+ g_array_free (handles, TRUE);
+
+ contact = contacts ? contacts->data : NULL;
+ g_list_free (contacts);
+
+ return contact;
+}
+
+GList *
+empathy_tp_contact_factory_get_from_handles (EmpathyTpContactFactory *tp_factory,
+ const GArray *handles)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+ GList *contacts = NULL;
+ GArray *new_handles;
+ GList *new_contacts = NULL;
+ guint i;
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CONTACT_FACTORY (tp_factory), NULL);
+ g_return_val_if_fail (handles != NULL, NULL);
+
+ /* Search all contacts we already have */
+ new_handles = g_array_new (FALSE, FALSE, sizeof (guint));
+ for (i = 0; i < handles->len; i++) {
+ EmpathyContact *contact;
+ guint handle;
+
+ handle = g_array_index (handles, guint, i);
+ if (handle == 0) {
+ continue;
+ }
+
+ contact = tp_contact_factory_find_by_handle (tp_factory, handle);
+ if (contact) {
+ contacts = g_list_prepend (contacts, g_object_ref (contact));
+ } else {
+ g_array_append_val (new_handles, handle);
+ }
+ }
+
+ if (new_handles->len == 0) {
+ g_array_free (new_handles, TRUE);
+ return contacts;
+ }
+
+ /* Create new contacts */
+ for (i = 0; i < new_handles->len; i++) {
+ EmpathyContact *contact;
+ guint handle;
+
+ handle = g_array_index (new_handles, guint, i);
+
+ contact = g_object_new (EMPATHY_TYPE_CONTACT,
+ "account", priv->account,
+ "handle", handle,
+ NULL);
+ tp_contact_factory_add_contact (tp_factory, contact);
+ contacts = g_list_prepend (contacts, contact);
+ new_contacts = g_list_prepend (new_contacts, g_object_ref (contact));
+ }
+ new_contacts = g_list_reverse (new_contacts);
+
+ if (priv->ready) {
+ /* Get the IDs of all new handles */
+ tp_cli_connection_call_inspect_handles (priv->connection,
+ -1,
+ TP_HANDLE_TYPE_CONTACT,
+ new_handles,
+ tp_contact_factory_inspect_handles_cb,
+ new_contacts, tp_contact_factory_list_free,
+ G_OBJECT (tp_factory));
+
+ /* Hold all new handles. */
+ /* FIXME: Should be unholded when removed from the factory */
+ tp_cli_connection_call_hold_handles (priv->connection,
+ -1,
+ TP_HANDLE_TYPE_CONTACT,
+ new_handles,
+ tp_contact_factory_hold_handles_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory));
+
+ tp_contact_factory_request_everything (tp_factory, new_handles);
+ }
+
+ return contacts;
+}
+
+void
+empathy_tp_contact_factory_set_alias (EmpathyTpContactFactory *tp_factory,
+ EmpathyContact *contact,
+ const gchar *alias)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+ GHashTable *new_alias;
+ guint handle;
+
+ g_return_if_fail (EMPATHY_IS_TP_CONTACT_FACTORY (tp_factory));
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+ g_return_if_fail (priv->ready);
+ g_return_if_fail (empathy_account_equal (empathy_contact_get_account (contact),
+ priv->account));
+
+ handle = empathy_contact_get_handle (contact);
+
+ DEBUG ("Setting alias for contact %s (%d) to %s",
+ empathy_contact_get_id (contact),
+ handle, alias);
+
+ new_alias = g_hash_table_new_full (g_direct_hash,
+ g_direct_equal,
+ NULL,
+ g_free);
+
+ g_hash_table_insert (new_alias,
+ GUINT_TO_POINTER (handle),
+ g_strdup (alias));
+
+ tp_cli_connection_interface_aliasing_call_set_aliases (priv->connection,
+ -1,
+ new_alias,
+ tp_contact_factory_set_aliases_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory));
+
+ g_hash_table_destroy (new_alias);
+}
+
+void
+empathy_tp_contact_factory_set_avatar (EmpathyTpContactFactory *tp_factory,
+ const gchar *data,
+ gsize size,
+ const gchar *mime_type)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+
+ g_return_if_fail (EMPATHY_IS_TP_CONTACT_FACTORY (tp_factory));
+ g_return_if_fail (priv->ready);
+
+ if (data && size > 0 && size < G_MAXUINT) {
+ GArray avatar;
+
+ avatar.data = (gchar*) data;
+ avatar.len = size;
+
+ DEBUG ("Setting avatar on account %s",
+ mc_account_get_unique_name (priv->account));
+
+ tp_cli_connection_interface_avatars_call_set_avatar (priv->connection,
+ -1,
+ &avatar,
+ mime_type,
+ tp_contact_factory_set_avatar_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory));
+ } else {
+ DEBUG ("Clearing avatar on account %s",
+ mc_account_get_unique_name (priv->account));
+
+ tp_cli_connection_interface_avatars_call_clear_avatar (priv->connection,
+ -1,
+ tp_contact_factory_clear_avatar_cb,
+ NULL, NULL,
+ G_OBJECT (tp_factory));
+ }
+}
+
+gboolean
+empathy_tp_contact_factory_is_ready (EmpathyTpContactFactory *tp_factory)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (tp_factory);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CONTACT_FACTORY (tp_factory), FALSE);
+
+ return priv->ready;
+}
+
+static void
+tp_contact_factory_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_ACCOUNT:
+ g_value_set_object (value, priv->account);
+ break;
+ case PROP_READY:
+ g_value_set_boolean (value, priv->ready);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+tp_contact_factory_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_ACCOUNT:
+ priv->account = g_object_ref (g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+tp_contact_factory_finalize (GObject *object)
+{
+ EmpathyTpContactFactoryPriv *priv = GET_PRIV (object);
+ GList *l;
+
+ DEBUG ("Finalized: %p (%s)", object,
+ mc_account_get_normalized_name (priv->account));
+
+ empathy_disconnect_account_status_changed (priv->token);
+
+ for (l = priv->contacts; l; l = l->next) {
+ g_object_weak_unref (G_OBJECT (l->data),
+ tp_contact_factory_weak_notify,
+ object);
+ }
+
+ g_list_free (priv->contacts);
+ g_object_unref (priv->mc);
+ g_object_unref (priv->account);
+ g_object_unref (priv->user);
+
+ if (priv->connection) {
+ g_signal_handlers_disconnect_by_func (priv->connection,
+ tp_contact_factory_connection_invalidated_cb,
+ object);
+ g_object_unref (priv->connection);
+ }
+
+ G_OBJECT_CLASS (empathy_tp_contact_factory_parent_class)->finalize (object);
+}
+
+static GObject *
+tp_contact_factory_constructor (GType type,
+ guint n_props,
+ GObjectConstructParam *props)
+{
+ GObject *tp_factory;
+ EmpathyTpContactFactoryPriv *priv;
+
+ tp_factory = G_OBJECT_CLASS (empathy_tp_contact_factory_parent_class)->constructor (type, n_props, props);
+ priv = GET_PRIV (tp_factory);
+
+ priv->ready = FALSE;
+ priv->user = empathy_contact_new (priv->account);
+ empathy_contact_set_is_user (priv->user, TRUE);
+ tp_contact_factory_add_contact ((EmpathyTpContactFactory*) tp_factory, priv->user);
+ tp_contact_factory_status_updated (EMPATHY_TP_CONTACT_FACTORY (tp_factory));
+
+ return tp_factory;
+}
+
+static void
+empathy_tp_contact_factory_class_init (EmpathyTpContactFactoryClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = tp_contact_factory_finalize;
+ object_class->constructor = tp_contact_factory_constructor;
+ object_class->get_property = tp_contact_factory_get_property;
+ object_class->set_property = tp_contact_factory_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_ACCOUNT,
+ g_param_spec_object ("account",
+ "Factory's Account",
+ "The account associated with the factory",
+ MC_TYPE_ACCOUNT,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (object_class,
+ PROP_READY,
+ g_param_spec_boolean ("ready",
+ "Wheter the factor is ready",
+ "Is the factory ready",
+ FALSE,
+ G_PARAM_READABLE));
+
+ g_type_class_add_private (object_class, sizeof (EmpathyTpContactFactoryPriv));
+}
+
+static void
+empathy_tp_contact_factory_init (EmpathyTpContactFactory *tp_factory)
+{
+ EmpathyTpContactFactoryPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (tp_factory,
+ EMPATHY_TYPE_TP_CONTACT_FACTORY, EmpathyTpContactFactoryPriv);
+
+ tp_factory->priv = priv;
+ priv->mc = empathy_mission_control_new ();
+ priv->token = empathy_connect_to_account_status_changed (priv->mc,
+ G_CALLBACK (tp_contact_factory_status_changed_cb),
+ tp_factory, NULL);
+}
+
+EmpathyTpContactFactory *
+empathy_tp_contact_factory_new (McAccount *account)
+{
+ return g_object_new (EMPATHY_TYPE_TP_CONTACT_FACTORY,
+ "account", account,
+ NULL);
+}
+
diff --git a/trunk/libempathy/empathy-tp-contact-factory.h b/trunk/libempathy/empathy-tp-contact-factory.h
new file mode 100644
index 000000000..92e7c2980
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-contact-factory.h
@@ -0,0 +1,72 @@
+/* -*- 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_CONTACT_FACTORY_H__
+#define __EMPATHY_TP_CONTACT_FACTORY_H__
+
+#include <glib.h>
+
+#include <libmissioncontrol/mc-account.h>
+
+#include "empathy-contact.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_TP_CONTACT_FACTORY (empathy_tp_contact_factory_get_type ())
+#define EMPATHY_TP_CONTACT_FACTORY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_TP_CONTACT_FACTORY, EmpathyTpContactFactory))
+#define EMPATHY_TP_CONTACT_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_TP_CONTACT_FACTORY, EmpathyTpContactFactoryClass))
+#define EMPATHY_IS_TP_CONTACT_FACTORY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_TP_CONTACT_FACTORY))
+#define EMPATHY_IS_TP_CONTACT_FACTORY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_TP_CONTACT_FACTORY))
+#define EMPATHY_TP_CONTACT_FACTORY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_TP_CONTACT_FACTORY, EmpathyTpContactFactoryClass))
+
+typedef struct _EmpathyTpContactFactory EmpathyTpContactFactory;
+typedef struct _EmpathyTpContactFactoryClass EmpathyTpContactFactoryClass;
+
+struct _EmpathyTpContactFactory {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyTpContactFactoryClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_tp_contact_factory_get_type (void) G_GNUC_CONST;
+EmpathyTpContactFactory *empathy_tp_contact_factory_new (McAccount *account);
+EmpathyContact * empathy_tp_contact_factory_get_user (EmpathyTpContactFactory *tp_factory);
+EmpathyContact * empathy_tp_contact_factory_get_from_id (EmpathyTpContactFactory *tp_factory,
+ const gchar *id);
+EmpathyContact * empathy_tp_contact_factory_get_from_handle (EmpathyTpContactFactory *tp_factory,
+ guint handle);
+GList * empathy_tp_contact_factory_get_from_handles (EmpathyTpContactFactory *tp_factory,
+ const GArray *handles);
+void empathy_tp_contact_factory_set_alias (EmpathyTpContactFactory *tp_factory,
+ EmpathyContact *contact,
+ const gchar *alias);
+void empathy_tp_contact_factory_set_avatar (EmpathyTpContactFactory *tp_factory,
+ const gchar *data,
+ gsize size,
+ const gchar *mime_type);
+gboolean empathy_tp_contact_factory_is_ready (EmpathyTpContactFactory *tp_factory);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_TP_CONTACT_FACTORY_H__ */
diff --git a/trunk/libempathy/empathy-tp-contact-list.c b/trunk/libempathy/empathy-tp-contact-list.c
new file mode 100644
index 000000000..93f81e8fd
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-contact-list.c
@@ -0,0 +1,1096 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Xavier Claessens <xclaesse@gmail.com>
+ * 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 <glib/gi18n.h>
+
+#include <telepathy-glib/channel.h>
+#include <telepathy-glib/connection.h>
+#include <telepathy-glib/util.h>
+#include <telepathy-glib/dbus.h>
+
+#include "empathy-tp-contact-list.h"
+#include "empathy-contact-list.h"
+#include "empathy-tp-group.h"
+#include "empathy-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_TP | EMPATHY_DEBUG_CONTACT
+#include "empathy-debug.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpContactList)
+typedef struct {
+ McAccount *account;
+ TpConnection *connection;
+ const gchar *protocol_group;
+ gboolean ready;
+
+ EmpathyTpGroup *publish;
+ EmpathyTpGroup *subscribe;
+ GList *members;
+ GList *pendings;
+
+ GList *groups;
+ GHashTable *contacts_groups;
+} EmpathyTpContactListPriv;
+
+typedef enum {
+ TP_CONTACT_LIST_TYPE_PUBLISH,
+ TP_CONTACT_LIST_TYPE_SUBSCRIBE,
+ TP_CONTACT_LIST_TYPE_UNKNOWN
+} TpContactListType;
+
+static void tp_contact_list_iface_init (EmpathyContactListIface *iface);
+
+enum {
+ DESTROY,
+ LAST_SIGNAL
+};
+
+enum {
+ PROP_0,
+ PROP_ACCOUNT,
+};
+
+static guint signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE_WITH_CODE (EmpathyTpContactList, empathy_tp_contact_list, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (EMPATHY_TYPE_CONTACT_LIST,
+ tp_contact_list_iface_init));
+
+static void
+tp_contact_list_group_destroy_cb (EmpathyTpGroup *group,
+ EmpathyTpContactList *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+
+ DEBUG ("Group destroyed: %s", empathy_tp_group_get_name (group));
+
+ priv->groups = g_list_remove (priv->groups, group);
+ g_object_unref (group);
+}
+
+static void
+tp_contact_list_group_member_added_cb (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ const gchar *message,
+ EmpathyTpContactList *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ const gchar *group_name;
+ GList **groups;
+
+ if (!g_list_find (priv->members, contact)) {
+ return;
+ }
+
+ groups = g_hash_table_lookup (priv->contacts_groups, contact);
+ if (!groups) {
+ groups = g_slice_new0 (GList*);
+ g_hash_table_insert (priv->contacts_groups,
+ g_object_ref (contact),
+ groups);
+ }
+
+ group_name = empathy_tp_group_get_name (group);
+ if (!g_list_find_custom (*groups, group_name, (GCompareFunc) strcmp)) {
+ DEBUG ("Contact %s (%d) added to group %s",
+ empathy_contact_get_id (contact),
+ empathy_contact_get_handle (contact),
+ group_name);
+ *groups = g_list_prepend (*groups, g_strdup (group_name));
+ g_signal_emit_by_name (list, "groups-changed", contact,
+ group_name,
+ TRUE);
+ }
+}
+
+static void
+tp_contact_list_group_member_removed_cb (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ const gchar *message,
+ EmpathyTpContactList *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ const gchar *group_name;
+ GList **groups, *l;
+
+ if (!g_list_find (priv->members, contact)) {
+ return;
+ }
+
+ groups = g_hash_table_lookup (priv->contacts_groups, contact);
+ if (!groups) {
+ return;
+ }
+
+ group_name = empathy_tp_group_get_name (group);
+ if ((l = g_list_find_custom (*groups, group_name, (GCompareFunc) strcmp))) {
+ DEBUG ("Contact %s (%d) removed from group %s",
+ empathy_contact_get_id (contact),
+ empathy_contact_get_handle (contact),
+ group_name);
+ *groups = g_list_delete_link (*groups, l);
+ g_signal_emit_by_name (list, "groups-changed", contact,
+ group_name,
+ FALSE);
+ }
+}
+
+static EmpathyTpGroup *
+tp_contact_list_find_group (EmpathyTpContactList *list,
+ const gchar *group)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ GList *l;
+
+ for (l = priv->groups; l; l = l->next) {
+ if (!tp_strdiff (group, empathy_tp_group_get_name (l->data))) {
+ return l->data;
+ }
+ }
+ return NULL;
+}
+
+static TpContactListType
+tp_contact_list_get_type (EmpathyTpContactList *list,
+ EmpathyTpGroup *group)
+{
+ const gchar *name;
+
+ name = empathy_tp_group_get_name (group);
+ if (!tp_strdiff (name, "subscribe")) {
+ return TP_CONTACT_LIST_TYPE_SUBSCRIBE;
+ } else if (!tp_strdiff (name, "publish")) {
+ return TP_CONTACT_LIST_TYPE_PUBLISH;
+ }
+
+ return TP_CONTACT_LIST_TYPE_UNKNOWN;
+}
+
+static void
+tp_contact_list_add_member (EmpathyTpContactList *list,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ const gchar *message)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ GList *l;
+
+ /* Add to the list and emit signal */
+ priv->members = g_list_prepend (priv->members, g_object_ref (contact));
+ g_signal_emit_by_name (list, "members-changed",
+ contact, actor, reason, message,
+ TRUE);
+
+ /* This contact is now member, implicitly accept pending. */
+ if (g_list_find (priv->pendings, contact)) {
+ empathy_tp_group_add_member (priv->publish, contact, "");
+ }
+
+ /* Update groups of the contact */
+ for (l = priv->groups; l; l = l->next) {
+ if (empathy_tp_group_is_member (l->data, contact)) {
+ tp_contact_list_group_member_added_cb (l->data, contact,
+ NULL, 0, NULL,
+ list);
+ }
+ }
+}
+
+static void
+tp_contact_list_added_cb (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ const gchar *message,
+ EmpathyTpContactList *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ TpContactListType list_type;
+
+ list_type = tp_contact_list_get_type (list, group);
+ DEBUG ("Contact %s (%d) added to list type %d",
+ empathy_contact_get_id (contact),
+ empathy_contact_get_handle (contact),
+ list_type);
+
+ /* We now get the presence of that contact, add it to members */
+ if (list_type == TP_CONTACT_LIST_TYPE_SUBSCRIBE &&
+ !g_list_find (priv->members, contact)) {
+ tp_contact_list_add_member (list, contact, actor, reason, message);
+ }
+
+ /* We now send our presence to that contact, remove it from pendings */
+ if (list_type == TP_CONTACT_LIST_TYPE_PUBLISH &&
+ g_list_find (priv->pendings, contact)) {
+ g_signal_emit_by_name (list, "pendings-changed",
+ contact, actor, reason, message,
+ FALSE);
+ priv->pendings = g_list_remove (priv->pendings, contact);
+ g_object_unref (contact);
+ }
+}
+
+static void
+tp_contact_list_removed_cb (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ const gchar *message,
+ EmpathyTpContactList *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ TpContactListType list_type;
+
+ list_type = tp_contact_list_get_type (list, group);
+ DEBUG ("Contact %s (%d) removed from list type %d",
+ empathy_contact_get_id (contact),
+ empathy_contact_get_handle (contact),
+ list_type);
+
+ /* This contact refuses to send us his presence, remove from members. */
+ if (list_type == TP_CONTACT_LIST_TYPE_SUBSCRIBE &&
+ g_list_find (priv->members, contact)) {
+ g_signal_emit_by_name (list, "members-changed",
+ contact, actor, reason, message,
+ FALSE);
+ priv->members = g_list_remove (priv->members, contact);
+ g_object_unref (contact);
+ }
+
+ /* We refuse to send our presence to that contact, remove from pendings */
+ if (list_type == TP_CONTACT_LIST_TYPE_PUBLISH &&
+ g_list_find (priv->pendings, contact)) {
+ g_signal_emit_by_name (list, "pendings-changed",
+ contact, actor, reason, message,
+ FALSE);
+ priv->pendings = g_list_remove (priv->pendings, contact);
+ g_object_unref (contact);
+ }
+}
+
+static void
+tp_contact_list_pending_cb (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ const gchar *message,
+ EmpathyTpContactList *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ TpContactListType list_type;
+
+ list_type = tp_contact_list_get_type (list, group);
+ DEBUG ("Contact %s (%d) pending in list type %d",
+ empathy_contact_get_id (contact),
+ empathy_contact_get_handle (contact),
+ list_type);
+
+ /* We want this contact in our contact list but we don't get its
+ * presence yet. Add to members anyway. */
+ if (list_type == TP_CONTACT_LIST_TYPE_SUBSCRIBE &&
+ !g_list_find (priv->members, contact)) {
+ tp_contact_list_add_member (list, contact, actor, reason, message);
+ }
+
+ /* This contact wants our presence, auto accept if he is member,
+ * otherwise he is pending. */
+ if (list_type == TP_CONTACT_LIST_TYPE_PUBLISH &&
+ !g_list_find (priv->pendings, contact)) {
+ if (g_list_find (priv->members, contact)) {
+ empathy_tp_group_add_member (priv->publish, contact, "");
+ } else {
+ priv->pendings = g_list_prepend (priv->pendings,
+ g_object_ref (contact));
+ g_signal_emit_by_name (list, "pendings-changed",
+ contact, actor, reason, message,
+ TRUE);
+ }
+ }
+}
+
+static void
+tp_contact_list_invalidated_cb (TpConnection *connection,
+ guint domain,
+ gint code,
+ gchar *message,
+ EmpathyTpContactList *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ GList *l;
+
+ DEBUG ("Connection invalidated");
+
+ /* Remove all contacts */
+ for (l = priv->members; l; l = l->next) {
+ g_signal_emit_by_name (list, "members-changed", l->data,
+ NULL, 0, NULL,
+ FALSE);
+ g_object_unref (l->data);
+ }
+ for (l = priv->pendings; l; l = l->next) {
+ g_signal_emit_by_name (list, "pendings-changed", l->data,
+ NULL, 0, NULL,
+ FALSE);
+ g_object_unref (l->data);
+ }
+ g_list_free (priv->members);
+ g_list_free (priv->pendings);
+ priv->members = NULL;
+ priv->pendings = NULL;
+
+ /* Tell the world to not use us anymore */
+ g_signal_emit (list, signals[DESTROY], 0);
+}
+
+static void
+tp_contact_list_group_list_free (GList **groups)
+{
+ g_list_foreach (*groups, (GFunc) g_free, NULL);
+ g_list_free (*groups);
+ g_slice_free (GList*, groups);
+}
+
+static void
+tp_contact_list_add_channel (EmpathyTpContactList *list,
+ const gchar *object_path,
+ const gchar *channel_type,
+ TpHandleType handle_type,
+ guint handle)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ TpChannel *channel;
+ EmpathyTpGroup *group;
+ const gchar *group_name;
+ GList *contacts, *l;
+
+ if (strcmp (channel_type, TP_IFACE_CHANNEL_TYPE_CONTACT_LIST) != 0 ||
+ handle_type != TP_HANDLE_TYPE_GROUP) {
+ return;
+ }
+
+ channel = tp_channel_new (priv->connection,
+ object_path, channel_type,
+ handle_type, handle, NULL);
+
+ group = empathy_tp_group_new (channel);
+ empathy_run_until_ready (group);
+ g_object_unref (channel);
+
+ /* Check if already exists */
+ group_name = empathy_tp_group_get_name (group);
+ if (tp_contact_list_find_group (list, group_name)) {
+ g_object_unref (group);
+ return;
+ }
+
+ /* Add the group */
+ DEBUG ("New server-side group: %s", group_name);
+ priv->groups = g_list_prepend (priv->groups, group);
+ g_signal_connect (group, "member-added",
+ G_CALLBACK (tp_contact_list_group_member_added_cb),
+ list);
+ g_signal_connect (group, "member-removed",
+ G_CALLBACK (tp_contact_list_group_member_removed_cb),
+ list);
+ g_signal_connect (group, "destroy",
+ G_CALLBACK (tp_contact_list_group_destroy_cb),
+ list);
+
+ /* Get initial members */
+ contacts = empathy_tp_group_get_members (group);
+ for (l = contacts; l; l = l->next) {
+ tp_contact_list_group_member_added_cb (group, l->data,
+ NULL, 0, NULL,
+ list);
+ g_object_unref (l->data);
+ }
+ g_list_free (contacts);
+}
+
+static void
+tp_contact_list_new_channel_cb (TpConnection *proxy,
+ const gchar *object_path,
+ const gchar *channel_type,
+ guint handle_type,
+ guint handle,
+ gboolean suppress_handler,
+ gpointer user_data,
+ GObject *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+
+ if (!suppress_handler && priv->ready) {
+ tp_contact_list_add_channel (EMPATHY_TP_CONTACT_LIST (list),
+ object_path, channel_type,
+ handle_type, handle);
+ }
+}
+
+static void
+tp_contact_list_list_channels_cb (TpConnection *connection,
+ const GPtrArray *channels,
+ const GError *error,
+ gpointer user_data,
+ GObject *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ guint i;
+
+ if (error) {
+ DEBUG ("Error: %s", error->message);
+ return;
+ }
+
+ for (i = 0; i < channels->len; i++) {
+ GValueArray *chan_struct;
+ const gchar *object_path;
+ const gchar *channel_type;
+ TpHandleType handle_type;
+ guint handle;
+
+ chan_struct = g_ptr_array_index (channels, i);
+ object_path = g_value_get_boxed (g_value_array_get_nth (chan_struct, 0));
+ channel_type = g_value_get_string (g_value_array_get_nth (chan_struct, 1));
+ handle_type = g_value_get_uint (g_value_array_get_nth (chan_struct, 2));
+ handle = g_value_get_uint (g_value_array_get_nth (chan_struct, 3));
+
+ tp_contact_list_add_channel (EMPATHY_TP_CONTACT_LIST (list),
+ object_path, channel_type,
+ handle_type, handle);
+ }
+
+ priv->ready = TRUE;
+}
+
+static void
+tp_contact_list_request_channel_cb (TpConnection *connection,
+ const gchar *object_path,
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ EmpathyTpContactList *list = EMPATHY_TP_CONTACT_LIST (weak_object);
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ EmpathyTpGroup *group;
+ TpChannel *channel;
+ TpContactListType list_type;
+ GList *contacts, *l;
+
+ if (error) {
+ DEBUG ("Error: %s", error->message);
+ return;
+ }
+
+ channel = tp_channel_new (connection, object_path,
+ TP_IFACE_CHANNEL_TYPE_CONTACT_LIST,
+ TP_HANDLE_TYPE_LIST,
+ GPOINTER_TO_UINT (user_data),
+ NULL);
+ group = empathy_tp_group_new (channel);
+ empathy_run_until_ready (group);
+
+ list_type = tp_contact_list_get_type (list, group);
+ if (list_type == TP_CONTACT_LIST_TYPE_PUBLISH && !priv->publish) {
+ DEBUG ("Got publish list");
+ priv->publish = group;
+
+ /* Publish is the list of contacts to who we send our
+ * presence. Makes no sense to be in remote-pending */
+ g_signal_connect (group, "local-pending",
+ G_CALLBACK (tp_contact_list_pending_cb),
+ list);
+
+ contacts = empathy_tp_group_get_local_pendings (group);
+ for (l = contacts; l; l = l->next) {
+ EmpathyPendingInfo *info = l->data;
+ tp_contact_list_pending_cb (group,
+ info->member,
+ info->actor,
+ 0,
+ info->message,
+ list);
+ empathy_pending_info_free (info);
+ }
+ g_list_free (contacts);
+ }
+ else if (list_type == TP_CONTACT_LIST_TYPE_SUBSCRIBE && !priv->subscribe) {
+ DEBUG ("Got subscribe list");
+ priv->subscribe = group;
+
+ /* Subscribe is the list of contacts from who we
+ * receive presence. Makes no sense to be in
+ * local-pending */
+ g_signal_connect (group, "remote-pending",
+ G_CALLBACK (tp_contact_list_pending_cb),
+ list);
+
+ contacts = empathy_tp_group_get_remote_pendings (group);
+ for (l = contacts; l; l = l->next) {
+ tp_contact_list_pending_cb (group,
+ l->data,
+ NULL, 0,
+ NULL, list);
+ g_object_unref (l->data);
+ }
+ g_list_free (contacts);
+ } else {
+ DEBUG ("Type of contact list channel unknown or aleady "
+ "have that list: %s",
+ empathy_tp_group_get_name (group));
+ g_object_unref (group);
+ return;
+ }
+
+ /* For all list types when need to get members */
+ g_signal_connect (group, "member-added",
+ G_CALLBACK (tp_contact_list_added_cb),
+ list);
+ g_signal_connect (group, "member-removed",
+ G_CALLBACK (tp_contact_list_removed_cb),
+ list);
+
+ contacts = empathy_tp_group_get_members (group);
+ for (l = contacts; l; l = l->next) {
+ tp_contact_list_added_cb (group,
+ l->data,
+ NULL, 0, NULL,
+ list);
+ g_object_unref (l->data);
+ }
+ g_list_free (contacts);
+}
+
+static void
+tp_contact_list_request_handle_cb (TpConnection *connection,
+ const GArray *handles,
+ const GError *error,
+ gpointer user_data,
+ GObject *list)
+{
+ guint handle;
+
+ if (error) {
+ DEBUG ("Error: %s", error->message);
+ return;
+ }
+
+ handle = g_array_index (handles, guint, 0);
+ tp_cli_connection_call_request_channel (connection, -1,
+ TP_IFACE_CHANNEL_TYPE_CONTACT_LIST,
+ TP_HANDLE_TYPE_LIST,
+ handle,
+ TRUE,
+ tp_contact_list_request_channel_cb,
+ GUINT_TO_POINTER (handle), NULL,
+ list);
+}
+
+static void
+tp_contact_list_request_list (EmpathyTpContactList *list,
+ const gchar *type)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ const gchar *names[] = {type, NULL};
+
+ tp_cli_connection_call_request_handles (priv->connection,
+ -1,
+ TP_HANDLE_TYPE_LIST,
+ names,
+ tp_contact_list_request_handle_cb,
+ NULL, NULL,
+ G_OBJECT (list));
+}
+
+static void
+tp_contact_list_finalize (GObject *object)
+{
+ EmpathyTpContactListPriv *priv;
+ EmpathyTpContactList *list;
+
+ list = EMPATHY_TP_CONTACT_LIST (object);
+ priv = GET_PRIV (list);
+
+ DEBUG ("finalize: %p", object);
+
+ if (priv->subscribe) {
+ g_object_unref (priv->subscribe);
+ }
+ if (priv->publish) {
+ g_object_unref (priv->publish);
+ }
+ if (priv->account) {
+ g_object_unref (priv->account);
+ }
+ if (priv->connection) {
+ g_signal_handlers_disconnect_by_func (priv->connection,
+ tp_contact_list_invalidated_cb,
+ object);
+ g_object_unref (priv->connection);
+ }
+
+ g_hash_table_destroy (priv->contacts_groups);
+ g_list_foreach (priv->groups, (GFunc) g_object_unref, NULL);
+ g_list_free (priv->groups);
+ g_list_foreach (priv->members, (GFunc) g_object_unref, NULL);
+ g_list_free (priv->members);
+ g_list_foreach (priv->pendings, (GFunc) g_object_unref, NULL);
+ g_list_free (priv->pendings);
+
+ G_OBJECT_CLASS (empathy_tp_contact_list_parent_class)->finalize (object);
+}
+
+static void
+tp_contact_list_connection_ready (TpConnection *connection,
+ const GError *error,
+ gpointer list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+
+ if (error) {
+ tp_contact_list_invalidated_cb (connection,
+ error->domain,
+ error->code,
+ error->message,
+ EMPATHY_TP_CONTACT_LIST (list));
+ return;
+ }
+
+ g_signal_connect (priv->connection, "invalidated",
+ G_CALLBACK (tp_contact_list_invalidated_cb),
+ list);
+
+ tp_contact_list_request_list (list, "publish");
+ tp_contact_list_request_list (list, "subscribe");
+
+ tp_cli_connection_call_list_channels (priv->connection, -1,
+ tp_contact_list_list_channels_cb,
+ NULL, NULL,
+ list);
+
+ tp_cli_connection_connect_to_new_channel (priv->connection,
+ tp_contact_list_new_channel_cb,
+ NULL, NULL,
+ list, NULL);
+}
+
+static void
+tp_contact_list_constructed (GObject *list)
+{
+
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ MissionControl *mc;
+ guint status;
+ McProfile *profile;
+ const gchar *protocol_name;
+
+ /* Get the connection. status==0 means CONNECTED */
+ mc = empathy_mission_control_new ();
+ status = mission_control_get_connection_status (mc, priv->account, NULL);
+ g_return_if_fail (status == 0);
+ priv->connection = mission_control_get_tpconnection (mc, priv->account, NULL);
+ g_return_if_fail (priv->connection != NULL);
+ g_object_unref (mc);
+
+ tp_connection_call_when_ready (priv->connection,
+ tp_contact_list_connection_ready,
+ list);
+
+ /* Check for protocols that does not support contact groups. We can
+ * put all contacts into a special group in that case.
+ * FIXME: Default group should be an information in the profile */
+ profile = mc_account_get_profile (priv->account);
+ protocol_name = mc_profile_get_protocol_name (profile);
+ if (strcmp (protocol_name, "local-xmpp") == 0) {
+ priv->protocol_group = _("People nearby");
+ }
+ g_object_unref (profile);
+}
+
+static void
+tp_contact_list_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_ACCOUNT:
+ g_value_set_object (value, priv->account);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+tp_contact_list_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_ACCOUNT:
+ priv->account = g_object_ref (g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+empathy_tp_contact_list_class_init (EmpathyTpContactListClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = tp_contact_list_finalize;
+ object_class->constructed = tp_contact_list_constructed;
+ object_class->get_property = tp_contact_list_get_property;
+ object_class->set_property = tp_contact_list_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_ACCOUNT,
+ g_param_spec_object ("account",
+ "The Account",
+ "The account associated with the contact list",
+ MC_TYPE_ACCOUNT,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+
+ signals[DESTROY] =
+ g_signal_new ("destroy",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ g_type_class_add_private (object_class, sizeof (EmpathyTpContactListPriv));
+}
+
+static void
+empathy_tp_contact_list_init (EmpathyTpContactList *list)
+{
+ EmpathyTpContactListPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (list,
+ EMPATHY_TYPE_TP_CONTACT_LIST, EmpathyTpContactListPriv);
+
+ list->priv = priv;
+ priv->contacts_groups = g_hash_table_new_full (g_direct_hash,
+ g_direct_equal,
+ (GDestroyNotify) g_object_unref,
+ (GDestroyNotify) tp_contact_list_group_list_free);
+}
+
+EmpathyTpContactList *
+empathy_tp_contact_list_new (McAccount *account)
+{
+ return g_object_new (EMPATHY_TYPE_TP_CONTACT_LIST,
+ "account", account,
+ NULL);
+}
+
+McAccount *
+empathy_tp_contact_list_get_account (EmpathyTpContactList *list)
+{
+ EmpathyTpContactListPriv *priv;
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list), NULL);
+
+ priv = GET_PRIV (list);
+
+ return priv->account;
+}
+
+static void
+tp_contact_list_add (EmpathyContactList *list,
+ EmpathyContact *contact,
+ const gchar *message)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+
+ g_return_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list));
+
+ empathy_tp_group_add_member (priv->subscribe, contact, message);
+ if (g_list_find (priv->pendings, contact)) {
+ empathy_tp_group_add_member (priv->publish, contact, message);
+ }
+}
+
+static void
+tp_contact_list_remove (EmpathyContactList *list,
+ EmpathyContact *contact,
+ const gchar *message)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+
+ g_return_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list));
+
+ empathy_tp_group_remove_member (priv->subscribe, contact, message);
+ empathy_tp_group_remove_member (priv->publish, contact, message);
+}
+
+static GList *
+tp_contact_list_get_members (EmpathyContactList *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list), NULL);
+
+ g_list_foreach (priv->members, (GFunc) g_object_ref, NULL);
+ return g_list_copy (priv->members);
+}
+
+static GList *
+tp_contact_list_get_pendings (EmpathyContactList *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list), NULL);
+
+ g_list_foreach (priv->pendings, (GFunc) g_object_ref, NULL);
+ return g_list_copy (priv->pendings);
+}
+
+static GList *
+tp_contact_list_get_all_groups (EmpathyContactList *list)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ GList *groups = NULL, *l;
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list), NULL);
+
+ if (priv->protocol_group) {
+ groups = g_list_prepend (groups, g_strdup (priv->protocol_group));
+ }
+
+ for (l = priv->groups; l; l = l->next) {
+ const gchar *name;
+
+ name = empathy_tp_group_get_name (l->data);
+ groups = g_list_prepend (groups, g_strdup (name));
+ }
+
+ return groups;
+}
+
+static GList *
+tp_contact_list_get_groups (EmpathyContactList *list,
+ EmpathyContact *contact)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ GList **groups;
+ GList *ret = NULL, *l;
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list), NULL);
+
+ if (priv->protocol_group) {
+ ret = g_list_prepend (ret, g_strdup (priv->protocol_group));
+ }
+
+ groups = g_hash_table_lookup (priv->contacts_groups, contact);
+ if (!groups) {
+ return ret;
+ }
+
+ for (l = *groups; l; l = l->next) {
+ ret = g_list_prepend (ret, g_strdup (l->data));
+ }
+
+
+ return ret;
+}
+
+static EmpathyTpGroup *
+tp_contact_list_get_group (EmpathyTpContactList *list,
+ const gchar *group)
+{
+ EmpathyTpContactListPriv *priv = GET_PRIV (list);
+ EmpathyTpGroup *tp_group;
+ gchar *object_path;
+ guint handle;
+ GArray *handles;
+ const char *names[2] = {group, NULL};
+ GError *error = NULL;
+
+ tp_group = tp_contact_list_find_group (list, group);
+ if (tp_group) {
+ return tp_group;
+ }
+
+ DEBUG ("creating new group: %s", group);
+
+ if (!tp_cli_connection_run_request_handles (priv->connection, -1,
+ TP_HANDLE_TYPE_GROUP,
+ names,
+ &handles,
+ &error, NULL)) {
+ DEBUG ("Failed to RequestHandles: %s",
+ error ? error->message : "No error given");
+ g_clear_error (&error);
+ return NULL;
+ }
+ handle = g_array_index (handles, guint, 0);
+ g_array_free (handles, TRUE);
+
+ if (!tp_cli_connection_run_request_channel (priv->connection, -1,
+ TP_IFACE_CHANNEL_TYPE_CONTACT_LIST,
+ TP_HANDLE_TYPE_GROUP,
+ handle,
+ TRUE,
+ &object_path,
+ &error, NULL)) {
+ DEBUG ("Failed to RequestChannel: %s",
+ error ? error->message : "No error given");
+ g_clear_error (&error);
+ return NULL;
+ }
+
+ tp_contact_list_add_channel (EMPATHY_TP_CONTACT_LIST (list),
+ object_path,
+ TP_IFACE_CHANNEL_TYPE_CONTACT_LIST,
+ TP_HANDLE_TYPE_GROUP, handle);
+
+ g_free (object_path);
+
+ return tp_contact_list_find_group (list, group);
+}
+
+static void
+tp_contact_list_add_to_group (EmpathyContactList *list,
+ EmpathyContact *contact,
+ const gchar *group)
+{
+ EmpathyTpGroup *tp_group;
+
+ g_return_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list));
+
+ tp_group = tp_contact_list_get_group (EMPATHY_TP_CONTACT_LIST (list),
+ group);
+
+ empathy_tp_group_add_member (tp_group, contact, "");
+}
+
+static void
+tp_contact_list_remove_from_group (EmpathyContactList *list,
+ EmpathyContact *contact,
+ const gchar *group)
+{
+ EmpathyTpGroup *tp_group;
+
+ g_return_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list));
+
+ tp_group = tp_contact_list_find_group (EMPATHY_TP_CONTACT_LIST (list),
+ group);
+
+ if (tp_group) {
+ empathy_tp_group_remove_member (tp_group, contact, "");
+ }
+}
+
+static void
+tp_contact_list_rename_group (EmpathyContactList *list,
+ const gchar *old_group,
+ const gchar *new_group)
+{
+ EmpathyTpGroup *tp_group;
+ GList *members;
+
+ g_return_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list));
+
+ tp_group = tp_contact_list_find_group (EMPATHY_TP_CONTACT_LIST (list),
+ old_group);
+ if (!tp_group) {
+ return;
+ }
+
+ DEBUG ("rename group %s to %s", old_group, new_group);
+
+ /* Remove all members from the old group */
+ members = empathy_tp_group_get_members (tp_group);
+ empathy_tp_group_remove_members (tp_group, members, "");
+ empathy_tp_group_close (tp_group);
+
+ /* Add all members to the new group */
+ tp_group = tp_contact_list_get_group (EMPATHY_TP_CONTACT_LIST (list),
+ new_group);
+ empathy_tp_group_add_members (tp_group, members, "");
+
+ g_list_foreach (members, (GFunc) g_object_unref, NULL);
+ g_list_free (members);
+}
+
+static void
+tp_contact_list_remove_group (EmpathyContactList *list,
+ const gchar *group)
+{
+ EmpathyTpGroup *tp_group;
+ GList *members;
+
+ g_return_if_fail (EMPATHY_IS_TP_CONTACT_LIST (list));
+
+ tp_group = tp_contact_list_find_group (EMPATHY_TP_CONTACT_LIST (list),
+ group);
+
+ if (!tp_group) {
+ return;
+ }
+
+ DEBUG ("remove group %s", group);
+
+ /* Remove all members of the group */
+ members = empathy_tp_group_get_members (tp_group);
+ empathy_tp_group_remove_members (tp_group, members, "");
+ empathy_tp_group_close (tp_group);
+
+ g_list_foreach (members, (GFunc) g_object_unref, NULL);
+ g_list_free (members);
+}
+
+static void
+tp_contact_list_iface_init (EmpathyContactListIface *iface)
+{
+ iface->add = tp_contact_list_add;
+ iface->remove = tp_contact_list_remove;
+ iface->get_members = tp_contact_list_get_members;
+ iface->get_pendings = tp_contact_list_get_pendings;
+ iface->get_all_groups = tp_contact_list_get_all_groups;
+ iface->get_groups = tp_contact_list_get_groups;
+ iface->add_to_group = tp_contact_list_add_to_group;
+ iface->remove_from_group = tp_contact_list_remove_from_group;
+ iface->rename_group = tp_contact_list_rename_group;
+ iface->remove_group = tp_contact_list_remove_group;
+}
+
diff --git a/trunk/libempathy/empathy-tp-contact-list.h b/trunk/libempathy/empathy-tp-contact-list.h
new file mode 100644
index 000000000..863711e18
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-contact-list.h
@@ -0,0 +1,57 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Xavier Claessens <xclaesse@gmail.com>
+ * 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_CONTACT_LIST_H__
+#define __EMPATHY_TP_CONTACT_LIST_H__
+
+#include <glib.h>
+#include <libmissioncontrol/mc-account.h>
+
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_TP_CONTACT_LIST (empathy_tp_contact_list_get_type ())
+#define EMPATHY_TP_CONTACT_LIST(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CONTACT_LIST, EmpathyTpContactList))
+#define EMPATHY_TP_CONTACT_LIST_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_CONTACT_LIST, EmpathyTpContactListClass))
+#define EMPATHY_IS_TP_CONTACT_LIST(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CONTACT_LIST))
+#define EMPATHY_IS_TP_CONTACT_LIST_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CONTACT_LIST))
+#define EMPATHY_TP_CONTACT_LIST_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CONTACT_LIST, EmpathyTpContactListClass))
+
+typedef struct _EmpathyTpContactList EmpathyTpContactList;
+typedef struct _EmpathyTpContactListClass EmpathyTpContactListClass;
+
+struct _EmpathyTpContactList {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyTpContactListClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_tp_contact_list_get_type (void) G_GNUC_CONST;
+EmpathyTpContactList * empathy_tp_contact_list_new (McAccount *account);
+McAccount * empathy_tp_contact_list_get_account (EmpathyTpContactList *list);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_TP_CONTACT_LIST_H__ */
diff --git a/trunk/libempathy/empathy-tp-group.c b/trunk/libempathy/empathy-tp-group.c
new file mode 100644
index 000000000..ca7ff491f
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-group.c
@@ -0,0 +1,970 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2006 Xavier Claessens <xclaesse@gmail.com>
+ * 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 <libmissioncontrol/mc-account.h>
+
+#include <telepathy-glib/channel.h>
+#include <telepathy-glib/util.h>
+#include <telepathy-glib/interfaces.h>
+
+#include "empathy-tp-group.h"
+#include "empathy-contact-factory.h"
+#include "empathy-utils.h"
+#include "empathy-marshal.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_TP
+#include "empathy-debug.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpGroup)
+typedef struct {
+ TpChannel *channel;
+ gboolean ready;
+
+ EmpathyContactFactory *factory;
+ McAccount *account;
+ gchar *group_name;
+ guint self_handle;
+ GList *members;
+ GList *local_pendings;
+ GList *remote_pendings;
+} EmpathyTpGroupPriv;
+
+enum {
+ MEMBER_ADDED,
+ MEMBER_REMOVED,
+ LOCAL_PENDING,
+ REMOTE_PENDING,
+ DESTROY,
+ LAST_SIGNAL
+};
+
+enum {
+ PROP_0,
+ PROP_CHANNEL,
+ PROP_READY
+};
+
+static guint signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE (EmpathyTpGroup, empathy_tp_group, G_TYPE_OBJECT);
+
+static EmpathyContact *
+tp_group_get_contact (EmpathyTpGroup *group,
+ guint handle)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ EmpathyContact *contact = NULL;
+
+ if (handle != 0) {
+ contact = empathy_contact_factory_get_from_handle (priv->factory,
+ priv->account,
+ handle);
+ }
+
+ if (contact && handle == priv->self_handle) {
+ empathy_contact_set_is_user (contact, TRUE);
+ }
+
+ return contact;
+}
+
+static GList *
+tp_group_get_contacts (EmpathyTpGroup *group,
+ const GArray *handles)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ GList *contacts, *l;
+
+ if (!handles) {
+ return NULL;
+ }
+
+ contacts = empathy_contact_factory_get_from_handles (priv->factory,
+ priv->account,
+ handles);
+
+ /* FIXME: Only useful if the group has a different self handle than
+ * the connection, otherwise the contact factory already set that
+ * property. That can be known using group flags. */
+ for (l = contacts; l; l = l->next) {
+ if (empathy_contact_get_handle (l->data) == priv->self_handle) {
+ empathy_contact_set_is_user (l->data, TRUE);
+ }
+ }
+
+ return contacts;
+}
+
+EmpathyPendingInfo *
+empathy_pending_info_new (EmpathyContact *member,
+ EmpathyContact *actor,
+ const gchar *message)
+{
+ EmpathyPendingInfo *info;
+
+ info = g_slice_new0 (EmpathyPendingInfo);
+
+ if (member) {
+ info->member = g_object_ref (member);
+ }
+ if (actor) {
+ info->actor = g_object_ref (actor);
+ }
+ if (message) {
+ info->message = g_strdup (message);
+ }
+
+ return info;
+}
+
+void
+empathy_pending_info_free (EmpathyPendingInfo *info)
+{
+ if (!info) {
+ return;
+ }
+
+ if (info->member) {
+ g_object_unref (info->member);
+ }
+ if (info->actor) {
+ g_object_unref (info->actor);
+ }
+ g_free (info->message);
+
+ g_slice_free (EmpathyPendingInfo, info);
+}
+
+static gint
+tp_group_local_pending_find (gconstpointer a,
+ gconstpointer b)
+{
+ const EmpathyPendingInfo *info = a;
+
+ return (info->member != b);
+}
+
+static void
+tp_group_remove_from_pendings (EmpathyTpGroup *group,
+ EmpathyContact *contact)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ GList *l;
+
+ /* local pending */
+ l = g_list_find_custom (priv->local_pendings,
+ contact,
+ tp_group_local_pending_find);
+ if (l) {
+ empathy_pending_info_free (l->data);
+ priv->local_pendings = g_list_delete_link (priv->local_pendings, l);
+ }
+
+ /* remote pending */
+ l = g_list_find (priv->remote_pendings, contact);
+ if (l) {
+ g_object_unref (l->data);
+ priv->remote_pendings = g_list_delete_link (priv->remote_pendings, l);
+ }
+}
+
+static void
+tp_group_update_members (EmpathyTpGroup *group,
+ const gchar *message,
+ const GArray *added,
+ const GArray *removed,
+ const GArray *local_pending,
+ const GArray *remote_pending,
+ guint actor,
+ guint reason)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ EmpathyContact *actor_contact = NULL;
+ GList *contacts, *l, *ll;
+
+ actor_contact = tp_group_get_contact (group, actor);
+
+ DEBUG ("Members changed for list %s:\n"
+ " added-len=%d, current-len=%d\n"
+ " removed-len=%d\n"
+ " local-pending-len=%d, current-len=%d\n"
+ " remote-pending-len=%d, current-len=%d",
+ priv->group_name, added ? added->len : 0,
+ g_list_length (priv->members), removed ? removed->len : 0,
+ local_pending ? local_pending->len : 0,
+ g_list_length (priv->local_pendings),
+ remote_pending ? remote_pending->len : 0,
+ g_list_length (priv->remote_pendings));
+
+ /* Contacts added */
+ contacts = tp_group_get_contacts (group, added);
+ for (l = contacts; l; l = l->next) {
+ tp_group_remove_from_pendings (group, l->data);
+
+ /* If the contact is not yet member, add it and emit signal */
+ if (!g_list_find (priv->members, l->data)) {
+ priv->members = g_list_prepend (priv->members,
+ g_object_ref (l->data));
+ g_signal_emit (group, signals[MEMBER_ADDED], 0,
+ l->data, actor_contact, reason, message);
+ }
+ g_object_unref (l->data);
+ }
+ g_list_free (contacts);
+
+ /* Contacts removed */
+ contacts = tp_group_get_contacts (group, removed);
+ for (l = contacts; l; l = l->next) {
+ tp_group_remove_from_pendings (group, l->data);
+
+ /* If the contact is member, remove it and emit signal */
+ if ((ll = g_list_find (priv->members, l->data))) {
+ g_object_unref (ll->data);
+ priv->members = g_list_delete_link (priv->members, ll);
+ g_signal_emit (group, signals[MEMBER_REMOVED], 0,
+ l->data, actor_contact, reason, message);
+ }
+ g_object_unref (l->data);
+ }
+ g_list_free (contacts);
+
+ /* Contacts local pending */
+ contacts = tp_group_get_contacts (group, local_pending);
+ for (l = contacts; l; l = l->next) {
+ /* If the contact is not yet local-pending, add it and emit signal */
+ if (!g_list_find_custom (priv->local_pendings, l->data,
+ tp_group_local_pending_find)) {
+ EmpathyPendingInfo *info;
+
+ info = empathy_pending_info_new (l->data,
+ actor_contact,
+ message);
+
+ priv->local_pendings = g_list_prepend (priv->local_pendings, info);
+ g_signal_emit (group, signals[LOCAL_PENDING], 0,
+ l->data, actor_contact, reason, message);
+ }
+ g_object_unref (l->data);
+ }
+ g_list_free (contacts);
+
+ /* Contacts remote pending */
+ contacts = tp_group_get_contacts (group, remote_pending);
+ for (l = contacts; l; l = l->next) {
+ /* If the contact is not yet remote-pending, add it and emit signal */
+ if (!g_list_find (priv->remote_pendings, l->data)) {
+ priv->remote_pendings = g_list_prepend (priv->remote_pendings,
+ g_object_ref (l->data));
+ g_signal_emit (group, signals[REMOTE_PENDING], 0,
+ l->data, actor_contact, reason, message);
+ }
+ g_object_unref (l->data);
+ }
+ g_list_free (contacts);
+
+ if (actor_contact) {
+ g_object_unref (actor_contact);
+ }
+
+ DEBUG ("Members changed done for list %s:\n"
+ " members-len=%d\n"
+ " local-pendings-len=%d\n"
+ " remote-pendings-len=%d",
+ priv->group_name, g_list_length (priv->members),
+ g_list_length (priv->local_pendings),
+ g_list_length (priv->remote_pendings));
+}
+
+static void
+tp_group_members_changed_cb (TpChannel *channel,
+ const gchar *message,
+ const GArray *added,
+ const GArray *removed,
+ const GArray *local_pending,
+ const GArray *remote_pending,
+ guint actor,
+ guint reason,
+ gpointer user_data,
+ GObject *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+ if (priv->ready) {
+ tp_group_update_members (EMPATHY_TP_GROUP (group), message,
+ added, removed,
+ local_pending, remote_pending,
+ actor, reason);
+ }
+}
+
+static void
+tp_group_get_members_cb (TpChannel *channel,
+ const GArray *handles,
+ const GError *error,
+ gpointer user_data,
+ GObject *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+ if (error) {
+ DEBUG ("Failed to get members: %s", error->message);
+ return;
+ }
+
+ tp_group_update_members (EMPATHY_TP_GROUP (group),
+ NULL, /* message */
+ handles, /* added */
+ NULL, /* removed */
+ NULL, /* local_pending */
+ NULL, /* remote_pending */
+ 0, /* actor */
+ 0); /* reason */
+
+ DEBUG ("Ready");
+ priv->ready = TRUE;
+ g_object_notify (group, "ready");
+}
+
+static void
+tp_group_get_local_pending_cb (TpChannel *channel,
+ const GPtrArray *array,
+ const GError *error,
+ gpointer user_data,
+ GObject *group)
+{
+ GArray *handles;
+ guint i = 0;
+
+ if (error) {
+ DEBUG ("Failed to get local pendings: %s", error->message);
+ return;
+ }
+
+ handles = g_array_sized_new (FALSE, FALSE, sizeof (guint), 1);
+ g_array_append_val (handles, i);
+ for (i = 0; array->len > i; i++) {
+ GValueArray *pending_struct;
+ const gchar *message;
+ guint member_handle;
+ guint actor_handle;
+ guint reason;
+
+ pending_struct = g_ptr_array_index (array, i);
+ member_handle = g_value_get_uint (g_value_array_get_nth (pending_struct, 0));
+ actor_handle = g_value_get_uint (g_value_array_get_nth (pending_struct, 1));
+ reason = g_value_get_uint (g_value_array_get_nth (pending_struct, 2));
+ message = g_value_get_string (g_value_array_get_nth (pending_struct, 3));
+
+ g_array_index (handles, guint, 0) = member_handle;
+
+ tp_group_update_members (EMPATHY_TP_GROUP (group),
+ message, /* message */
+ NULL, /* added */
+ NULL, /* removed */
+ handles, /* local_pending */
+ NULL, /* remote_pending */
+ actor_handle, /* actor */
+ reason); /* reason */
+ }
+ g_array_free (handles, TRUE);
+}
+
+static void
+tp_group_get_remote_pending_cb (TpChannel *channel,
+ const GArray *handles,
+ const GError *error,
+ gpointer user_data,
+ GObject *group)
+{
+ if (error) {
+ DEBUG ("Failed to get remote pendings: %s", error->message);
+ return;
+ }
+
+ tp_group_update_members (EMPATHY_TP_GROUP (group),
+ NULL, /* message */
+ NULL, /* added */
+ NULL, /* removed */
+ NULL, /* local_pending */
+ handles, /* remote_pending */
+ 0, /* actor */
+ 0); /* reason */
+}
+
+static void
+tp_group_inspect_handles_cb (TpConnection *connection,
+ const gchar **names,
+ const GError *error,
+ gpointer user_data,
+ GObject *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+ if (error) {
+ DEBUG ("Failed to inspect channel handle: %s", error->message);
+ return;
+ }
+
+ priv->group_name = g_strdup (*names);
+}
+
+static void
+tp_group_invalidated_cb (TpProxy *proxy,
+ guint domain,
+ gint code,
+ gchar *message,
+ EmpathyTpGroup *group)
+{
+ DEBUG ("Channel invalidated: %s", message);
+ g_signal_emit (group, signals[DESTROY], 0);
+}
+
+static void
+tp_group_get_self_handle_cb (TpChannel *proxy,
+ guint handle,
+ const GError *error,
+ gpointer user_data,
+ GObject *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ TpConnection *connection;
+ guint channel_handle;
+ guint channel_handle_type;
+ GArray *handles;
+
+ if (error) {
+ DEBUG ("Failed to get self handle: %s", error->message);
+ return;
+ }
+
+ priv->self_handle = handle;
+ tp_cli_channel_interface_group_connect_to_members_changed (priv->channel,
+ tp_group_members_changed_cb,
+ NULL, NULL,
+ group, NULL);
+
+ /* GetMembers is called last, so it will be the last to get the reply,
+ * so we'll be ready once that call return. */
+ g_object_get (priv->channel,
+ "connection", &connection,
+ "handle-type", &channel_handle_type,
+ "handle", &channel_handle,
+ NULL);
+ handles = g_array_sized_new (FALSE, FALSE, sizeof (guint), 1);
+ g_array_prepend_val (handles, channel_handle);
+ tp_cli_connection_call_inspect_handles (connection, -1,
+ channel_handle_type,
+ handles,
+ tp_group_inspect_handles_cb,
+ NULL, NULL,
+ group);
+ g_array_free (handles, TRUE);
+
+ tp_cli_channel_interface_group_call_get_local_pending_members_with_info
+ (priv->channel, -1,
+ tp_group_get_local_pending_cb,
+ NULL, NULL,
+ group);
+ tp_cli_channel_interface_group_call_get_remote_pending_members
+ (priv->channel, -1,
+ tp_group_get_remote_pending_cb,
+ NULL, NULL,
+ group);
+ tp_cli_channel_interface_group_call_get_members (priv->channel, -1,
+ tp_group_get_members_cb,
+ NULL, NULL,
+ group);
+}
+
+static void
+tp_group_factory_ready_cb (EmpathyTpGroup *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ EmpathyTpContactFactory *tp_factory;
+
+ tp_factory = empathy_contact_factory_get_tp_factory (priv->factory, priv->account);
+ g_signal_handlers_disconnect_by_func (tp_factory, tp_group_factory_ready_cb, group);
+ tp_cli_channel_interface_group_call_get_self_handle (priv->channel, -1,
+ tp_group_get_self_handle_cb,
+ NULL, NULL,
+ G_OBJECT (group));
+}
+
+static void
+tp_group_channel_ready_cb (EmpathyTpGroup *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ EmpathyTpContactFactory *tp_factory;
+
+ tp_factory = empathy_contact_factory_get_tp_factory (priv->factory,
+ priv->account);
+ if (empathy_tp_contact_factory_is_ready (tp_factory)) {
+ tp_group_factory_ready_cb (group);
+ } else {
+ g_signal_connect_swapped (tp_factory, "notify::ready",
+ G_CALLBACK (tp_group_factory_ready_cb),
+ group);
+ }
+}
+
+static void
+tp_group_finalize (GObject *object)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (object);
+ EmpathyTpContactFactory *tp_factory;
+
+ DEBUG ("finalize: %p", object);
+
+ tp_factory = empathy_contact_factory_get_tp_factory (priv->factory, priv->account);
+ g_signal_handlers_disconnect_by_func (tp_factory, tp_group_factory_ready_cb, object);
+
+ if (priv->channel) {
+ g_signal_handlers_disconnect_by_func (priv->channel,
+ tp_group_invalidated_cb,
+ object);
+ g_object_unref (priv->channel);
+ }
+ if (priv->account) {
+ g_object_unref (priv->account);
+ }
+ if (priv->factory) {
+ g_object_unref (priv->factory);
+ }
+ g_free (priv->group_name);
+
+ g_list_foreach (priv->members, (GFunc) g_object_unref, NULL);
+ g_list_free (priv->members);
+
+ g_list_foreach (priv->local_pendings, (GFunc) empathy_pending_info_free, NULL);
+ g_list_free (priv->local_pendings);
+
+ g_list_foreach (priv->remote_pendings, (GFunc) g_object_unref, NULL);
+ g_list_free (priv->remote_pendings);
+
+ G_OBJECT_CLASS (empathy_tp_group_parent_class)->finalize (object);
+}
+
+static void
+tp_group_constructed (GObject *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ gboolean channel_ready;
+
+ priv->factory = empathy_contact_factory_new ();
+ priv->account = empathy_channel_get_account (priv->channel);
+
+ g_signal_connect (priv->channel, "invalidated",
+ G_CALLBACK (tp_group_invalidated_cb),
+ group);
+
+ g_object_get (priv->channel, "channel-ready", &channel_ready, NULL);
+ if (channel_ready) {
+ tp_group_channel_ready_cb (EMPATHY_TP_GROUP (group));
+ } else {
+ g_signal_connect_swapped (priv->channel, "notify::channel-ready",
+ G_CALLBACK (tp_group_channel_ready_cb),
+ group);
+ }
+}
+
+static void
+tp_group_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_CHANNEL:
+ g_value_set_object (value, priv->channel);
+ break;
+ case PROP_READY:
+ g_value_set_boolean (value, priv->ready);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+tp_group_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (object);
+
+ switch (param_id) {
+ case PROP_CHANNEL:
+ priv->channel = g_object_ref (g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
+ break;
+ };
+}
+
+static void
+empathy_tp_group_class_init (EmpathyTpGroupClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = tp_group_finalize;
+ object_class->constructed = tp_group_constructed;
+ object_class->get_property = tp_group_get_property;
+ object_class->set_property = tp_group_set_property;
+
+ g_object_class_install_property (object_class,
+ PROP_CHANNEL,
+ g_param_spec_object ("channel",
+ "telepathy channel",
+ "The channel for the group",
+ TP_TYPE_CHANNEL,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (object_class,
+ PROP_READY,
+ g_param_spec_boolean ("ready",
+ "Is the object ready",
+ "This object can't be used until this becomes true",
+ FALSE,
+ G_PARAM_READABLE));
+
+ signals[MEMBER_ADDED] =
+ g_signal_new ("member-added",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _empathy_marshal_VOID__OBJECT_OBJECT_UINT_STRING,
+ G_TYPE_NONE,
+ 4, EMPATHY_TYPE_CONTACT, EMPATHY_TYPE_CONTACT, G_TYPE_UINT, G_TYPE_STRING);
+
+ signals[MEMBER_REMOVED] =
+ g_signal_new ("member-removed",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _empathy_marshal_VOID__OBJECT_OBJECT_UINT_STRING,
+ G_TYPE_NONE,
+ 4, EMPATHY_TYPE_CONTACT, EMPATHY_TYPE_CONTACT, G_TYPE_UINT, G_TYPE_STRING);
+
+ signals[LOCAL_PENDING] =
+ g_signal_new ("local-pending",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _empathy_marshal_VOID__OBJECT_OBJECT_UINT_STRING,
+ G_TYPE_NONE,
+ 4, EMPATHY_TYPE_CONTACT, EMPATHY_TYPE_CONTACT, G_TYPE_UINT, G_TYPE_STRING);
+
+ signals[REMOTE_PENDING] =
+ g_signal_new ("remote-pending",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ _empathy_marshal_VOID__OBJECT_OBJECT_UINT_STRING,
+ G_TYPE_NONE,
+ 4, EMPATHY_TYPE_CONTACT, EMPATHY_TYPE_CONTACT, G_TYPE_UINT, G_TYPE_STRING);
+
+ signals[DESTROY] =
+ g_signal_new ("destroy",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ g_type_class_add_private (object_class, sizeof (EmpathyTpGroupPriv));
+}
+
+static void
+empathy_tp_group_init (EmpathyTpGroup *group)
+{
+ EmpathyTpGroupPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (group,
+ EMPATHY_TYPE_TP_GROUP, EmpathyTpGroupPriv);
+
+ group->priv = priv;
+}
+
+EmpathyTpGroup *
+empathy_tp_group_new (TpChannel *channel)
+{
+ g_return_val_if_fail (TP_IS_CHANNEL (channel), NULL);
+
+ return g_object_new (EMPATHY_TYPE_TP_GROUP,
+ "channel", channel,
+ NULL);
+}
+
+static void
+tp_group_async_cb (TpChannel *channel,
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ if (error) {
+ DEBUG ("%s: %s", (gchar*) user_data, error->message);
+ }
+}
+
+void
+empathy_tp_group_close (EmpathyTpGroup *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+ g_return_if_fail (EMPATHY_IS_TP_GROUP (group));
+ g_return_if_fail (priv->ready);
+
+ tp_cli_channel_call_close (priv->channel, -1,
+ tp_group_async_cb,
+ "Failed to close", NULL,
+ G_OBJECT (group));
+}
+
+static GArray *
+tp_group_get_handles (GList *contacts)
+{
+ GArray *handles;
+ guint length;
+ GList *l;
+
+ length = g_list_length (contacts);
+ handles = g_array_sized_new (FALSE, FALSE, sizeof (guint), length);
+
+ for (l = contacts; l; l = l->next) {
+ guint handle;
+
+ handle = empathy_contact_get_handle (l->data);
+ g_array_append_val (handles, handle);
+ }
+
+ return handles;
+}
+
+void
+empathy_tp_group_add_members (EmpathyTpGroup *group,
+ GList *contacts,
+ const gchar *message)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ GArray *handles;
+
+ g_return_if_fail (EMPATHY_IS_TP_GROUP (group));
+ g_return_if_fail (contacts != NULL);
+ g_return_if_fail (priv->ready);
+
+ handles = tp_group_get_handles (contacts);
+ tp_cli_channel_interface_group_call_add_members (priv->channel, -1,
+ handles,
+ message,
+ tp_group_async_cb,
+ "Failed to add members", NULL,
+ G_OBJECT (group));
+ g_array_free (handles, TRUE);
+}
+
+void
+empathy_tp_group_remove_members (EmpathyTpGroup *group,
+ GList *contacts,
+ const gchar *message)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ GArray *handles;
+
+ g_return_if_fail (EMPATHY_IS_TP_GROUP (group));
+ g_return_if_fail (contacts != NULL);
+ g_return_if_fail (priv->ready);
+
+ handles = tp_group_get_handles (contacts);
+ tp_cli_channel_interface_group_call_remove_members (priv->channel, -1,
+ handles,
+ message,
+ tp_group_async_cb,
+ "Failed to remove members", NULL,
+ G_OBJECT (group));
+ g_array_free (handles, TRUE);
+}
+
+void
+empathy_tp_group_add_member (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ const gchar *message)
+{
+ GList *contacts;
+
+ contacts = g_list_prepend (NULL, contact);
+ empathy_tp_group_add_members (group, contacts, message);
+ g_list_free (contacts);
+}
+
+void
+empathy_tp_group_remove_member (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ const gchar *message)
+{
+ GList *contacts;
+
+ contacts = g_list_prepend (NULL, contact);
+ empathy_tp_group_remove_members (group, contacts, message);
+ g_list_free (contacts);
+}
+
+GList *
+empathy_tp_group_get_members (EmpathyTpGroup *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_GROUP (group), NULL);
+
+ g_list_foreach (priv->members, (GFunc) g_object_ref, NULL);
+
+ return g_list_copy (priv->members);
+}
+
+GList *
+empathy_tp_group_get_local_pendings (EmpathyTpGroup *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ GList *pendings = NULL, *l;
+
+ g_return_val_if_fail (EMPATHY_IS_TP_GROUP (group), NULL);
+
+ for (l = priv->local_pendings; l; l = l->next) {
+ EmpathyPendingInfo *info;
+ EmpathyPendingInfo *new_info;
+
+ info = l->data;
+ new_info = empathy_pending_info_new (info->member,
+ info->actor,
+ info->message);
+ pendings = g_list_prepend (pendings, new_info);
+ }
+
+ return pendings;
+}
+
+GList *
+empathy_tp_group_get_remote_pendings (EmpathyTpGroup *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_GROUP (group), NULL);
+
+ g_list_foreach (priv->remote_pendings, (GFunc) g_object_ref, NULL);
+
+ return g_list_copy (priv->remote_pendings);
+}
+
+const gchar *
+empathy_tp_group_get_name (EmpathyTpGroup *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_GROUP (group), NULL);
+ g_return_val_if_fail (priv->ready, NULL);
+
+ return priv->group_name;
+}
+
+EmpathyContact *
+empathy_tp_group_get_self_contact (EmpathyTpGroup *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_GROUP (group), NULL);
+ g_return_val_if_fail (priv->ready, NULL);
+
+ return tp_group_get_contact (group, priv->self_handle);
+}
+
+gboolean
+empathy_tp_group_is_member (EmpathyTpGroup *group,
+ EmpathyContact *contact)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_GROUP (group), FALSE);
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), FALSE);
+
+ return g_list_find (priv->members, contact) != NULL;
+}
+
+gboolean
+empathy_tp_group_is_ready (EmpathyTpGroup *group)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+
+ g_return_val_if_fail (EMPATHY_IS_TP_GROUP (group), FALSE);
+
+ return priv->ready;
+}
+
+EmpathyPendingInfo *
+empathy_tp_group_get_invitation (EmpathyTpGroup *group,
+ EmpathyContact **remote_contact)
+{
+ EmpathyTpGroupPriv *priv = GET_PRIV (group);
+ EmpathyContact *contact = NULL;
+ EmpathyPendingInfo *invitation = NULL;
+ GList *l;
+
+ g_return_val_if_fail (EMPATHY_IS_TP_GROUP (group), FALSE);
+ g_return_val_if_fail (priv->ready, NULL);
+
+ for (l = priv->local_pendings; l; l = l->next) {
+ EmpathyPendingInfo *info = l->data;
+
+ if (empathy_contact_is_user (info->member)) {
+ invitation = info;
+ break;
+ }
+ }
+
+ if (invitation) {
+ contact = invitation->actor;
+ }
+ if (!invitation) {
+ if (priv->remote_pendings) {
+ contact = priv->remote_pendings->data;
+ }
+ else if (priv->members) {
+ contact = priv->members->data;
+ }
+ }
+
+ if (remote_contact && contact) {
+ *remote_contact = g_object_ref (contact);
+ }
+
+ return invitation;
+}
+
diff --git a/trunk/libempathy/empathy-tp-group.h b/trunk/libempathy/empathy-tp-group.h
new file mode 100644
index 000000000..bbd4b84f9
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-group.h
@@ -0,0 +1,92 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2006 Xavier Claessens <xclaesse@gmail.com>
+ * 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_GROUP_H__
+#define __EMPATHY_TP_GROUP_H__
+
+#include <glib.h>
+
+#include <telepathy-glib/channel.h>
+
+#include "empathy-contact.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_TP_GROUP (empathy_tp_group_get_type ())
+#define EMPATHY_TP_GROUP(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_TP_GROUP, EmpathyTpGroup))
+#define EMPATHY_TP_GROUP_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_TP_GROUP, EmpathyTpGroupClass))
+#define EMPATHY_IS_TP_GROUP(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_TP_GROUP))
+#define EMPATHY_IS_TP_GROUP_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_TP_GROUP))
+#define EMPATHY_TP_GROUP_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_TP_GROUP, EmpathyTpGroupClass))
+
+typedef struct _EmpathyTpGroup EmpathyTpGroup;
+typedef struct _EmpathyTpGroupClass EmpathyTpGroupClass;
+
+struct _EmpathyTpGroup {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyTpGroupClass {
+ GObjectClass parent_class;
+};
+
+typedef struct {
+ EmpathyContact *member;
+ EmpathyContact *actor;
+ gchar *message;
+ guint reason;
+} EmpathyPendingInfo;
+
+GType empathy_tp_group_get_type (void) G_GNUC_CONST;
+EmpathyTpGroup * empathy_tp_group_new (TpChannel *channel);
+void empathy_tp_group_close (EmpathyTpGroup *group);
+void empathy_tp_group_add_members (EmpathyTpGroup *group,
+ GList *contacts,
+ const gchar *message);
+void empathy_tp_group_add_member (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ const gchar *message);
+void empathy_tp_group_remove_members (EmpathyTpGroup *group,
+ GList *contacts,
+ const gchar *message);
+void empathy_tp_group_remove_member (EmpathyTpGroup *group,
+ EmpathyContact *contact,
+ const gchar *message);
+GList * empathy_tp_group_get_members (EmpathyTpGroup *group);
+GList * empathy_tp_group_get_local_pendings (EmpathyTpGroup *group);
+GList * empathy_tp_group_get_remote_pendings (EmpathyTpGroup *group);
+const gchar * empathy_tp_group_get_name (EmpathyTpGroup *group);
+EmpathyContact * empathy_tp_group_get_self_contact (EmpathyTpGroup *group);
+gboolean empathy_tp_group_is_member (EmpathyTpGroup *group,
+ EmpathyContact *contact);
+gboolean empathy_tp_group_is_ready (EmpathyTpGroup *group);
+EmpathyPendingInfo *empathy_tp_group_get_invitation (EmpathyTpGroup *group,
+ EmpathyContact **remote_contact);
+EmpathyPendingInfo *empathy_pending_info_new (EmpathyContact *member,
+ EmpathyContact *actor,
+ const gchar *message);
+void empathy_pending_info_free (EmpathyPendingInfo *info);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_TP_GROUP_H__ */
diff --git a/trunk/libempathy/empathy-tp-roomlist.c b/trunk/libempathy/empathy-tp-roomlist.c
new file mode 100644
index 000000000..3819d1205
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-roomlist.c
@@ -0,0 +1,398 @@
+/* -*- 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 <libmissioncontrol/mission-control.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;
+ McAccount *account;
+ gboolean is_listing;
+} EmpathyTpRoomlistPriv;
+
+enum {
+ NEW_ROOM,
+ DESTROY,
+ LAST_SIGNAL
+};
+
+enum {
+ PROP_0,
+ PROP_CONNECTION,
+ 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_got_rooms_cb (TpChannel *channel,
+ const GPtrArray *rooms,
+ gpointer user_data,
+ GObject *list)
+{
+ EmpathyTpRoomlistPriv *priv = GET_PRIV (list);
+ guint i;
+ const gchar **names;
+ gchar **room_ids;
+ GArray *handles;
+
+ names = g_new0 (const gchar*, rooms->len + 1);
+ handles = g_array_sized_new (FALSE, FALSE, sizeof (guint), rooms->len);
+ for (i = 0; i < rooms->len; i++) {
+ const GValue *room_name_value;
+ GValueArray *room_struct;
+ guint handle;
+ 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));
+ info = g_value_get_boxed (g_value_array_get_nth (room_struct, 2));
+ room_name_value = g_hash_table_lookup (info, "name");
+
+ names[i] = g_value_get_string (room_name_value);
+ g_array_append_val (handles, handle);
+ }
+
+ tp_cli_connection_run_inspect_handles (priv->connection, -1,
+ TP_HANDLE_TYPE_ROOM,
+ handles,
+ &room_ids,
+ NULL, NULL);
+ for (i = 0; i < handles->len; i++) {
+ EmpathyChatroom *chatroom;
+
+ chatroom = empathy_chatroom_new_full (priv->account,
+ room_ids[i],
+ names[i],
+ FALSE);
+ g_signal_emit (list, signals[NEW_ROOM], 0, chatroom);
+ g_object_unref (chatroom);
+ g_free (room_ids[i]);
+ }
+
+ g_free (names);
+ g_free (room_ids);
+ g_array_free (handles, TRUE);
+}
+
+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
+tp_roomlist_request_channel_cb (TpConnection *connection,
+ const gchar *object_path,
+ const GError *error,
+ gpointer user_data,
+ GObject *list)
+{
+ EmpathyTpRoomlistPriv *priv = GET_PRIV (list);
+
+ if (error) {
+ DEBUG ("Error requesting channel: %s", error->message);
+ return;
+ }
+
+ priv->channel = tp_channel_new (priv->connection, object_path,
+ TP_IFACE_CHANNEL_TYPE_ROOM_LIST,
+ TP_HANDLE_TYPE_NONE,
+ 0, NULL);
+ tp_channel_run_until_ready (priv->channel, NULL, NULL);
+
+ g_signal_connect (priv->channel, "invalidated",
+ G_CALLBACK (tp_roomlist_invalidated_cb),
+ list);
+
+ tp_cli_channel_type_room_list_connect_to_listing_rooms (priv->channel,
+ tp_roomlist_listing_cb,
+ NULL, NULL,
+ G_OBJECT (list),
+ NULL);
+ tp_cli_channel_type_room_list_connect_to_got_rooms (priv->channel,
+ tp_roomlist_got_rooms_cb,
+ NULL, NULL,
+ G_OBJECT (list),
+ NULL);
+
+ tp_cli_channel_type_room_list_call_get_listing_rooms (priv->channel, -1,
+ tp_roomlist_get_listing_rooms_cb,
+ NULL, NULL,
+ G_OBJECT (list));
+}
+
+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);
+ MissionControl *mc;
+
+ mc = empathy_mission_control_new ();
+ priv->account = mission_control_get_account_for_tpconnection (mc,
+ priv->connection,
+ NULL);
+ g_object_unref (mc);
+
+ tp_cli_connection_call_request_channel (priv->connection, -1,
+ TP_IFACE_CHANNEL_TYPE_ROOM_LIST,
+ TP_HANDLE_TYPE_NONE,
+ 0,
+ TRUE,
+ tp_roomlist_request_channel_cb,
+ NULL, NULL,
+ list);
+}
+
+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_CONNECTION:
+ g_value_set_object (value, priv->connection);
+ 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_CONNECTION:
+ priv->connection = g_object_ref (g_value_get_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_CONNECTION,
+ g_param_spec_object ("connection",
+ "The Connection",
+ "The connection on which it lists rooms",
+ TP_TYPE_CONNECTION,
+ 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_VOID__OBJECT,
+ 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_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+ 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;
+}
+
+EmpathyTpRoomlist *
+empathy_tp_roomlist_new (McAccount *account)
+{
+ EmpathyTpRoomlist *list;
+ MissionControl *mc;
+ TpConnection *connection;
+
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+
+ mc = empathy_mission_control_new ();
+ connection = mission_control_get_tpconnection (mc, account, NULL);
+
+ list = g_object_new (EMPATHY_TYPE_TP_ROOMLIST,
+ "connection", connection,
+ NULL);
+
+ g_object_unref (mc);
+ g_object_unref (connection);
+
+ 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));
+ g_return_if_fail (TP_IS_CHANNEL (priv->channel));
+
+ tp_cli_channel_type_room_list_call_list_rooms (priv->channel, -1,
+ NULL, NULL, NULL,
+ G_OBJECT (list));
+}
+
+void
+empathy_tp_roomlist_stop (EmpathyTpRoomlist *list)
+{
+ EmpathyTpRoomlistPriv *priv = GET_PRIV (list);
+
+ g_return_if_fail (EMPATHY_IS_TP_ROOMLIST (list));
+ g_return_if_fail (TP_IS_CHANNEL (priv->channel));
+
+ tp_cli_channel_type_room_list_call_stop_listing (priv->channel, -1,
+ NULL, NULL, NULL,
+ G_OBJECT (list));
+}
+
diff --git a/trunk/libempathy/empathy-tp-roomlist.h b/trunk/libempathy/empathy-tp-roomlist.h
new file mode 100644
index 000000000..9f45b7f5c
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-roomlist.h
@@ -0,0 +1,59 @@
+/* -*- 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/connection.h>
+#include <libmissioncontrol/mc-account.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 (McAccount *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/trunk/libempathy/empathy-tp-tube.c b/trunk/libempathy/empathy-tp-tube.c
new file mode 100644
index 000000000..796ccbe34
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-tube.c
@@ -0,0 +1,509 @@
+/*
+ * Copyright (C) 2008 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+ * Elliot Fairweather <elliot.fairweather@collabora.co.uk>
+ */
+
+#include <config.h>
+
+#include <telepathy-glib/connection.h>
+#include <telepathy-glib/util.h>
+
+#include "empathy-contact-factory.h"
+#include "empathy-enum-types.h"
+#include "empathy-tp-tube.h"
+#include "empathy-utils.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_TP
+#include "empathy-debug.h"
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyTpTube)
+typedef struct
+{
+ TpChannel *channel;
+ guint id;
+ guint initiator;
+ guint type;
+ gchar *service;
+ GHashTable *parameters;
+ guint state;
+ EmpathyContact *initiator_contact;
+ EmpathyContactFactory *factory;
+} EmpathyTpTubePriv;
+
+enum
+{
+ PROP_0,
+ PROP_CHANNEL,
+ PROP_TP_TUBES,
+ PROP_ID,
+ PROP_INITIATOR,
+ PROP_TYPE,
+ PROP_SERVICE,
+ PROP_PARAMETERS,
+ PROP_STATE,
+ PROP_INITIATOR_CONTACT
+};
+
+enum
+{
+ DESTROY,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE (EmpathyTpTube, empathy_tp_tube, G_TYPE_OBJECT)
+
+static void
+tp_tube_state_changed_cb (TpChannel *channel,
+ guint id,
+ guint state,
+ gpointer user_data,
+ GObject *tube)
+{
+ EmpathyTpTubePriv *priv = GET_PRIV (tube);
+
+ if (id != priv->id)
+ return;
+
+ DEBUG ("Tube state changed");
+
+ priv->state = state;
+ g_object_notify (tube, "state");
+}
+
+static void
+tp_tube_invalidated_cb (TpChannel *channel,
+ GQuark domain,
+ gint code,
+ gchar *message,
+ EmpathyTpTube *tube)
+{
+ DEBUG ("Channel invalidated: %s", message);
+ g_signal_emit (tube, signals[DESTROY], 0);
+}
+
+static void
+tp_tube_closed_cb (TpChannel *channel,
+ guint id,
+ gpointer user_data,
+ GObject *tube)
+{
+ EmpathyTpTubePriv *priv = GET_PRIV (tube);
+
+ if (id != priv->id)
+ return;
+
+ DEBUG ("Tube closed");
+ g_signal_emit (tube, signals[DESTROY], 0);
+}
+
+static void
+tp_tube_async_cb (TpChannel *channel,
+ const GError *error,
+ gpointer user_data,
+ GObject *tube)
+{
+ if (error)
+ DEBUG ("Error %s: %s", (gchar*) user_data, error->message);
+}
+
+static void
+tp_tube_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpTubePriv *priv = GET_PRIV (object);
+
+ switch (prop_id)
+ {
+ case PROP_CHANNEL:
+ priv->channel = g_value_dup_object (value);
+ break;
+ case PROP_ID:
+ priv->id = g_value_get_uint (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+tp_tube_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EmpathyTpTubePriv *priv = GET_PRIV (object);
+
+ switch (prop_id)
+ {
+ case PROP_CHANNEL:
+ g_value_set_object (value, priv->channel);
+ break;
+ case PROP_ID:
+ g_value_set_uint (value, priv->id);
+ break;
+ case PROP_INITIATOR:
+ g_value_set_uint (value, priv->initiator);
+ break;
+ case PROP_TYPE:
+ g_value_set_uint (value, priv->type);
+ break;
+ case PROP_SERVICE:
+ g_value_set_string (value, priv->service);
+ break;
+ case PROP_PARAMETERS:
+ g_value_set_boxed (value, priv->parameters);
+ break;
+ case PROP_STATE:
+ g_value_set_uint (value, priv->state);
+ break;
+ case PROP_INITIATOR_CONTACT:
+ g_value_set_object (value, priv->initiator_contact);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static GObject *
+tp_tube_constructor (GType type,
+ guint n_props,
+ GObjectConstructParam *props)
+{
+ GObject *self;
+ EmpathyTpTubePriv *priv;
+ GPtrArray *tubes;
+ guint i;
+ GError *error = NULL;
+
+ self = G_OBJECT_CLASS (empathy_tp_tube_parent_class)->constructor (
+ type, n_props, props);
+ priv = GET_PRIV (self);
+
+ g_signal_connect (priv->channel, "invalidated",
+ G_CALLBACK (tp_tube_invalidated_cb), self);
+ tp_cli_channel_type_tubes_connect_to_tube_closed (priv->channel,
+ tp_tube_closed_cb, NULL, NULL, self, NULL);
+ tp_cli_channel_type_tubes_connect_to_tube_state_changed (priv->channel,
+ tp_tube_state_changed_cb, NULL, NULL, self, NULL);
+
+ /* FIXME: It is absolutely not opimized to list all tubes to get information
+ * about our tube, but we don't really have the choice to avoid races. */
+ if (!tp_cli_channel_type_tubes_run_list_tubes (priv->channel, -1, &tubes,
+ &error, NULL))
+ {
+ DEBUG ("Couldn't list tubes: %s", error->message);
+ g_clear_error (&error);
+ return self;
+ }
+
+ for (i = 0; i < tubes->len; i++)
+ {
+ GValueArray *values;
+ guint id;
+
+ values = g_ptr_array_index (tubes, i);
+ id = g_value_get_uint (g_value_array_get_nth (values, 0));
+
+ if (id == priv->id)
+ {
+ TpConnection *connection;
+ MissionControl *mc;
+ McAccount *account;
+
+ g_object_get (priv->channel, "connection", &connection, NULL);
+ mc = empathy_mission_control_new ();
+ account = mission_control_get_account_for_tpconnection (mc,
+ connection, NULL);
+
+ priv->initiator = g_value_get_uint (g_value_array_get_nth (values, 1));
+ priv->type = g_value_get_uint (g_value_array_get_nth (values, 2));
+ priv->service = g_value_dup_string (g_value_array_get_nth (values, 3));
+ priv->parameters = g_value_dup_boxed (g_value_array_get_nth (values, 4));
+ priv->state = g_value_get_uint (g_value_array_get_nth (values, 5));
+ priv->initiator_contact = empathy_contact_factory_get_from_handle (
+ priv->factory, account, priv->initiator);
+
+ g_object_unref (connection);
+ g_object_unref (mc);
+ g_object_unref (account);
+ }
+
+ g_value_array_free (values);
+ }
+ g_ptr_array_free (tubes, TRUE);
+
+ return self;
+}
+
+static void
+tp_tube_finalize (GObject *object)
+{
+ EmpathyTpTubePriv *priv = GET_PRIV (object);
+
+ DEBUG ("Finalizing: %p", object);
+
+ if (priv->channel)
+ {
+ g_signal_handlers_disconnect_by_func (priv->channel,
+ tp_tube_invalidated_cb, object);
+ tp_cli_channel_type_tubes_call_close_tube (priv->channel, -1, priv->id,
+ tp_tube_async_cb, "closing tube", NULL, NULL);
+ g_object_unref (priv->channel);
+ }
+ if (priv->initiator_contact)
+ g_object_unref (priv->initiator_contact);
+ if (priv->factory)
+ g_object_unref (priv->factory);
+
+ g_free (priv->service);
+ g_hash_table_destroy (priv->parameters);
+
+ G_OBJECT_CLASS (empathy_tp_tube_parent_class)->finalize (object);
+}
+
+static void
+empathy_tp_tube_class_init (EmpathyTpTubeClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->constructor = tp_tube_constructor;
+ object_class->finalize = tp_tube_finalize;
+ object_class->set_property = tp_tube_set_property;
+ object_class->get_property = tp_tube_get_property;
+
+ g_object_class_install_property (object_class, PROP_CHANNEL,
+ g_param_spec_object ("channel", "channel", "channel", TP_TYPE_CHANNEL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property (object_class, PROP_ID,
+ g_param_spec_uint ("id", "id", "id", 0, G_MAXUINT, 0,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property (object_class, PROP_INITIATOR,
+ g_param_spec_uint ("initiator", "initiator", "initiator",
+ 0, G_MAXUINT, 0, G_PARAM_READABLE | G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property (object_class, PROP_TYPE,
+ g_param_spec_uint ("type", "type", "type", 0, G_MAXUINT, 0,
+ G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property (object_class, PROP_SERVICE,
+ g_param_spec_string ("service", "service", "service", NULL,
+ G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property (object_class, PROP_PARAMETERS,
+ g_param_spec_boxed ("parameters", "parameters", "parameters",
+ G_TYPE_HASH_TABLE, G_PARAM_READABLE | G_PARAM_STATIC_NAME |
+ G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property (object_class, PROP_STATE,
+ g_param_spec_uint ("state", "state", "state", 0, G_MAXUINT, 0,
+ G_PARAM_READABLE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK |
+ G_PARAM_STATIC_BLURB));
+
+ g_object_class_install_property (object_class, PROP_INITIATOR_CONTACT,
+ g_param_spec_object ("initiator-contact", "initiator contact",
+ "initiator contact", EMPATHY_TYPE_CONTACT, G_PARAM_READABLE |
+ G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ signals[DESTROY] = g_signal_new ("destroy",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0, NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_type_class_add_private (klass, sizeof (EmpathyTpTubePriv));
+}
+
+static void
+empathy_tp_tube_init (EmpathyTpTube *tube)
+{
+ EmpathyTpTubePriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (tube,
+ EMPATHY_TYPE_TP_TUBE, EmpathyTpTubePriv);
+
+ tube->priv = priv;
+
+ priv->factory = empathy_contact_factory_new ();
+}
+
+EmpathyTpTube *
+empathy_tp_tube_new (TpChannel *channel, guint tube_id)
+{
+ g_return_val_if_fail (TP_IS_CHANNEL (channel), NULL);
+
+ return g_object_new (EMPATHY_TYPE_TP_TUBE,
+ "channel", channel, "id", tube_id, NULL);
+}
+
+EmpathyTpTube *
+empathy_tp_tube_new_stream_tube (EmpathyContact *contact,
+ TpSocketAddressType type,
+ const gchar *hostname,
+ guint port,
+ const gchar *service)
+{
+ MissionControl *mc;
+ McAccount *account;
+ TpConnection *connection;
+ TpChannel *channel;
+ gchar *object_path;
+ guint id;
+ GHashTable *params;
+ GValue *address;
+ GValue *control_param;
+ EmpathyTpTube *tube = NULL;
+ GError *error = NULL;
+
+ g_return_val_if_fail (EMPATHY_IS_CONTACT (contact), NULL);
+ g_return_val_if_fail (hostname != NULL, NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+
+ mc = empathy_mission_control_new ();
+ account = empathy_contact_get_account (contact);
+ connection = mission_control_get_tpconnection (mc, account, NULL);
+ g_object_unref (mc);
+
+ if (!tp_cli_connection_run_request_channel (connection, -1,
+ TP_IFACE_CHANNEL_TYPE_TUBES, TP_HANDLE_TYPE_CONTACT,
+ empathy_contact_get_handle (contact), FALSE, &object_path, &error, NULL))
+ {
+ DEBUG ("Error requesting channel: %s", error->message);
+ g_clear_error (&error);
+ g_object_unref (connection);
+ return NULL;
+ }
+
+ DEBUG ("Offering a new stream tube");
+
+ channel = tp_channel_new (connection, object_path,
+ TP_IFACE_CHANNEL_TYPE_TUBES, TP_HANDLE_TYPE_CONTACT,
+ empathy_contact_get_handle (contact), NULL);
+
+ #define ADDRESS_TYPE dbus_g_type_get_struct ("GValueArray",\
+ G_TYPE_STRING, G_TYPE_UINT, G_TYPE_INVALID)
+ params = g_hash_table_new (g_str_hash, g_str_equal);
+ address = tp_g_value_slice_new (ADDRESS_TYPE);
+ g_value_take_boxed (address, dbus_g_type_specialized_construct (ADDRESS_TYPE));
+ dbus_g_type_struct_set (address, 0, hostname, 1, port, G_MAXUINT);
+ control_param = tp_g_value_slice_new (G_TYPE_STRING);
+
+ if (!tp_cli_channel_type_tubes_run_offer_stream_tube (channel, -1,
+ service, params, type, address,
+ TP_SOCKET_ACCESS_CONTROL_LOCALHOST, control_param, &id, &error, NULL))
+ {
+ DEBUG ("Couldn't offer tube: %s", error->message);
+ g_clear_error (&error);
+ goto OUT;
+ }
+
+ DEBUG ("Stream tube id=%d offered", id);
+
+ tube = empathy_tp_tube_new (channel, id);
+
+OUT:
+ g_object_unref (channel);
+ g_free (object_path);
+ g_hash_table_destroy (params);
+ tp_g_value_slice_free (address);
+ tp_g_value_slice_free (control_param);
+ g_object_unref (connection);
+
+ return tube;
+}
+
+static void
+tp_tube_accept_stream_cb (TpChannel *proxy,
+ const GValue *address,
+ const GError *error,
+ gpointer user_data,
+ GObject *weak_object)
+{
+ if (error)
+ DEBUG ("Error accepting tube: %s", error->message);
+}
+
+void
+empathy_tp_tube_accept_stream_tube (EmpathyTpTube *tube,
+ TpSocketAddressType type)
+{
+ EmpathyTpTubePriv *priv = GET_PRIV (tube);
+ GValue *control_param;
+
+ g_return_if_fail (EMPATHY_IS_TP_TUBE (tube));
+
+ DEBUG ("Accepting stream tube - id: %d", priv->id);
+
+ control_param = tp_g_value_slice_new (G_TYPE_STRING);
+ tp_cli_channel_type_tubes_call_accept_stream_tube (priv->channel, -1, priv->id,
+ type, TP_SOCKET_ACCESS_CONTROL_LOCALHOST, control_param,
+ tp_tube_accept_stream_cb, NULL, NULL, G_OBJECT (tube));
+
+ tp_g_value_slice_free (control_param);
+}
+
+void
+empathy_tp_tube_get_socket (EmpathyTpTube *tube,
+ gchar **hostname,
+ guint *port)
+{
+ EmpathyTpTubePriv *priv = GET_PRIV (tube);
+ GValue *address;
+ guint address_type;
+ GError *error = NULL;
+
+ g_return_if_fail (EMPATHY_IS_TP_TUBE (tube));
+
+ DEBUG ("Getting stream tube socket address");
+
+ address = g_slice_new0 (GValue);
+ if (!tp_cli_channel_type_tubes_run_get_stream_tube_socket_address (priv->channel,
+ -1, priv->id, &address_type, &address, &error, NULL))
+ {
+ DEBUG ("Couldn't get socket address: %s", error->message);
+ g_clear_error (&error);
+ return;
+ }
+
+ switch (address_type)
+ {
+ case TP_SOCKET_ADDRESS_TYPE_UNIX:
+ case TP_SOCKET_ADDRESS_TYPE_ABSTRACT_UNIX:
+ dbus_g_type_struct_get (address, 0, hostname, G_MAXUINT);
+ break;
+ case TP_SOCKET_ADDRESS_TYPE_IPV4:
+ case TP_SOCKET_ADDRESS_TYPE_IPV6:
+ dbus_g_type_struct_get (address, 0, hostname, 1, port, G_MAXUINT);
+ break;
+ }
+
+ tp_g_value_slice_free (address);
+}
+
diff --git a/trunk/libempathy/empathy-tp-tube.h b/trunk/libempathy/empathy-tp-tube.h
new file mode 100644
index 000000000..d439c6b63
--- /dev/null
+++ b/trunk/libempathy/empathy-tp-tube.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2008 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Authors: Guillaume Desmottes <guillaume.desmottes@collabora.co.uk>
+ * Elliot Fairweather <elliot.fairweather@collabora.co.uk>
+ */
+
+#ifndef __EMPATHY_TP_TUBE_H__
+#define __EMPATHY_TP_TUBE_H__
+
+#include <glib-object.h>
+
+#include <telepathy-glib/channel.h>
+
+#include "empathy-contact.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_TP_TUBE (empathy_tp_tube_get_type ())
+#define EMPATHY_TP_TUBE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), \
+ EMPATHY_TYPE_TP_TUBE, EmpathyTpTube))
+#define EMPATHY_TP_TUBE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), \
+ EMPATHY_TYPE_TP_TUBE, EmpathyTpTubeClass))
+#define EMPATHY_IS_TP_TUBE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), \
+ EMPATHY_TYPE_TP_TUBE))
+#define EMPATHY_IS_TP_TUBE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+ EMPATHY_TYPE_TP_TUBE))
+#define EMPATHY_TP_TUBE_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS ((object), \
+ EMPATHY_TYPE_TP_TUBE, EmpathyTpTubeClass))
+
+typedef struct _EmpathyTpTube EmpathyTpTube;
+typedef struct _EmpathyTpTubeClass EmpathyTpTubeClass;
+
+struct _EmpathyTpTube {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyTpTubeClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_tp_tube_get_type (void) G_GNUC_CONST;
+EmpathyTpTube *empathy_tp_tube_new (TpChannel *channel, guint tube_id);
+EmpathyTpTube *empathy_tp_tube_new_stream_tube (EmpathyContact *contact,
+ TpSocketAddressType type, const gchar *hostname, guint port,
+ const gchar *service);
+void empathy_tp_tube_accept_stream_tube (EmpathyTpTube *tube,
+ TpSocketAddressType type);
+void empathy_tp_tube_get_socket (EmpathyTpTube *tube, gchar **hostname,
+ guint *port);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_TP_TUBE_H__ */
diff --git a/trunk/libempathy/empathy-tube-handler.c b/trunk/libempathy/empathy-tube-handler.c
new file mode 100644
index 000000000..2bbaea18c
--- /dev/null
+++ b/trunk/libempathy/empathy-tube-handler.c
@@ -0,0 +1,229 @@
+/*
+ * 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: Xavier Claessens <xclaesse@gmail.com>
+ * Elliot Fairweather <elliot.fairweather@collabora.co.uk>
+ */
+
+#include <config.h>
+
+#include <dbus/dbus-glib.h>
+
+#include <telepathy-glib/dbus.h>
+#include <telepathy-glib/connection.h>
+#include <telepathy-glib/channel.h>
+#include <telepathy-glib/interfaces.h>
+#include <telepathy-glib/util.h>
+
+#include <extensions/extensions.h>
+
+#include "empathy-tp-tube.h"
+#include "empathy-tube-handler.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include "empathy-debug.h"
+
+static void empathy_tube_handler_iface_init (EmpSvcTubeHandlerClass *klass);
+
+enum
+{
+ NEW_TUBE,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+G_DEFINE_TYPE_WITH_CODE (EmpathyTubeHandler, empathy_tube_handler,
+ G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE (EMP_TYPE_SVC_TUBE_HANDLER,
+ empathy_tube_handler_iface_init))
+
+typedef struct
+{
+ EmpathyTubeHandler *thandler;
+ gchar *bus_name;
+ gchar *connection;
+ gchar *channel;
+ guint handle_type;
+ guint handle;
+ guint id;
+} IdleData;
+
+static gboolean
+tube_handler_handle_tube_idle_cb (gpointer data)
+{
+ IdleData *idle_data = data;
+ TpConnection *connection;
+ TpChannel *channel;
+ EmpathyTpTube *tube;
+ static TpDBusDaemon *daemon = NULL;
+
+ DEBUG ("New tube to be handled id=%d", idle_data->id);
+
+ if (!daemon)
+ daemon = tp_dbus_daemon_new (tp_get_bus ());
+
+ connection = tp_connection_new (daemon, idle_data->bus_name,
+ idle_data->connection, NULL);
+ channel = tp_channel_new (connection, idle_data->channel,
+ TP_IFACE_CHANNEL_TYPE_TUBES, idle_data->handle_type,
+ idle_data->handle, NULL);
+ tp_channel_run_until_ready (channel, NULL, NULL);
+
+ tube = empathy_tp_tube_new (channel, idle_data->id);
+ g_signal_emit (idle_data->thandler, signals[NEW_TUBE], 0, tube);
+
+ g_object_unref (tube);
+ g_object_unref (channel);
+ g_object_unref (connection);
+ g_free (idle_data->bus_name);
+ g_free (idle_data->connection);
+ g_free (idle_data->channel);
+ g_slice_free (IdleData, idle_data);
+
+ return FALSE;
+}
+
+static void
+tube_handler_handle_tube (EmpSvcTubeHandler *self,
+ const gchar *bus_name,
+ const gchar *connection,
+ const gchar *channel,
+ guint handle_type,
+ guint handle,
+ guint id,
+ DBusGMethodInvocation *context)
+{
+ EmpathyTubeHandler *thandler = EMPATHY_TUBE_HANDLER (self);
+ IdleData *data;
+
+ data = g_slice_new (IdleData);
+ data->thandler = thandler;
+ data->bus_name = g_strdup (bus_name);
+ data->connection = g_strdup (connection);
+ data->channel = g_strdup (channel);
+ data->handle_type = handle_type;
+ data->handle = handle;
+ data->id = id;
+
+ g_idle_add_full (G_PRIORITY_HIGH, tube_handler_handle_tube_idle_cb,
+ data, NULL);
+
+ emp_svc_tube_handler_return_from_handle_tube (context);
+}
+
+static void
+empathy_tube_handler_class_init (EmpathyTubeHandlerClass *klass)
+{
+ signals[NEW_TUBE] =
+ g_signal_new ("new-tube", G_OBJECT_CLASS_TYPE (klass),
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__OBJECT,
+ G_TYPE_NONE, 1, EMPATHY_TYPE_TP_TUBE);
+}
+
+static void
+empathy_tube_handler_iface_init (EmpSvcTubeHandlerClass *klass)
+{
+ emp_svc_tube_handler_implement_handle_tube (klass,
+ tube_handler_handle_tube);
+}
+
+static void
+empathy_tube_handler_init (EmpathyTubeHandler *thandler)
+{
+}
+
+EmpathyTubeHandler *
+empathy_tube_handler_new (TpTubeType type, const gchar *service)
+{
+ EmpathyTubeHandler *thandler = NULL;
+ DBusGProxy *proxy;
+ guint result;
+ gchar *bus_name;
+ gchar *object_path;
+ GError *error = NULL;
+
+ g_return_val_if_fail (type <= TP_TUBE_TYPE_STREAM, NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+
+ bus_name = empathy_tube_handler_build_bus_name (type, service);
+ object_path = empathy_tube_handler_build_object_path (type, service);
+
+ proxy = dbus_g_proxy_new_for_name (tp_get_bus (), DBUS_SERVICE_DBUS,
+ DBUS_PATH_DBUS, DBUS_INTERFACE_DBUS);
+
+ if (!dbus_g_proxy_call (proxy, "RequestName", &error,
+ G_TYPE_STRING, bus_name, G_TYPE_UINT, DBUS_NAME_FLAG_DO_NOT_QUEUE,
+ G_TYPE_INVALID, G_TYPE_UINT, &result, G_TYPE_INVALID))
+ {
+ DEBUG ("Failed to request name: %s",
+ error ? error->message : "No error given");
+ g_clear_error (&error);
+ goto OUT;
+ }
+
+ thandler = g_object_new (EMPATHY_TYPE_TUBE_HANDLER, NULL);
+ dbus_g_connection_register_g_object (tp_get_bus (), object_path,
+ G_OBJECT (thandler));
+
+OUT:
+ g_object_unref (proxy);
+ g_free (bus_name);
+ g_free (object_path);
+
+ return thandler;
+}
+
+gchar *
+empathy_tube_handler_build_bus_name (TpTubeType type, const gchar *service)
+{
+ gchar *service_escaped;
+ gchar *str = NULL;
+
+ g_return_val_if_fail (type <= TP_TUBE_TYPE_STREAM, NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+
+ service_escaped = tp_escape_as_identifier (service);
+ if (type == TP_TUBE_TYPE_DBUS)
+ str = g_strdup_printf ("org.gnome.Empathy.DTubeHandler.%s", service);
+ else if (type == TP_TUBE_TYPE_STREAM)
+ str = g_strdup_printf ("org.gnome.Empathy.StreamTubeHandler.%s", service);
+
+ g_free (service_escaped);
+
+ return str;
+}
+
+gchar *
+empathy_tube_handler_build_object_path (TpTubeType type, const gchar *service)
+{
+ gchar *service_escaped;
+ gchar *str = NULL;
+
+ g_return_val_if_fail (type <= TP_TUBE_TYPE_STREAM, NULL);
+ g_return_val_if_fail (service != NULL, NULL);
+
+ service_escaped = tp_escape_as_identifier (service);
+ if (type == TP_TUBE_TYPE_DBUS)
+ str = g_strdup_printf ("/org/gnome/Empathy/DTubeHandler/%s", service);
+ else if (type == TP_TUBE_TYPE_STREAM)
+ str = g_strdup_printf ("/org/gnome/Empathy/StreamTubeHandler/%s", service);
+
+ g_free (service_escaped);
+
+ return str;
+}
+
diff --git a/trunk/libempathy/empathy-tube-handler.h b/trunk/libempathy/empathy-tube-handler.h
new file mode 100644
index 000000000..f20527a68
--- /dev/null
+++ b/trunk/libempathy/empathy-tube-handler.h
@@ -0,0 +1,64 @@
+/*
+ * 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: Xavier Claessens <xclaesse@gmail.com>
+ * Elliot Fairweather <elliot.fairweather@collabora.co.uk>
+ */
+
+#ifndef __EMPATHY_TUBE_HANDLER_H__
+#define __EMPATHY_TUBE_HANDLER_H__
+
+#include <glib.h>
+
+#include <telepathy-glib/enums.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_TUBE_HANDLER (empathy_tube_handler_get_type ())
+#define EMPATHY_TUBE_HANDLER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \
+ EMPATHY_TYPE_TUBE_HANDLER, EmpathyTubeHandler))
+#define EMPATHY_TUBE_HANDLER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), \
+ EMPATHY_TYPE_TUBE_HANDLER, EmpathyTubeHandlerClass))
+#define EMPATHY_IS_TUBE_HANDLER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), \
+ EMPATHY_TYPE_TUBE_HANDLER))
+#define EMPATHY_IS_TUBE_HANDLER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), \
+ EMPATHY_TYPE_TUBE_HANDLER))
+#define EMPATHY_TUBE_HANDLER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), \
+ EMPATHY_TYPE_TUBE_HANDLER, EmpathyTubeHandlerClass))
+
+typedef struct _EmpathyTubeHandler EmpathyTubeHandler;
+typedef struct _EmpathyTubeHandlerClass EmpathyTubeHandlerClass;
+
+struct _EmpathyTubeHandler {
+ GObject parent;
+};
+
+struct _EmpathyTubeHandlerClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_tube_handler_get_type (void) G_GNUC_CONST;
+EmpathyTubeHandler *empathy_tube_handler_new (TpTubeType type,
+ const gchar *service);
+gchar *empathy_tube_handler_build_bus_name (TpTubeType type,
+ const gchar *service);
+gchar *empathy_tube_handler_build_object_path (TpTubeType type,
+ const gchar *service);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_TUBE_HANDLER_H__ */
diff --git a/trunk/libempathy/empathy-utils.c b/trunk/libempathy/empathy-utils.c
new file mode 100644
index 000000000..fe6a787bb
--- /dev/null
+++ b/trunk/libempathy/empathy-utils.c
@@ -0,0 +1,749 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+#include <time.h>
+#include <sys/types.h>
+#include <regex.h>
+
+#include <glib/gi18n.h>
+
+#include <libxml/uri.h>
+#include <telepathy-glib/connection.h>
+#include <telepathy-glib/channel.h>
+#include <telepathy-glib/dbus.h>
+
+#include "empathy-utils.h"
+#include "empathy-contact-factory.h"
+#include "empathy-contact-manager.h"
+#include "empathy-tp-group.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include "empathy-debug.h"
+
+static void regex_init (void);
+
+gchar *
+empathy_substring (const gchar *str,
+ gint start,
+ gint end)
+{
+ return g_strndup (str + start, end - start);
+}
+
+/*
+ * Regular Expression code to match urls.
+ */
+#define APTCHARS "-A-Za-z0-9,-."
+#define USERCHARS "-A-Za-z0-9"
+#define PASSCHARS "-A-Za-z0-9,?;.:/!%$^*&~\"#'"
+#define HOSTCHARS "-A-Za-z0-9_"
+#define PATHCHARS "-A-Za-z0-9_$.+!*(),;:@&=?/~#%"
+#define SCHEME "(news:|telnet:|nntp:|file:/|https?:|ftps?:|webcal:)"
+#define USER "[" USERCHARS "]+(:["PASSCHARS "]+)?"
+#define URLPATH "/[" PATHCHARS "]*[^]'.}>) \t\r\n,\\\"]"
+
+static regex_t dingus[EMPATHY_REGEX_ALL];
+
+static void
+regex_init (void)
+{
+ static gboolean inited = FALSE;
+ const gchar *expression;
+ gint i;
+
+ if (inited) {
+ return;
+ }
+
+ for (i = 0; i < EMPATHY_REGEX_ALL; i++) {
+ switch (i) {
+ case EMPATHY_REGEX_AS_IS:
+ expression =
+ SCHEME "//(" USER "@)?[" HOSTCHARS ".]+"
+ "(:[0-9]+)?(" URLPATH ")?";
+ break;
+ case EMPATHY_REGEX_BROWSER:
+ expression =
+ "(www|ftp)[" HOSTCHARS "]*\\.[" HOSTCHARS ".]+"
+ "(:[0-9]+)?(" URLPATH ")?";
+ break;
+ case EMPATHY_REGEX_APT:
+ expression =
+ "apt://[" APTCHARS "]*";
+ break;
+ case EMPATHY_REGEX_EMAIL:
+ expression =
+ "(mailto:)?[a-z0-9][a-z0-9.-]*@[a-z0-9]"
+ "[a-z0-9-]*(\\.[a-z0-9][a-z0-9-]*)+";
+ break;
+ case EMPATHY_REGEX_OTHER:
+ expression =
+ "news:[-A-Z\\^_a-z{|}~!\"#$%&'()*+,./0-9;:=?`]+"
+ "@[" HOSTCHARS ".]+(:[0-9]+)?";
+ break;
+ default:
+ /* Silence the compiler. */
+ expression = NULL;
+ continue;
+ }
+
+ memset (&dingus[i], 0, sizeof (regex_t));
+ regcomp (&dingus[i], expression, REG_EXTENDED | REG_ICASE);
+ }
+
+ inited = TRUE;
+}
+
+gint
+empathy_regex_match (EmpathyRegExType type,
+ const gchar *msg,
+ GArray *start,
+ GArray *end)
+{
+ regmatch_t matches[1];
+ gint ret = 0;
+ gint num_matches = 0;
+ gint offset = 0;
+ gint i;
+
+ g_return_val_if_fail (type >= 0 || type <= EMPATHY_REGEX_ALL, 0);
+
+ regex_init ();
+
+ while (!ret && type != EMPATHY_REGEX_ALL) {
+ ret = regexec (&dingus[type], msg + offset, 1, matches, 0);
+ if (ret == 0) {
+ gint s;
+
+ num_matches++;
+
+ s = matches[0].rm_so + offset;
+ offset = matches[0].rm_eo + offset;
+
+ g_array_append_val (start, s);
+ g_array_append_val (end, offset);
+ }
+ }
+
+ if (type != EMPATHY_REGEX_ALL) {
+ DEBUG ("Found %d matches for regex type:%d", num_matches, type);
+ return num_matches;
+ }
+
+ /* If EMPATHY_REGEX_ALL then we run ALL regex's on the string. */
+ for (i = 0; i < EMPATHY_REGEX_ALL; i++, ret = 0) {
+ while (!ret) {
+ ret = regexec (&dingus[i], msg + offset, 1, matches, 0);
+ if (ret == 0) {
+ gint s;
+
+ num_matches++;
+
+ s = matches[0].rm_so + offset;
+ offset = matches[0].rm_eo + offset;
+
+ g_array_append_val (start, s);
+ g_array_append_val (end, offset);
+ }
+ }
+ }
+
+ DEBUG ("Found %d matches for ALL regex types", num_matches);
+
+ return num_matches;
+}
+
+gint
+empathy_strcasecmp (const gchar *s1,
+ const gchar *s2)
+{
+ return empathy_strncasecmp (s1, s2, -1);
+}
+
+gint
+empathy_strncasecmp (const gchar *s1,
+ const gchar *s2,
+ gsize n)
+{
+ gchar *u1, *u2;
+ gint ret_val;
+
+ u1 = g_utf8_casefold (s1, n);
+ u2 = g_utf8_casefold (s2, n);
+
+ ret_val = g_utf8_collate (u1, u2);
+ g_free (u1);
+ g_free (u2);
+
+ return ret_val;
+}
+
+gboolean
+empathy_xml_validate (xmlDoc *doc,
+ const gchar *dtd_filename)
+{
+ gchar *path, *escaped;
+ xmlValidCtxt cvp;
+ xmlDtd *dtd;
+ gboolean ret;
+
+ path = g_build_filename (g_getenv ("EMPATHY_SRCDIR"), "libempathy",
+ dtd_filename, NULL);
+ if (!g_file_test (path, G_FILE_TEST_EXISTS)) {
+ g_free (path);
+ path = g_build_filename (DATADIR, "empathy", dtd_filename, NULL);
+ }
+ DEBUG ("Loading dtd file %s", path);
+
+ /* The list of valid chars is taken from libxml. */
+ escaped = xmlURIEscapeStr (path, ":@&=+$,/?;");
+ g_free (path);
+
+ memset (&cvp, 0, sizeof (cvp));
+ dtd = xmlParseDTD (NULL, escaped);
+ ret = xmlValidateDtd (&cvp, doc, dtd);
+
+ xmlFree (escaped);
+ xmlFreeDtd (dtd);
+
+ return ret;
+}
+
+xmlNodePtr
+empathy_xml_node_get_child (xmlNodePtr node,
+ const gchar *child_name)
+{
+ xmlNodePtr l;
+
+ g_return_val_if_fail (node != NULL, NULL);
+ g_return_val_if_fail (child_name != NULL, NULL);
+
+ for (l = node->children; l; l = l->next) {
+ if (l->name && strcmp (l->name, child_name) == 0) {
+ return l;
+ }
+ }
+
+ return NULL;
+}
+
+xmlChar *
+empathy_xml_node_get_child_content (xmlNodePtr node,
+ const gchar *child_name)
+{
+ xmlNodePtr l;
+
+ g_return_val_if_fail (node != NULL, NULL);
+ g_return_val_if_fail (child_name != NULL, NULL);
+
+ l = empathy_xml_node_get_child (node, child_name);
+ if (l) {
+ return xmlNodeGetContent (l);
+ }
+
+ return NULL;
+}
+
+xmlNodePtr
+empathy_xml_node_find_child_prop_value (xmlNodePtr node,
+ const gchar *prop_name,
+ const gchar *prop_value)
+{
+ xmlNodePtr l;
+ xmlNodePtr found = NULL;
+
+ g_return_val_if_fail (node != NULL, NULL);
+ g_return_val_if_fail (prop_name != NULL, NULL);
+ g_return_val_if_fail (prop_value != NULL, NULL);
+
+ for (l = node->children; l && !found; l = l->next) {
+ xmlChar *prop;
+
+ if (!xmlHasProp (l, prop_name)) {
+ continue;
+ }
+
+ prop = xmlGetProp (l, prop_name);
+ if (prop && strcmp (prop, prop_value) == 0) {
+ found = l;
+ }
+
+ xmlFree (prop);
+ }
+
+ return found;
+}
+
+guint
+empathy_account_hash (gconstpointer key)
+{
+ g_return_val_if_fail (MC_IS_ACCOUNT (key), 0);
+
+ return g_str_hash (mc_account_get_unique_name (MC_ACCOUNT (key)));
+}
+
+gboolean
+empathy_account_equal (gconstpointer a,
+ gconstpointer b)
+{
+ const gchar *name_a;
+ const gchar *name_b;
+
+ g_return_val_if_fail (MC_IS_ACCOUNT (a), FALSE);
+ g_return_val_if_fail (MC_IS_ACCOUNT (b), FALSE);
+
+ name_a = mc_account_get_unique_name (MC_ACCOUNT (a));
+ name_b = mc_account_get_unique_name (MC_ACCOUNT (b));
+
+ return g_str_equal (name_a, name_b);
+}
+
+MissionControl *
+empathy_mission_control_new (void)
+{
+ static MissionControl *mc = NULL;
+
+ if (!mc) {
+ mc = mission_control_new (tp_get_bus ());
+ g_object_add_weak_pointer (G_OBJECT (mc), (gpointer) &mc);
+ } else {
+ g_object_ref (mc);
+ }
+
+ return mc;
+}
+
+void
+empathy_call_with_contact (EmpathyContact *contact)
+{
+ MissionControl *mc;
+ McAccount *account;
+ TpConnection *connection;
+ gchar *object_path;
+ TpChannel *channel;
+ EmpathyContactFactory *factory;
+ EmpathyTpGroup *group;
+ EmpathyContact *self_contact;
+ GError *error = NULL;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ mc = empathy_mission_control_new ();
+ account = empathy_contact_get_account (contact);
+ connection = mission_control_get_tpconnection (mc, account, NULL);
+ tp_connection_run_until_ready (connection, FALSE, NULL, NULL);
+ g_object_unref (mc);
+
+ /* We abuse of suppress_handler, TRUE means OUTGOING. The channel
+ * will be catched in EmpathyFilter */
+ if (!tp_cli_connection_run_request_channel (connection, -1,
+ TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
+ TP_HANDLE_TYPE_NONE,
+ 0,
+ TRUE,
+ &object_path,
+ &error,
+ NULL)) {
+ DEBUG ("Couldn't request channel: %s",
+ error ? error->message : "No error given");
+ g_clear_error (&error);
+ g_object_unref (connection);
+ return;
+ }
+
+ channel = tp_channel_new (connection,
+ object_path, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA,
+ TP_HANDLE_TYPE_NONE, 0, NULL);
+
+ group = empathy_tp_group_new (channel);
+ empathy_run_until_ready (group);
+
+ factory = empathy_contact_factory_new ();
+ self_contact = empathy_contact_factory_get_user (factory, account);
+ empathy_contact_run_until_ready (self_contact,
+ EMPATHY_CONTACT_READY_HANDLE,
+ NULL);
+
+ empathy_tp_group_add_member (group, contact, "");
+ empathy_tp_group_add_member (group, self_contact, "");
+
+ g_object_unref (factory);
+ g_object_unref (self_contact);
+ g_object_unref (group);
+ g_object_unref (connection);
+ g_object_unref (channel);
+ g_free (object_path);
+}
+
+void
+empathy_call_with_contact_id (McAccount *account, const gchar *contact_id)
+{
+ EmpathyContactFactory *factory;
+ EmpathyContact *contact;
+
+ factory = empathy_contact_factory_new ();
+ contact = empathy_contact_factory_get_from_id (factory, account, contact_id);
+ empathy_contact_run_until_ready (contact, EMPATHY_CONTACT_READY_HANDLE, NULL);
+
+ empathy_call_with_contact (contact);
+
+ g_object_unref (contact);
+ g_object_unref (factory);
+}
+
+void
+empathy_chat_with_contact (EmpathyContact *contact)
+{
+ MissionControl *mc;
+ McAccount *account;
+ TpConnection *connection;
+
+ g_return_if_fail (EMPATHY_IS_CONTACT (contact));
+
+ mc = empathy_mission_control_new ();
+ account = empathy_contact_get_account (contact);
+ connection = mission_control_get_tpconnection (mc, account, NULL);
+ tp_connection_run_until_ready (connection, FALSE, NULL, NULL);
+ g_object_unref (mc);
+
+ /* We abuse of suppress_handler, TRUE means OUTGOING. The channel
+ * will be catched in EmpathyFilter */
+ tp_cli_connection_call_request_channel (connection, -1,
+ TP_IFACE_CHANNEL_TYPE_TEXT,
+ TP_HANDLE_TYPE_CONTACT,
+ empathy_contact_get_handle (contact),
+ TRUE,
+ NULL, NULL, NULL, NULL);
+ g_object_unref (connection);
+}
+
+void
+empathy_chat_with_contact_id (McAccount *account, const gchar *contact_id)
+{
+ EmpathyContactFactory *factory;
+ EmpathyContact *contact;
+
+ factory = empathy_contact_factory_new ();
+ contact = empathy_contact_factory_get_from_id (factory, account, contact_id);
+ empathy_contact_run_until_ready (contact, EMPATHY_CONTACT_READY_HANDLE, NULL);
+
+ empathy_chat_with_contact (contact);
+
+ g_object_unref (contact);
+ g_object_unref (factory);
+}
+
+const gchar *
+empathy_presence_get_default_message (McPresence presence)
+{
+ switch (presence) {
+ case MC_PRESENCE_AVAILABLE:
+ return _("Available");
+ case MC_PRESENCE_DO_NOT_DISTURB:
+ return _("Busy");
+ case MC_PRESENCE_AWAY:
+ case MC_PRESENCE_EXTENDED_AWAY:
+ return _("Away");
+ case MC_PRESENCE_HIDDEN:
+ return _("Hidden");
+ case MC_PRESENCE_OFFLINE:
+ case MC_PRESENCE_UNSET:
+ return _("Offline");
+ default:
+ g_assert_not_reached ();
+ }
+
+ return NULL;
+}
+
+const gchar *
+empathy_presence_to_str (McPresence presence)
+{
+ switch (presence) {
+ case MC_PRESENCE_AVAILABLE:
+ return "available";
+ case MC_PRESENCE_DO_NOT_DISTURB:
+ return "busy";
+ case MC_PRESENCE_AWAY:
+ return "away";
+ case MC_PRESENCE_EXTENDED_AWAY:
+ return "ext_away";
+ case MC_PRESENCE_HIDDEN:
+ return "hidden";
+ case MC_PRESENCE_OFFLINE:
+ return "offline";
+ case MC_PRESENCE_UNSET:
+ return "unset";
+ default:
+ g_assert_not_reached ();
+ }
+
+ return NULL;
+}
+
+McPresence
+empathy_presence_from_str (const gchar *str)
+{
+ if (strcmp (str, "available") == 0) {
+ return MC_PRESENCE_AVAILABLE;
+ } else if ((strcmp (str, "dnd") == 0) || (strcmp (str, "busy") == 0)) {
+ return MC_PRESENCE_DO_NOT_DISTURB;
+ } else if ((strcmp (str, "away") == 0) || (strcmp (str, "brb") == 0)) {
+ return MC_PRESENCE_AWAY;
+ } else if ((strcmp (str, "xa") == 0) || (strcmp (str, "ext_away") == 0)) {
+ return MC_PRESENCE_EXTENDED_AWAY;
+ } else if (strcmp (str, "hidden") == 0) {
+ return MC_PRESENCE_HIDDEN;
+ } else if (strcmp (str, "offline") == 0) {
+ return MC_PRESENCE_OFFLINE;
+ } else if (strcmp (str, "unset") == 0) {
+ return MC_PRESENCE_UNSET;
+ }
+
+ return MC_PRESENCE_AVAILABLE;
+}
+
+gchar *
+empathy_file_lookup (const gchar *filename, const gchar *subdir)
+{
+ gchar *path;
+
+ if (!subdir) {
+ subdir = ".";
+ }
+
+ path = g_build_filename (g_getenv ("EMPATHY_SRCDIR"), subdir, filename, NULL);
+ if (!g_file_test (path, G_FILE_TEST_EXISTS)) {
+ g_free (path);
+ path = g_build_filename (DATADIR, "empathy", filename, NULL);
+ }
+
+ return path;
+}
+
+typedef struct {
+ EmpathyRunUntilReadyFunc func;
+ gpointer user_data;
+ GObject *object;
+ GMainLoop *loop;
+} RunUntilReadyData;
+
+static void
+run_until_ready_cb (RunUntilReadyData *data)
+{
+ if (!data->func || data->func (data->object, data->user_data)) {
+ DEBUG ("Object %p is ready", data->object);
+ g_main_loop_quit (data->loop);
+ }
+}
+
+static gboolean
+object_is_ready (GObject *object,
+ gpointer user_data)
+{
+ gboolean ready;
+
+ g_object_get (object, "ready", &ready, NULL);
+
+ return ready;
+}
+
+void
+empathy_run_until_ready_full (gpointer object,
+ const gchar *signal,
+ EmpathyRunUntilReadyFunc func,
+ gpointer user_data,
+ GMainLoop **loop)
+{
+ RunUntilReadyData data;
+ gulong signal_id;
+
+ g_return_if_fail (G_IS_OBJECT (object));
+ g_return_if_fail (signal != NULL);
+
+ if (func && func (object, user_data)) {
+ return;
+ }
+
+ DEBUG ("Starting run until ready for object %p", object);
+
+ data.func = func;
+ data.user_data = user_data;
+ data.object = object;
+ data.loop = g_main_loop_new (NULL, FALSE);
+
+ signal_id = g_signal_connect_swapped (object, signal,
+ G_CALLBACK (run_until_ready_cb),
+ &data);
+ if (loop != NULL) {
+ *loop = data.loop;
+ }
+
+ g_main_loop_run (data.loop);
+
+ if (loop != NULL) {
+ *loop = NULL;
+ }
+
+ g_signal_handler_disconnect (object, signal_id);
+ g_main_loop_unref (data.loop);
+}
+
+void
+empathy_run_until_ready (gpointer object)
+{
+ empathy_run_until_ready_full (object, "notify::ready", object_is_ready,
+ NULL, NULL);
+}
+
+McAccount *
+empathy_channel_get_account (TpChannel *channel)
+{
+ TpConnection *connection;
+ McAccount *account;
+ MissionControl *mc;
+
+ g_object_get (channel, "connection", &connection, NULL);
+ mc = empathy_mission_control_new ();
+ account = mission_control_get_account_for_tpconnection (mc, connection, NULL);
+ g_object_unref (connection);
+ g_object_unref (mc);
+
+ return account;
+}
+
+typedef void (*AccountStatusChangedFunc) (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ gpointer user_data);
+
+typedef struct {
+ AccountStatusChangedFunc handler;
+ gpointer user_data;
+ GClosureNotify free_func;
+ MissionControl *mc;
+} AccountStatusChangedData;
+
+typedef struct {
+ TpConnectionStatus status;
+ McPresence presence;
+ TpConnectionStatusReason reason;
+ gchar *unique_name;
+ AccountStatusChangedData *data;
+} InvocationData;
+
+static void
+account_status_changed_data_free (gpointer ptr,
+ GClosure *closure)
+{
+ AccountStatusChangedData *data = ptr;
+
+ if (data->free_func) {
+ data->free_func (data->user_data, closure);
+ }
+ g_object_unref (data->mc);
+ g_slice_free (AccountStatusChangedData, data);
+}
+
+static gboolean
+account_status_changed_invoke_callback (gpointer data)
+{
+ InvocationData *invocation_data = data;
+
+ invocation_data->data->handler (invocation_data->data->mc,
+ invocation_data->status,
+ invocation_data->presence,
+ invocation_data->reason,
+ invocation_data->unique_name,
+ invocation_data->data->user_data);
+
+ g_free (invocation_data->unique_name);
+ g_slice_free (InvocationData, invocation_data);
+
+ return FALSE;
+}
+
+static void
+account_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ AccountStatusChangedData *data)
+{
+ InvocationData *invocation_data;
+
+ invocation_data = g_slice_new (InvocationData);
+ invocation_data->status = status;
+ invocation_data->presence = presence;
+ invocation_data->reason = reason;
+ invocation_data->unique_name = g_strdup (unique_name);
+ invocation_data->data = data;
+
+ g_idle_add_full (G_PRIORITY_HIGH,
+ account_status_changed_invoke_callback,
+ invocation_data, NULL);
+}
+
+gpointer
+empathy_connect_to_account_status_changed (MissionControl *mc,
+ GCallback handler,
+ gpointer user_data,
+ GClosureNotify free_func)
+{
+ AccountStatusChangedData *data;
+
+ g_return_val_if_fail (IS_MISSIONCONTROL (mc), NULL);
+ g_return_val_if_fail (handler != NULL, NULL);
+
+ data = g_slice_new (AccountStatusChangedData);
+ data->handler = (AccountStatusChangedFunc) handler;
+ data->user_data = user_data;
+ data->free_func = free_func;
+ data->mc = g_object_ref (mc);
+
+ dbus_g_proxy_connect_signal (DBUS_G_PROXY (mc), "AccountStatusChanged",
+ G_CALLBACK (account_status_changed_cb),
+ data, account_status_changed_data_free);
+
+ return data;
+}
+
+void
+empathy_disconnect_account_status_changed (gpointer token)
+{
+ AccountStatusChangedData *data = token;
+
+ dbus_g_proxy_disconnect_signal (DBUS_G_PROXY (data->mc),
+ "AccountStatusChanged",
+ G_CALLBACK (account_status_changed_cb),
+ data);
+}
+
diff --git a/trunk/libempathy/empathy-utils.h b/trunk/libempathy/empathy-utils.h
new file mode 100644
index 000000000..800f09d05
--- /dev/null
+++ b/trunk/libempathy/empathy-utils.h
@@ -0,0 +1,115 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_UTILS_H__
+#define __EMPATHY_UTILS_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mission-control.h>
+
+#include "empathy-contact.h"
+
+G_BEGIN_DECLS
+
+#define EMPATHY_GET_PRIV(obj,type) ((type##Priv*) ((type*)obj)->priv)
+#define G_STR_EMPTY(x) ((x) == NULL || (x)[0] == '\0')
+
+typedef enum {
+ EMPATHY_REGEX_AS_IS,
+ EMPATHY_REGEX_BROWSER,
+ EMPATHY_REGEX_APT,
+ EMPATHY_REGEX_EMAIL,
+ EMPATHY_REGEX_OTHER,
+ EMPATHY_REGEX_ALL,
+} EmpathyRegExType;
+
+/* Regular expressions */
+gchar * empathy_substring (const gchar *str,
+ gint start,
+ gint end);
+gint empathy_regex_match (EmpathyRegExType type,
+ const gchar *msg,
+ GArray *start,
+ GArray *end);
+
+/* Strings */
+gint empathy_strcasecmp (const gchar *s1,
+ const gchar *s2);
+gint empathy_strncasecmp (const gchar *s1,
+ const gchar *s2,
+ gsize n);
+
+/* XML */
+gboolean empathy_xml_validate (xmlDoc *doc,
+ const gchar *dtd_filename);
+xmlNodePtr empathy_xml_node_get_child (xmlNodePtr node,
+ const gchar *child_name);
+xmlChar * empathy_xml_node_get_child_content (xmlNodePtr node,
+ const gchar *child_name);
+xmlNodePtr empathy_xml_node_find_child_prop_value (xmlNodePtr node,
+ const gchar *prop_name,
+ const gchar *prop_value);
+
+/* Others */
+guint empathy_account_hash (gconstpointer key);
+gboolean empathy_account_equal (gconstpointer a,
+ gconstpointer b);
+MissionControl *empathy_mission_control_new (void);
+void empathy_call_with_contact (EmpathyContact *contact);
+void empathy_call_with_contact_id (McAccount *account,
+ const gchar *contact_id);
+void empathy_chat_with_contact (EmpathyContact *contact);
+void empathy_chat_with_contact_id (McAccount *account,
+ const gchar *contact_id);
+const gchar * empathy_presence_get_default_message (McPresence presence);
+const gchar * empathy_presence_to_str (McPresence presence);
+McPresence empathy_presence_from_str (const gchar *str);
+gchar * empathy_file_lookup (const gchar *filename,
+ const gchar *subdir);
+
+typedef gboolean (*EmpathyRunUntilReadyFunc) (GObject *object,
+ gpointer user_data);
+void empathy_run_until_ready (gpointer object);
+void empathy_run_until_ready_full (gpointer object,
+ const gchar *signal,
+ EmpathyRunUntilReadyFunc func,
+ gpointer user_data,
+ GMainLoop **loop);
+McAccount * empathy_channel_get_account (TpChannel *channel);
+gpointer empathy_connect_to_account_status_changed (MissionControl *mc,
+ GCallback handler,
+ gpointer user_data,
+ GClosureNotify free_func);
+void empathy_disconnect_account_status_changed (gpointer token);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_UTILS_H__ */
diff --git a/trunk/libempathy/irc-networks.xml b/trunk/libempathy/irc-networks.xml
new file mode 100644
index 000000000..383ba25ff
--- /dev/null
+++ b/trunk/libempathy/irc-networks.xml
@@ -0,0 +1,543 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<networks>
+ <network name="Debian Servers" id="debian_servers">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.debian.org"/>
+ <server ssl="FALSE" port="6667" address="irc.oftc.net"/>
+ </servers>
+ </network>
+ <network name="Ubuntu Servers" id="ubuntu_servers">
+ <servers>
+ <server ssl="FALSE" port="8001" address="irc.ubuntu.com"/>
+ </servers>
+ </network>
+ <network name="2600net" id="a2600net">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.2600.net"/>
+ </servers>
+ </network>
+ <network name="AccessIRC" id="accessirc">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.accessirc.net"/>
+ <server ssl="FALSE" port="6667" address="eu.accessirc.net"/>
+ </servers>
+ </network>
+ <network name="AfterNET" id="afternet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.afternet.org"/>
+ <server ssl="FALSE" port="6667" address="us.afternet.org"/>
+ <server ssl="FALSE" port="6667" address="eu.afternet.org"/>
+ </servers>
+ </network>
+ <network name="Aitvaras" id="aitvaras">
+ <servers>
+ <server ssl="TRUE" port="6668" address="irc.data.lt"/>
+ <server ssl="TRUE" port="6668" address="irc-ssl.omnitel.net"/>
+ <server ssl="TRUE" port="9999" address="irc-ssl.le.lt"/>
+ <server ssl="FALSE" port="6667" address="irc.data.lt"/>
+ <server ssl="FALSE" port="6667" address="irc.omnitel.net"/>
+ <server ssl="FALSE" port="6667" address="irc.ktu.lt"/>
+ <server ssl="FALSE" port="6667" address="irc.le.lt"/>
+ <server ssl="FALSE" port="6667" address="irc.takas.lt"/>
+ <server ssl="FALSE" port="6667" address="irc.5ci.net"/>
+ <server ssl="FALSE" port="6667" address="irc.kis.lt"/>
+ </servers>
+ </network>
+ <network name="AmigaNet" id="amiganet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.amiganet.org"/>
+ <server ssl="FALSE" port="6667" address="us.amiganet.org"/>
+ <server ssl="FALSE" port="6667" address="uk.amiganet.org"/>
+ </servers>
+ </network>
+ <network name="ARCNet" id="arcnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="se1.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="us1.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="us2.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="us3.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="ca1.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="de1.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="de3.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="ch1.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="be1.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="nl3.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="uk1.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="uk2.arcnet.vapor.com"/>
+ <server ssl="FALSE" port="6667" address="fr1.arcnet.vapor.com"/>
+ </servers>
+ </network>
+ <network name="AstroLink" id="astrolink">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.astrolink.org"/>
+ </servers>
+ </network>
+ <network name="AustNet" id="austnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="au.austnet.org"/>
+ <server ssl="FALSE" port="6667" address="us.austnet.org"/>
+ <server ssl="FALSE" port="6667" address="ca.austnet.org"/>
+ </servers>
+ </network>
+ <network name="AzzurraNet" id="azzurranet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.azzurra.org"/>
+ <server ssl="FALSE" port="6667" address="crypto.azzurra.org"/>
+ </servers>
+ </network>
+ <network name="Beirut" id="beirut">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.beirut.com"/>
+ </servers>
+ </network>
+ <network name="ChatJunkies" id="chatjunkies">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.chatjunkies.org"/>
+ <server ssl="FALSE" port="6667" address="nl.chatjunkies.org"/>
+ </servers>
+ </network>
+ <network name="ChatNet" id="chatnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="US.ChatNet.Org"/>
+ <server ssl="FALSE" port="6667" address="EU.ChatNet.Org"/>
+ </servers>
+ </network>
+ <network name="ChatSociety" id="chatsociety">
+ <servers>
+ <server ssl="FALSE" port="6667" address="us.chatsociety.net"/>
+ <server ssl="FALSE" port="6667" address="eu.chatsociety.net"/>
+ </servers>
+ </network>
+ <network name="ChatSpike" id="chatspike">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.chatspike.net"/>
+ </servers>
+ </network>
+ <network name="ChillFactory" id="chillfactory">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.chillfactory.net"/>
+ </servers>
+ </network>
+ <network name="CoolChat" id="coolchat">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.coolchat.net"/>
+ </servers>
+ </network>
+ <network name="Criten" id="criten">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.criten.net"/>
+ <server ssl="FALSE" port="6667" address="irc.eu.criten.net"/>
+ </servers>
+ </network>
+ <network name="DALnet" id="dalnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.dal.net"/>
+ <server ssl="FALSE" port="6667" address="irc.eu.dal.net"/>
+ </servers>
+ </network>
+ <network name="Dark-Tou-Net" id="dark-tou-net">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.d-t-net.de"/>
+ <server ssl="FALSE" port="6667" address="bw.d-t-net.de"/>
+ <server ssl="FALSE" port="6667" address="nc.d-t-net.de"/>
+ <server ssl="FALSE" port="6667" address="wakka.d-t-net.de"/>
+ </servers>
+ </network>
+ <network name="DarkMyst" id="darkmyst">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.darkmyst.org"/>
+ </servers>
+ </network>
+ <network name="DeepIRC" id="deepirc">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.deepirc.net"/>
+ </servers>
+ </network>
+ <network name="DeltaAnime" id="deltaanime">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.deltaanime.net"/>
+ </servers>
+ </network>
+ <network name="EFnet" id="efnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.blackened.com"/>
+ <server ssl="FALSE" port="6667" address="irc.Prison.NET"/>
+ <server ssl="FALSE" port="6667" address="irc.Qeast.net"/>
+ <server ssl="FALSE" port="6667" address="irc.efnet.pl"/>
+ <server ssl="FALSE" port="6667" address="efnet.demon.co.uk"/>
+ <server ssl="FALSE" port="6667" address="irc.lightning.net"/>
+ <server ssl="FALSE" port="6667" address="irc.mindspring.com"/>
+ <server ssl="FALSE" port="6667" address="irc.easynews.com"/>
+ <server ssl="FALSE" port="6667" address="irc.servercentral.net"/>
+ </servers>
+ </network>
+ <network name="EnterTheGame" id="enterthegame">
+ <servers>
+ <server ssl="FALSE" port="6667" address="IRC.EnterTheGame.Com"/>
+ </servers>
+ </network>
+ <network name="EUIrc" id="euirc">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.euirc.net"/>
+ <server ssl="FALSE" port="6667" address="irc.ham.de.euirc.net"/>
+ <server ssl="FALSE" port="6667" address="irc.ber.de.euirc.net"/>
+ <server ssl="FALSE" port="6667" address="irc.ffm.de.euirc.net"/>
+ <server ssl="FALSE" port="6667" address="irc.bre.de.euirc.net"/>
+ <server ssl="FALSE" port="6667" address="irc.hes.de.euirc.net"/>
+ <server ssl="FALSE" port="6667" address="irc.vie.at.euirc.net"/>
+ <server ssl="FALSE" port="6667" address="irc.inn.at.euirc.net"/>
+ <server ssl="FALSE" port="6667" address="irc.bas.ch.euirc.net"/>
+ </servers>
+ </network>
+ <network name="EuropNet" id="europnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.europnet.org"/>
+ </servers>
+ </network>
+ <network name="EU-IRC" id="eu-irc">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.eu-irc.net"/>
+ </servers>
+ </network>
+ <network name="FDFNet" id="fdfnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.fdfnet.net"/>
+ <server ssl="FALSE" port="6667" address="irc.eu.fdfnet.net"/>
+ </servers>
+ </network>
+ <network name="FEFNet" id="fefnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.fef.net"/>
+ <server ssl="FALSE" port="6667" address="irc.ggn.net"/>
+ <server ssl="FALSE" port="6667" address="irc.vendetta.com"/>
+ </servers>
+ </network>
+ <network name="FreeNode" id="freenode">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.freenode.net"/>
+ </servers>
+ </network>
+ <network name="GalaxyNet" id="galaxynet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.galaxynet.org"/>
+ </servers>
+ </network>
+ <network name="GamesNET" id="gamesnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.gamesnet.net"/>
+ <server ssl="FALSE" port="6667" address="irc.ca.gamesnet.net"/>
+ <server ssl="FALSE" port="6667" address="irc.eu.gamesnet.net"/>
+ </servers>
+ </network>
+ <network name="German-Elite" id="german-elite">
+ <servers>
+ <server ssl="FALSE" port="6667" address="dominion.german-elite.net"/>
+ <server ssl="FALSE" port="6667" address="komatu.german-elite.net"/>
+ </servers>
+ </network>
+ <network name="GimpNet" id="gimpnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.gimp.org"/>
+ <server ssl="FALSE" port="6667" address="irc.us.gimp.org"/>
+ </servers>
+ </network>
+ <network name="HabberNet" id="habbernet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.habber.net"/>
+ </servers>
+ </network>
+ <network name="Hashmark" id="hashmark">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.hashmark.net"/>
+ </servers>
+ </network>
+ <network name="IdleMonkeys" id="idlemonkeys">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.idlemonkeys.net"/>
+ </servers>
+ </network>
+ <network name="insiderZ.DE" id="insiderz.de">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.insiderz.de"/>
+ <server ssl="FALSE" port="6666" address="irc.insiderz.de"/>
+ </servers>
+ </network>
+ <network name="IrcLink" id="irclink">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.irclink.net"/>
+ <server ssl="FALSE" port="6667" address="Alesund.no.eu.irclink.net"/>
+ <server ssl="FALSE" port="6667" address="Oslo.no.eu.irclink.net"/>
+ <server ssl="FALSE" port="6667" address="frogn.no.eu.irclink.net"/>
+ <server ssl="FALSE" port="6667" address="tonsberg.no.eu.irclink.net"/>
+ </servers>
+ </network>
+ <network name="IRCNet" id="ircnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.ircnet.com"/>
+ <server ssl="FALSE" port="6668" address="irc.stealth.net"/>
+ <server ssl="FALSE" port="6667" address="ircnet.demon.co.uk"/>
+ <server ssl="FALSE" port="6667" address="irc.datacomm.ch"/>
+ <server ssl="FALSE" port="6667" address="random.ircd.de"/>
+ <server ssl="FALSE" port="6667" address="ircnet.netvision.net.il"/>
+ <server ssl="FALSE" port="6667" address="irc.cs.hut.fi"/>
+ </servers>
+ </network>
+ <network name="Irctoo.net" id="irctoo.net">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.irctoo.net"/>
+ </servers>
+ </network>
+ <network name="Krstarica" id="krstarica">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.krstarica.com"/>
+ </servers>
+ </network>
+ <network name="Librenet" id="librenet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.librenet.net"/>
+ <server ssl="FALSE" port="6667" address="ielf.fr.librenet.net"/>
+ </servers>
+ </network>
+ <network name="LinkNet" id="linknet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.link-net.org"/>
+ <server ssl="FALSE" port="6667" address="irc.no.link-net.org"/>
+ <server ssl="FALSE" port="6667" address="irc.bahnhof.se"/>
+ </servers>
+ </network>
+ <network name="MagicStar" id="magicstar">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.magicstar.net"/>
+ </servers>
+ </network>
+ <network name="Majistic" id="majistic">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.majistic.net"/>
+ </servers>
+ </network>
+ <network name="MindForge" id="mindforge">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.mindforge.org"/>
+ </servers>
+ </network>
+ <network name="MIXXnet" id="mixxnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.mixxnet.net"/>
+ </servers>
+ </network>
+ <network name="NeverNET" id="nevernet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.nevernet.net"/>
+ <server ssl="FALSE" port="6667" address="imagine.nevernet.net"/>
+ <server ssl="FALSE" port="6667" address="dimension.nevernet.net"/>
+ <server ssl="FALSE" port="6667" address="universe.nevernet.net"/>
+ <server ssl="FALSE" port="6667" address="wayland.nevernet.net"/>
+ <server ssl="FALSE" port="6667" address="forte.nevernet.net"/>
+ </servers>
+ </network>
+ <network name="NixHelpNet" id="nixhelpnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.nixhelp.org"/>
+ <server ssl="FALSE" port="6667" address="us.nixhelp.org"/>
+ <server ssl="FALSE" port="6667" address="uk.nixhelp.org"/>
+ <server ssl="FALSE" port="6667" address="uk2.nixhelp.org"/>
+ <server ssl="FALSE" port="6667" address="uk3.nixhelp.org"/>
+ <server ssl="FALSE" port="6667" address="nl.nixhelp.org"/>
+ <server ssl="FALSE" port="6667" address="ca.ld.nixhelp.org"/>
+ <server ssl="FALSE" port="6667" address="us.co.nixhelp.org"/>
+ <server ssl="FALSE" port="6667" address="us.ca.nixhelp.org"/>
+ <server ssl="FALSE" port="6667" address="us.pa.nixhelp.org"/>
+ </servers>
+ </network>
+ <network name="NullusNet" id="nullusnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.nullus.net"/>
+ </servers>
+ </network>
+ <network name="Oceanius" id="oceanius">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.oceanius.com"/>
+ </servers>
+ </network>
+ <network name="OFTC" id="oftc">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.oftc.net"/>
+ </servers>
+ </network>
+ <network name="OtherNet" id="othernet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.othernet.org"/>
+ </servers>
+ </network>
+ <network name="Oz.org" id="oz.org">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.oz.org"/>
+ <server ssl="FALSE" port="6667" address="germany.oz.org"/>
+ <server ssl="FALSE" port="6667" address="sandiego.oz.org"/>
+ <server ssl="FALSE" port="6667" address="us.oz.org"/>
+ <server ssl="FALSE" port="6667" address="au.oz.org"/>
+ <server ssl="FALSE" port="6667" address="rockhampton.oz.org"/>
+ <server ssl="FALSE" port="6667" address="wollongong.oz.org"/>
+ <server ssl="FALSE" port="6667" address="waix.oz.org"/>
+ </servers>
+ </network>
+ <network name="PTlink" id="ptlink">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.PTlink.net"/>
+ <server ssl="FALSE" port="6667" address="aaia.PTlink.net"/>
+ </servers>
+ </network>
+ <network name="PTNe" id="ptne">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.PTNet.org"/>
+ <server ssl="FALSE" port="6667" address="rccn.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="uevora.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="umoderna.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="ist.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="aaum.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="uc.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="ualg.ptnet.org"/>
+ <server ssl="FALSE" port="6667" address="madinfo.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="ua.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="ipg.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="isec.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="utad.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="iscte.PTnet.org"/>
+ <server ssl="FALSE" port="6667" address="ubi.PTnet.org"/>
+ </servers>
+ </network>
+ <network name="QuakeNet" id="quakenet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.quakenet.org"/>
+ <server ssl="FALSE" port="6667" address="irc.se.quakenet.org"/>
+ <server ssl="FALSE" port="6667" address="irc.dk.quakenet.org"/>
+ <server ssl="FALSE" port="6667" address="irc.no.quakenet.org"/>
+ <server ssl="FALSE" port="6667" address="irc.fi.quakenet.org"/>
+ <server ssl="FALSE" port="6667" address="irc.be.quakenet.org"/>
+ <server ssl="FALSE" port="6667" address="irc.uk.quakenet.org"/>
+ <server ssl="FALSE" port="6667" address="irc.de.quakenet.org"/>
+ <server ssl="FALSE" port="6667" address="irc.it.quakenet.org"/>
+ </servers>
+ </network>
+ <network name="RebelChat" id="rebelchat">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.rebelchat.org"/>
+ </servers>
+ </network>
+ <network name="RizeNET" id="rizenet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.rizenet.org"/>
+ <server ssl="FALSE" port="6667" address="omega.rizenet.org"/>
+ <server ssl="FALSE" port="6667" address="evelance.rizenet.org"/>
+ <server ssl="FALSE" port="6667" address="lisa.rizenet.org"/>
+ <server ssl="FALSE" port="6667" address="scott.rizenet.org"/>
+ </servers>
+ </network>
+ <network name="RusNet" id="rusnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.tomsk.net"/>
+ <server ssl="FALSE" port="6667" address="irc.rinet.ru"/>
+ <server ssl="FALSE" port="6667" address="irc.run.net"/>
+ <server ssl="FALSE" port="6667" address="irc.ru"/>
+ <server ssl="FALSE" port="6667" address="irc.lucky.net"/>
+ </servers>
+ </network>
+ <network name="SceneNet" id="scenenet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.scene.org"/>
+ <server ssl="FALSE" port="6667" address="irc.eu.scene.org"/>
+ <server ssl="FALSE" port="6667" address="irc.us.scene.org"/>
+ </servers>
+ </network>
+ <network name="SlashNET" id="slashnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.slashnet.org"/>
+ <server ssl="FALSE" port="6667" address="area51.slashnet.org"/>
+ <server ssl="FALSE" port="6667" address="moo.slashnet.org"/>
+ <server ssl="FALSE" port="6667" address="radon.slashnet.org"/>
+ </servers>
+ </network>
+ <network name="Sohbet.Net" id="sohbet.net">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.sohbet.net"/>
+ </servers>
+ </network>
+ <network name="SolidIRC" id="solidirc">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.solidirc.com"/>
+ </servers>
+ </network>
+ <network name="SorceryNet" id="sorcerynet">
+ <servers>
+ <server ssl="FALSE" port="9000" address="irc.sorcery.net"/>
+ <server ssl="FALSE" port="9000" address="irc.us.sorcery.net"/>
+ <server ssl="FALSE" port="9000" address="irc.eu.sorcery.net"/>
+ </servers>
+ </network>
+ <network name="Spidernet" id="spidernet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="us.spidernet.org"/>
+ <server ssl="FALSE" port="6667" address="eu.spidernet.org"/>
+ <server ssl="FALSE" port="6667" address="irc.spidernet.org"/>
+ </servers>
+ </network>
+ <network name="StarChat" id="starchat">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.starchat.net"/>
+ <server ssl="FALSE" port="6667" address="gainesville.starchat.net"/>
+ <server ssl="FALSE" port="6667" address="freebsd.starchat.net"/>
+ <server ssl="FALSE" port="6667" address="sunset.starchat.net"/>
+ <server ssl="FALSE" port="6667" address="revenge.starchat.net"/>
+ <server ssl="FALSE" port="6667" address="tahoma.starchat.net"/>
+ <server ssl="FALSE" port="6667" address="neo.starchat.net"/>
+ </servers>
+ </network>
+ <network name="TNI3" id="tni3">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.tni3.com"/>
+ </servers>
+ </network>
+ <network name="UnderNet" id="undernet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="us.undernet.org"/>
+ <server ssl="FALSE" port="6667" address="eu.undernet.org"/>
+ </servers>
+ </network>
+ <network name="UniBG" id="unibg">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.lirex.com"/>
+ <server ssl="FALSE" port="6667" address="irc.naturella.com"/>
+ <server ssl="FALSE" port="6667" address="irc.spnet.net"/>
+ <server ssl="FALSE" port="6667" address="irc.techno-link.com"/>
+ <server ssl="FALSE" port="6667" address="irc.telecoms.bg"/>
+ <server ssl="FALSE" port="6667" address="irc.tu-varna.edu"/>
+ </servers>
+ </network>
+ <network name="Whiffle" id="whiffle">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.whiffle.org"/>
+ </servers>
+ </network>
+ <network name="Worldnet" id="worldnet">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.worldnet.net"/>
+ <server ssl="FALSE" port="6667" address="irc.fr.worldnet.net"/>
+ </servers>
+ </network>
+ <network name="Xentonix.net" id="xentonix.net">
+ <servers>
+ <server ssl="FALSE" port="6667" address="irc.ffm.de.eu.xentonix.net"/>
+ <server ssl="FALSE" port="6667" address="irc.kar.de.eu.xentonix.net"/>
+ <server ssl="FALSE" port="6667" address="irc.vie.at.eu.xentonix.net"/>
+ </servers>
+ </network>
+ <network name="XWorld" id="xworld">
+ <servers>
+ <server ssl="FALSE" port="6667" address="Buffalo.NY.US.XWorld.org"/>
+ <server ssl="FALSE" port="6667" address="Minneapolis.MN.US.Xworld.Org"/>
+ <server ssl="FALSE" port="6667" address="Rochester.NY.US.XWorld.org"/>
+ <server ssl="FALSE" port="6667" address="Bayern.DE.EU.XWorld.Org"/>
+ <server ssl="FALSE" port="6667" address="Chicago.IL.US.XWorld.Org"/>
+ </servers>
+ </network>
+</networks>
diff --git a/trunk/libempathy/libempathy.pc.in b/trunk/libempathy/libempathy.pc.in
new file mode 100644
index 000000000..e567fefce
--- /dev/null
+++ b/trunk/libempathy/libempathy.pc.in
@@ -0,0 +1,11 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: libempathy
+Description: Empathy base library
+Requires: glib-2.0, gobject-2.0, libxml-2.0, libtelepathy, libmissioncontrol
+Version: @VERSION@
+Libs: -L${libdir} -lempathy
+Cflags: -I${includedir}
diff --git a/trunk/m4/.gitignore b/trunk/m4/.gitignore
new file mode 100644
index 000000000..7f3cf1220
--- /dev/null
+++ b/trunk/m4/.gitignore
@@ -0,0 +1,3 @@
+gtk-doc.m4
+intltool.m4
+gnome-doc-utils.m4
diff --git a/trunk/m4/acinclude.m4 b/trunk/m4/acinclude.m4
new file mode 100644
index 000000000..3120d8620
--- /dev/null
+++ b/trunk/m4/acinclude.m4
@@ -0,0 +1,65 @@
+dnl Turn on the additional warnings last, so -Werror doesn't affect other tests.
+
+AC_DEFUN([IDT_COMPILE_WARNINGS],[
+ if test -f $srcdir/autogen.sh; then
+ default_compile_warnings="error"
+ else
+ default_compile_warnings="no"
+ fi
+
+ AC_ARG_WITH(compile-warnings,
+ AS_HELP_STRING([--with-compile-warnings=@<:@no/yes/error@:>@],
+ [Compiler warnings]),
+ [enable_compile_warnings="$withval"],
+ [enable_compile_warnings="$default_compile_warnings"])
+
+ warnCFLAGS=
+ if test "x$GCC" != xyes; then
+ enable_compile_warnings=no
+ fi
+
+ warning_flags=
+ realsave_CFLAGS="$CFLAGS"
+
+ case "$enable_compile_warnings" in
+ no)
+ warning_flags=
+ ;;
+ yes)
+ warning_flags="-Wall -Wunused -Wmissing-prototypes -Wmissing-declarations"
+ ;;
+ maximum|error)
+ warning_flags="-Wall -Wunused -Wchar-subscripts -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wpointer-arith"
+ CFLAGS="$warning_flags $CFLAGS"
+ for option in -Wno-sign-compare -Wno-pointer-sign; do
+ SAVE_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $option"
+ AC_MSG_CHECKING([whether gcc understands $option])
+ AC_TRY_COMPILE([], [],
+ has_option=yes,
+ has_option=no,)
+ CFLAGS="$SAVE_CFLAGS"
+ AC_MSG_RESULT($has_option)
+ if test $has_option = yes; then
+ warning_flags="$warning_flags $option"
+ fi
+ unset has_option
+ unset SAVE_CFLAGS
+ done
+ unset option
+ if test "$enable_compile_warnings" = "error" ; then
+ warning_flags="$warning_flags -Werror"
+ fi
+ ;;
+ *)
+ AC_MSG_ERROR(Unknown argument '$enable_compile_warnings' to --enable-compile-warnings)
+ ;;
+ esac
+ CFLAGS="$realsave_CFLAGS"
+ AC_MSG_CHECKING(what warning flags to pass to the C compiler)
+ AC_MSG_RESULT($warning_flags)
+
+ WARN_CFLAGS="$warning_flags"
+ AC_SUBST(WARN_CFLAGS)
+])
+
diff --git a/trunk/m4/empathy-args.m4 b/trunk/m4/empathy-args.m4
new file mode 100644
index 000000000..3daacbaba
--- /dev/null
+++ b/trunk/m4/empathy-args.m4
@@ -0,0 +1,19 @@
+dnl configure-time options for Empathy
+
+dnl EMPATHY_ARG_VALGRIND
+
+AC_DEFUN([EMPATHY_ARG_VALGRIND],
+[
+ dnl valgrind inclusion
+ AC_ARG_ENABLE(valgrind,
+ AC_HELP_STRING([--enable-valgrind],[enable valgrind checking and run-time detection]),
+ [
+ case "${enableval}" in
+ yes|no) enable="${enableval}" ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --enable-valgrind) ;;
+ esac
+ ],
+ [enable=no])
+
+ EMPATHY_VALGRIND($enable, [2.1])
+])
diff --git a/trunk/m4/empathy-valgrind.m4 b/trunk/m4/empathy-valgrind.m4
new file mode 100644
index 000000000..7a44e103f
--- /dev/null
+++ b/trunk/m4/empathy-valgrind.m4
@@ -0,0 +1,31 @@
+dnl Detect Valgrind location and flags
+
+AC_DEFUN([EMPATHY_VALGRIND],
+[
+ enable=$1
+ if test -n "$2"; then
+ valgrind_req=$2
+ else
+ valgrind_req="2.1"
+ fi
+
+ PKG_CHECK_MODULES(VALGRIND, valgrind > "$valgrind_req",
+ have_valgrind_runtime="yes", have_valgrind_runtime="no")
+
+ AC_PATH_PROG(VALGRIND_PATH, valgrind)
+
+ # Compile the instrumentation for valgrind only if the valgrind
+ # libraries are installed and the valgrind executable is found
+ if test "x$enable" = xyes &&
+ test "$have_valgrind_runtime" = yes &&
+ test -n "$VALGRIND_PATH" ;
+ then
+ AC_DEFINE(HAVE_VALGRIND, 1, [Define if valgrind should be used])
+ AC_MSG_NOTICE(using compile-time instrumentation for valgrind)
+ fi
+
+ AC_SUBST(VALGRIND_CFLAGS)
+ AC_SUBST(VALGRIND_LIBS)
+
+ AM_CONDITIONAL(HAVE_VALGRIND, test -n "$VALGRIND_PATH")
+])
diff --git a/trunk/m4/python.m4 b/trunk/m4/python.m4
new file mode 100644
index 000000000..fe901562d
--- /dev/null
+++ b/trunk/m4/python.m4
@@ -0,0 +1,66 @@
+## this one is commonly used with AM_PATH_PYTHONDIR ...
+dnl AM_CHECK_PYMOD(MODNAME [,SYMBOL [,ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]])
+dnl Check if a module containing a given symbol is visible to python.
+AC_DEFUN([AM_CHECK_PYMOD],
+[AC_REQUIRE([AM_PATH_PYTHON])
+py_mod_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'`
+AC_MSG_CHECKING(for ifelse([$2],[],,[$2 in ])python module $1)
+AC_CACHE_VAL(py_cv_mod_$py_mod_var, [
+ifelse([$2],[], [prog="
+import sys
+try:
+ import $1
+except ImportError:
+ sys.exit(1)
+except:
+ sys.exit(0)
+sys.exit(0)"], [prog="
+import $1
+$1.$2"])
+if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC
+ then
+ eval "py_cv_mod_$py_mod_var=yes"
+ else
+ eval "py_cv_mod_$py_mod_var=no"
+ fi
+])
+py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"`
+if test "x$py_val" != xno; then
+ AC_MSG_RESULT(yes)
+ ifelse([$3], [],, [$3
+])dnl
+else
+ AC_MSG_RESULT(no)
+ ifelse([$4], [],, [$4
+])dnl
+fi
+])
+
+dnl a macro to check for ability to create python extensions
+dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE])
+dnl function also defines PYTHON_INCLUDES
+AC_DEFUN([AM_CHECK_PYTHON_HEADERS],
+[AC_REQUIRE([AM_PATH_PYTHON])
+AC_MSG_CHECKING(for headers required to compile python extensions)
+dnl deduce PYTHON_INCLUDES
+py_prefix=`$PYTHON -c "import sys; print sys.prefix"`
+py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
+if test -x "$PYTHON-config"; then
+PYTHON_INCLUDES=`$PYTHON-config --includes 2>/dev/null`
+else
+PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"
+if test "$py_prefix" != "$py_exec_prefix"; then
+ PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}"
+fi
+fi
+AC_SUBST(PYTHON_INCLUDES)
+dnl check if the headers exist:
+save_CPPFLAGS="$CPPFLAGS"
+CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES"
+AC_TRY_CPP([#include <Python.h>],dnl
+[AC_MSG_RESULT(found)
+$1],dnl
+[AC_MSG_RESULT(not found)
+$2])
+CPPFLAGS="$save_CPPFLAGS"
+])
diff --git a/trunk/megaphone/.gitignore b/trunk/megaphone/.gitignore
new file mode 100644
index 000000000..697575ef0
--- /dev/null
+++ b/trunk/megaphone/.gitignore
@@ -0,0 +1,4 @@
+GNOME_Megaphone_Applet.schemas
+GNOME_Megaphone_Applet.server
+GNOME_Megaphone_Applet.server.in
+megaphone-applet
diff --git a/trunk/megaphone/Makefile.am b/trunk/megaphone/Makefile.am
new file mode 100644
index 000000000..85d5f7528
--- /dev/null
+++ b/trunk/megaphone/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = src data
+
diff --git a/trunk/megaphone/data/GNOME_Megaphone_Applet.schemas.in b/trunk/megaphone/data/GNOME_Megaphone_Applet.schemas.in
new file mode 100644
index 000000000..26445a3e8
--- /dev/null
+++ b/trunk/megaphone/data/GNOME_Megaphone_Applet.schemas.in
@@ -0,0 +1,30 @@
+<gconfschemafile>
+ <schemalist>
+
+ <schema>
+ <key>/schemas/apps/megaphone-applet/prefs/contact_id</key>
+ <applyto>/apps/megaphone-applet/prefs/contact_id</applyto>
+ <owner>megaphone</owner>
+ <type>string</type>
+ <default></default>
+ <locale name="C">
+ <short>The contact to display in the applet. Empty means no contact is displayed.</short>
+ </locale>
+ </schema>
+ <schema>
+ <key>/schemas/apps/megaphone-applet/prefs/avatar_token</key>
+ <applyto>/apps/megaphone-applet/prefs/avatar_token</applyto>
+ <owner>megaphone</owner>
+ <type>string</type>
+ <default></default>
+ <locale name="C">
+ <short>The contact's avatar token. Empty means contact has no avatar.</short>
+ </locale>
+ </schema>
+
+ </schemalist>
+</gconfschemafile>
+
+
+
+
diff --git a/trunk/megaphone/data/GNOME_Megaphone_Applet.server.in.in b/trunk/megaphone/data/GNOME_Megaphone_Applet.server.in.in
new file mode 100644
index 000000000..2d1c3ac12
--- /dev/null
+++ b/trunk/megaphone/data/GNOME_Megaphone_Applet.server.in.in
@@ -0,0 +1,25 @@
+<oaf_info>
+
+<oaf_server iid="OAFIID:GNOME_Megaphone_Applet_Factory" type="exe" location="@LIBEXECDIR@/megaphone-applet">
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:Bonobo/GenericFactory:1.0"/>
+ <item value="IDL:Bonobo/Unknown:1.0"/>
+ </oaf_attribute>
+ <oaf_attribute name="name" type="string" _value="Megaphone"/>
+ <oaf_attribute name="description" type="string" _value="Talk!"/>
+</oaf_server>
+
+<oaf_server iid="OAFIID:GNOME_Megaphone_Applet" type="factory" location="OAFIID:GNOME_Megaphone_Applet_Factory">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:GNOME/Vertigo/PanelAppletShell:1.0"/>
+ <item value="IDL:Bonobo/Control:1.0"/>
+ <item value="IDL:Bonobo/Unknown:1.0"/>
+ </oaf_attribute>
+ <oaf_attribute name="name" type="string" _value="Megaphone"/>
+ <oaf_attribute name="description" type="string" _value="Talk!"/>
+ <oaf_attribute name="panel:category" type="string" value="Internet"/>
+ <oaf_attribute name="panel:icon" type="string" value="empathy.png"/>
+</oaf_server>
+
+</oaf_info>
diff --git a/trunk/megaphone/data/GNOME_Megaphone_Applet.xml b/trunk/megaphone/data/GNOME_Megaphone_Applet.xml
new file mode 100644
index 000000000..8a139707a
--- /dev/null
+++ b/trunk/megaphone/data/GNOME_Megaphone_Applet.xml
@@ -0,0 +1,9 @@
+<Root>
+ <popups>
+ <popup name="button3">
+ <menuitem name="Information" verb="information" _label="_Information" pixtype="stock" pixname="gtk-info"/>
+ <menuitem name="Preferences" verb="preferences" _label="_Preferences" pixtype="stock" pixname="gtk-properties"/>
+ <menuitem name="About" verb="about" _label="_About" pixtype="stock" pixname="gtk-about"/>
+ </popup>
+ </popups>
+</Root>
diff --git a/trunk/megaphone/data/Makefile.am b/trunk/megaphone/data/Makefile.am
new file mode 100644
index 000000000..3dbde679f
--- /dev/null
+++ b/trunk/megaphone/data/Makefile.am
@@ -0,0 +1,35 @@
+# Panel applet bonobo stuff
+serverdir = $(libdir)/bonobo/servers
+server_in_files = GNOME_Megaphone_Applet.server.in
+server_DATA = $(server_in_files:.server.in=.server)
+
+
+# GConf Schemas
+schemadir = $(GCONF_SCHEMA_FILE_DIR)
+schema_in_files = GNOME_Megaphone_Applet.schemas.in
+schema_DATA = $(schema_in_files:.schemas.in=.schemas)
+
+# Misc data
+resourcesdir = $(pkgdatadir)
+resources_DATA = \
+ GNOME_Megaphone_Applet.xml
+# megaphone-applet.glade
+
+megaphonebindir = $(libexecdir)
+
+# Build rules
+@INTLTOOL_SERVER_RULE@
+@INTLTOOL_SCHEMAS_RULE@
+
+$(server_in_files): $(server_in_files:.server.in=.server.in.in)
+ sed -e "s|\@LIBEXECDIR\@|$(megaphonebindir)|" $< > $@
+
+DISTCLEANFILES = \
+ $(server_DATA) \
+ $(server_in_files) \
+ $(schema_DATA)
+
+EXTRA_DIST = \
+ GNOME_Megaphone_Applet.server.in.in \
+ $(resources_DATA) \
+ $(schema_in_files)
diff --git a/trunk/megaphone/src/Makefile.am b/trunk/megaphone/src/Makefile.am
new file mode 100644
index 000000000..d5876943c
--- /dev/null
+++ b/trunk/megaphone/src/Makefile.am
@@ -0,0 +1,17 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -DPKGDATADIR=\""$(pkgdatadir)"\" \
+ -DGNOMELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+ -DIMAGEDIR=\"$(datadir)/empathy\" \
+ $(MEGAPHONE_CFLAGS) $(WARN_CFLAGS)
+
+libexec_PROGRAMS = megaphone-applet
+megaphone_applet_SOURCES = \
+ megaphone-applet.c megaphone-applet.h
+
+megaphone_applet_LDFLAGS = \
+ $(MEGAPHONE_LIBS)
+
+megaphone_applet_LDADD = \
+ $(top_builddir)/libempathy/libempathy.la \
+ $(top_builddir)/libempathy-gtk/libempathy-gtk.la
diff --git a/trunk/megaphone/src/megaphone-applet.c b/trunk/megaphone/src/megaphone-applet.c
new file mode 100644
index 000000000..5deeb6c98
--- /dev/null
+++ b/trunk/megaphone/src/megaphone-applet.c
@@ -0,0 +1,559 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Raphaël Slinckx <raphael@slinckx.net>
+ * Copyright (C) 2007 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Authors: Raphaël Slinckx <raphael@slinckx.net>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <bonobo/bonobo-ui-component.h>
+#include <panel-2.0/panel-applet-gconf.h>
+#include <gconf/gconf-client.h>
+#include <libgnomevfs/gnome-vfs-utils.h>
+
+#include <libmissioncontrol/mission-control.h>
+#include <libmissioncontrol/mc-account.h>
+
+#include <libempathy/empathy-contact-factory.h>
+#include <libempathy/empathy-contact.h>
+#include <libempathy/empathy-contact-list.h>
+#include <libempathy/empathy-contact-manager.h>
+#include <libempathy/empathy-utils.h>
+
+#include <libempathy-gtk/empathy-contact-list-view.h>
+#include <libempathy-gtk/empathy-contact-list-store.h>
+#include <libempathy-gtk/empathy-contact-dialogs.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
+
+#include "megaphone-applet.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, MegaphoneApplet)
+typedef struct {
+ EmpathyContactFactory *factory;
+ GtkWidget *image;
+ gint image_size;
+ EmpathyContact *contact;
+ GConfClient *gconf;
+ guint gconf_cnxn;
+} MegaphoneAppletPriv;
+
+static void megaphone_applet_finalize (GObject *object);
+static void megaphone_applet_size_allocate_cb (GtkWidget *widget,
+ GtkAllocation *allocation,
+ MegaphoneApplet *applet);
+static gboolean megaphone_applet_button_press_event_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ MegaphoneApplet *applet);
+static void megaphone_applet_information_cb (BonoboUIComponent *uic,
+ MegaphoneApplet *applet,
+ const gchar *verb_name);
+static void megaphone_applet_preferences_cb (BonoboUIComponent *uic,
+ MegaphoneApplet *applet,
+ const gchar *verb_name);
+static void megaphone_applet_about_cb (BonoboUIComponent *uic,
+ MegaphoneApplet *applet,
+ const gchar *verb_name);
+
+G_DEFINE_TYPE(MegaphoneApplet, megaphone_applet, PANEL_TYPE_APPLET)
+
+static const BonoboUIVerb megaphone_applet_menu_verbs [] = {
+ BONOBO_UI_UNSAFE_VERB ("information", megaphone_applet_information_cb),
+ BONOBO_UI_UNSAFE_VERB ("preferences", megaphone_applet_preferences_cb),
+ BONOBO_UI_UNSAFE_VERB ("about", megaphone_applet_about_cb),
+ BONOBO_UI_VERB_END
+};
+
+static const char* authors[] = {
+ "Raphaël Slinckx <raphael@slinckx.net>",
+ "Xavier Claessens <xclaesse@gmail.com>",
+ NULL
+};
+
+static void
+megaphone_applet_class_init (MegaphoneAppletClass *class)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (class);
+
+ object_class->finalize = megaphone_applet_finalize;
+
+ g_type_class_add_private (object_class, sizeof (MegaphoneAppletPriv));
+}
+
+static void
+megaphone_applet_init (MegaphoneApplet *applet)
+{
+ MegaphoneAppletPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (applet,
+ MEGAPHONE_TYPE_APPLET, MegaphoneAppletPriv);
+
+ applet->priv = priv;
+ priv->factory = empathy_contact_factory_new ();
+ priv->gconf = gconf_client_get_default ();
+
+ /* Image holds the contact avatar */
+ priv->image = gtk_image_new ();
+ gtk_widget_show (priv->image);
+ gtk_container_add (GTK_CONTAINER (applet), priv->image);
+
+ /* We want transparency */
+ panel_applet_set_flags (PANEL_APPLET (applet), PANEL_APPLET_EXPAND_MINOR);
+ panel_applet_set_background_widget (PANEL_APPLET (applet), GTK_WIDGET (applet));
+
+ /* Listen for clicks on the applet to dispatch a channel */
+ g_signal_connect (applet, "button-press-event",
+ G_CALLBACK (megaphone_applet_button_press_event_cb),
+ applet);
+
+ /* Allow to resize our avatar when needed */
+ g_signal_connect (applet, "size-allocate",
+ G_CALLBACK (megaphone_applet_size_allocate_cb),
+ applet);
+}
+
+static void
+megaphone_applet_finalize (GObject *object)
+{
+ MegaphoneAppletPriv *priv = GET_PRIV (object);
+
+ if (priv->contact) {
+ g_object_unref (priv->contact);
+ }
+ g_object_unref (priv->factory);
+
+ if (priv->gconf_cnxn != 0) {
+ gconf_client_notify_remove (priv->gconf, priv->gconf_cnxn);
+ }
+ g_object_unref (priv->gconf);
+
+ G_OBJECT_CLASS (megaphone_applet_parent_class)->finalize (object);
+}
+
+static void
+megaphone_applet_update_icon (MegaphoneApplet *applet)
+{
+ MegaphoneAppletPriv *priv = GET_PRIV (applet);
+ EmpathyAvatar *avatar = NULL;
+ GdkPixbuf *avatar_pixbuf;
+
+ if (priv->contact) {
+ avatar = empathy_contact_get_avatar (priv->contact);
+ } else {
+ gtk_image_set_from_icon_name (GTK_IMAGE (priv->image),
+ GTK_STOCK_PREFERENCES,
+ GTK_ICON_SIZE_MENU);
+ return;
+ }
+
+ if (!avatar) {
+ gchar *avatar_token;
+
+ /* Try to take avatar from cache */
+ avatar_token = panel_applet_gconf_get_string (PANEL_APPLET (applet),
+ "avatar_token",
+ NULL);
+ if (!G_STR_EMPTY (avatar_token)) {
+ avatar = empathy_avatar_new_from_cache (avatar_token);
+ }
+ g_free (avatar_token);
+ } else {
+ empathy_avatar_ref (avatar);
+ }
+
+ if (avatar) {
+ avatar_pixbuf = empathy_pixbuf_from_avatar_scaled (avatar,
+ priv->image_size - 2,
+ priv->image_size - 2);
+ empathy_avatar_unref (avatar);
+ } else {
+ GtkIconTheme *icon_theme;
+
+ /* Load the default icon when no avatar is found */
+ icon_theme = gtk_icon_theme_get_default ();
+ avatar_pixbuf = gtk_icon_theme_load_icon (icon_theme,
+ "stock_contact",
+ priv->image_size - 2,
+ 0, NULL);
+ }
+
+ /* Now some desaturation if the contact is offline */
+ if (!empathy_contact_is_online (priv->contact)) {
+ GdkPixbuf *offline_avatar;
+
+ offline_avatar = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE,
+ 8,
+ gdk_pixbuf_get_height (avatar_pixbuf),
+ gdk_pixbuf_get_width (avatar_pixbuf));
+ gdk_pixbuf_saturate_and_pixelate (avatar_pixbuf,
+ offline_avatar,
+ 0.0,
+ TRUE);
+ g_object_unref (avatar_pixbuf);
+ avatar_pixbuf = offline_avatar;
+ }
+
+ gtk_image_set_from_pixbuf (GTK_IMAGE (priv->image), avatar_pixbuf);
+ g_object_unref (avatar_pixbuf);
+}
+
+static void
+megaphone_applet_update_contact (MegaphoneApplet *applet)
+{
+ MegaphoneAppletPriv *priv = GET_PRIV (applet);
+ const gchar *name;
+ const gchar *status;
+ gchar *tip;
+ const gchar *avatar_token = NULL;
+
+ if (priv->contact) {
+ EmpathyAvatar *avatar;
+
+ avatar = empathy_contact_get_avatar (priv->contact);
+ if (avatar) {
+ avatar_token = avatar->token;
+ }
+ }
+
+ if (avatar_token) {
+ panel_applet_gconf_set_string (PANEL_APPLET (applet),
+ "avatar_token", avatar_token,
+ NULL);
+ }
+
+ megaphone_applet_update_icon (applet);
+
+ if (priv->contact ) {
+ name = empathy_contact_get_name (priv->contact);
+ status = empathy_contact_get_status (priv->contact);
+ tip = g_strdup_printf ("<b>%s</b>: %s", name, status);
+ gtk_widget_set_tooltip_markup (GTK_WIDGET (applet), tip);
+ g_free (tip);
+ } else {
+ gtk_widget_set_tooltip_markup (GTK_WIDGET (applet),
+ "Please configure a contact.");
+ }
+
+}
+
+static void
+megaphone_applet_set_contact (MegaphoneApplet *applet,
+ const gchar *str)
+{
+ MegaphoneAppletPriv *priv = GET_PRIV (applet);
+ McAccount *account = NULL;
+ gchar **strv = NULL;
+
+ DEBUG ("Setting new contact %s", str);
+
+ /* Release old contact, if any */
+ if (priv->contact) {
+ g_signal_handlers_disconnect_by_func (priv->contact,
+ megaphone_applet_update_contact,
+ applet);
+ g_object_unref (priv->contact),
+ priv->contact = NULL;
+ }
+
+ /* Lookup the new contact */
+ if (str) {
+ strv = g_strsplit (str, "/", 2);
+ account = mc_account_lookup (strv[0]);
+ }
+ if (account) {
+ priv->contact = empathy_contact_factory_get_from_id (priv->factory,
+ account,
+ strv[1]);
+ g_object_unref (account);
+ }
+ g_strfreev (strv);
+
+ /* Take hold of the new contact if any */
+ if (priv->contact) {
+ /* Listen for updates on the contact, and force a first update */
+ g_signal_connect_swapped (priv->contact, "notify",
+ G_CALLBACK (megaphone_applet_update_contact),
+ applet);
+ }
+
+ megaphone_applet_update_contact (applet);
+}
+
+static void
+megaphone_applet_preferences_response_cb (GtkWidget *dialog,
+ gint response,
+ MegaphoneApplet *applet)
+{
+ if (response == GTK_RESPONSE_ACCEPT) {
+ EmpathyContactListView *contact_list;
+ EmpathyContact *contact;
+
+ /* Retrieve the selected contact, if any and set it up in gconf.
+ * GConf will notify us from the change and we will adjust ourselves */
+ contact_list = g_object_get_data (G_OBJECT (dialog), "contact-list");
+ contact = empathy_contact_list_view_get_selected (contact_list);
+ if (contact) {
+ McAccount *account;
+ const gchar *account_id;
+ const gchar *contact_id;
+ gchar *str;
+
+ account = empathy_contact_get_account (contact);
+ account_id = mc_account_get_unique_name (account);
+ contact_id = empathy_contact_get_id (contact);
+
+ str = g_strconcat (account_id, "/", contact_id, NULL);
+ panel_applet_gconf_set_string (PANEL_APPLET (applet),
+ "avatar_token", "",
+ NULL);
+ panel_applet_gconf_set_string (PANEL_APPLET (applet),
+ "contact_id", str,
+ NULL);
+ g_free (str);
+ }
+ }
+ gtk_widget_destroy (dialog);
+}
+
+static void
+megaphone_applet_show_preferences (MegaphoneApplet *applet)
+{
+ GtkWidget *dialog;
+ GtkWidget *scroll;
+ EmpathyContactListView *contact_list;
+ EmpathyContactListStore *contact_store;
+ EmpathyContactManager *contact_manager;
+
+ dialog = gtk_dialog_new_with_buttons ("Select contact...",
+ NULL, 0,
+ GTK_STOCK_CANCEL,
+ GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK,
+ GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ /* Show all contacts, even offline and sort alphabetically */
+ contact_manager = empathy_contact_manager_new ();
+ contact_store = empathy_contact_list_store_new (EMPATHY_CONTACT_LIST (contact_manager));
+ g_object_set (contact_store,
+ "is-compact", TRUE,
+ "show-avatars", TRUE,
+ "show-offline", TRUE,
+ "sort-criterium", EMPATHY_CONTACT_LIST_STORE_SORT_NAME,
+ NULL);
+ contact_list = empathy_contact_list_view_new (contact_store,
+ EMPATHY_CONTACT_LIST_FEATURE_NONE,
+ EMPATHY_CONTACT_FEATURE_NONE);
+ g_object_unref (contact_manager);
+ g_object_unref (contact_store);
+ gtk_widget_show (GTK_WIDGET (contact_list));
+
+ gtk_window_set_default_size (GTK_WINDOW (dialog), 300, 500);
+ scroll = gtk_scrolled_window_new (NULL, NULL);
+ gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (contact_list));
+ gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), scroll);
+ gtk_widget_show (scroll);
+
+ g_object_set_data (G_OBJECT (dialog), "contact-list", contact_list);
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (megaphone_applet_preferences_response_cb),
+ applet);
+
+ gtk_widget_show (dialog);
+}
+
+static void
+megaphone_applet_information_cb (BonoboUIComponent *uic,
+ MegaphoneApplet *applet,
+ const gchar *verb_name)
+{
+ MegaphoneAppletPriv *priv = GET_PRIV (applet);
+
+ /* FIXME: We should grey out the menu item if there are no available contact */
+ if (priv->contact) {
+ empathy_contact_information_dialog_show (priv->contact, NULL, FALSE, FALSE);
+ }
+}
+
+static void
+megaphone_applet_preferences_cb (BonoboUIComponent *uic,
+ MegaphoneApplet *applet,
+ const gchar *verb_name)
+{
+ megaphone_applet_show_preferences (applet);
+}
+
+static void
+megaphone_applet_about_cb (BonoboUIComponent *uic,
+ MegaphoneApplet *applet,
+ const gchar *verb_name)
+{
+ gtk_show_about_dialog (NULL,
+ "name", "Megaphone",
+ "version", PACKAGE_VERSION,
+ "copyright", "Raphaël Slinckx 2007\nCollabora Ltd 2007",
+ "comments", _("Talk!"),
+ "authors", authors,
+ "logo-icon-name", "stock_people",
+ NULL);
+}
+
+static gboolean
+megaphone_applet_button_press_event_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ MegaphoneApplet *applet)
+{
+ MegaphoneAppletPriv *priv = GET_PRIV (applet);
+ MissionControl *mc;
+
+ /* Only react on left-clicks */
+ if (event->button != 1 || event->type != GDK_BUTTON_PRESS) {
+ return FALSE;
+ }
+
+ /* If the contact is unavailable we display the preferences dialog */
+ if (priv->contact == NULL) {
+ megaphone_applet_show_preferences (applet);
+ return TRUE;
+ }
+
+ DEBUG ("Requesting text channel for contact %s (%d)",
+ empathy_contact_get_id (priv->contact),
+ empathy_contact_get_handle (priv->contact));
+
+ mc = empathy_mission_control_new ();
+ mission_control_request_channel (mc,
+ empathy_contact_get_account (priv->contact),
+ TP_IFACE_CHANNEL_TYPE_TEXT,
+ empathy_contact_get_handle (priv->contact),
+ TP_HANDLE_TYPE_CONTACT,
+ NULL, NULL);
+ g_object_unref (mc);
+
+ return TRUE;
+}
+
+static void
+megaphone_applet_size_allocate_cb (GtkWidget *widget,
+ GtkAllocation *allocation,
+ MegaphoneApplet *applet)
+{
+ MegaphoneAppletPriv *priv = GET_PRIV (applet);
+ gint size;
+ PanelAppletOrient orient;
+
+ orient = panel_applet_get_orient (PANEL_APPLET (widget));
+ if (orient == PANEL_APPLET_ORIENT_LEFT ||
+ orient == PANEL_APPLET_ORIENT_RIGHT) {
+ size = allocation->width;
+ } else {
+ size = allocation->height;
+ }
+
+ if (size != priv->image_size) {
+ priv->image_size = size;
+ megaphone_applet_update_icon (applet);
+ }
+}
+
+static void
+megaphone_applet_gconf_notify_cb (GConfClient *client,
+ guint cnxn_id,
+ GConfEntry *entry,
+ MegaphoneApplet *applet)
+{
+ const gchar *key;
+ GConfValue *value;
+
+ key = gconf_entry_get_key (entry);
+ value = gconf_entry_get_value (entry);
+ DEBUG ("GConf notification for key '%s'", key);
+
+ if (value && g_str_has_suffix (key, "/contact_id")) {
+ megaphone_applet_set_contact (applet,
+ gconf_value_get_string (value));
+ }
+}
+
+static gboolean
+megaphone_applet_factory (PanelApplet *applet,
+ const gchar *iid,
+ gpointer data)
+{
+ MegaphoneAppletPriv *priv = GET_PRIV (applet);
+ gchar *pref_dir;
+ gchar *contact_id;
+
+ /* Ensure it's us! */
+ if (strcmp (iid, "OAFIID:GNOME_Megaphone_Applet") != 0) {
+ return FALSE;
+ }
+
+ DEBUG ("Starting up new instance!");
+
+ /* Set up the right-click menu */
+ panel_applet_setup_menu_from_file (applet,
+ PKGDATADIR,
+ "GNOME_Megaphone_Applet.xml",
+ NULL,
+ megaphone_applet_menu_verbs,
+ applet);
+
+ /* Define the schema to be used for each applet instance's preferences */
+ panel_applet_add_preferences (applet,
+ "/schemas/apps/megaphone-applet/prefs",
+ NULL);
+
+ /* We watch the preferences directory */
+ pref_dir = panel_applet_gconf_get_full_key (applet, "");
+ pref_dir[strlen (pref_dir)-1] = '\0';
+ gconf_client_add_dir (priv->gconf, pref_dir,
+ GCONF_CLIENT_PRELOAD_ONELEVEL,
+ NULL);
+ gconf_client_notify_add (priv->gconf, pref_dir,
+ (GConfClientNotifyFunc) megaphone_applet_gconf_notify_cb,
+ applet,
+ NULL, NULL);
+ g_free (pref_dir);
+
+ /* Initial setup with the pre-existing gconf key, or contact_id=NULL if no previous pref */
+ contact_id = panel_applet_gconf_get_string (PANEL_APPLET (applet), "contact_id", NULL);
+ megaphone_applet_set_contact (MEGAPHONE_APPLET (applet), contact_id);
+ g_free (contact_id);
+
+ /* Let's go! */
+ gtk_widget_show (GTK_WIDGET (applet));
+
+ return TRUE;
+}
+
+PANEL_APPLET_BONOBO_FACTORY ("OAFIID:GNOME_Megaphone_Applet_Factory",
+ MEGAPHONE_TYPE_APPLET,
+ "Megaphone", PACKAGE_VERSION,
+ megaphone_applet_factory,
+ NULL);
+
diff --git a/trunk/megaphone/src/megaphone-applet.h b/trunk/megaphone/src/megaphone-applet.h
new file mode 100644
index 000000000..47d82a7d0
--- /dev/null
+++ b/trunk/megaphone/src/megaphone-applet.h
@@ -0,0 +1,54 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Raphaël Slinckx <raphael@slinckx.net>
+ * Copyright (C) 2007 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Authors: Raphaël Slinckx <raphael@slinckx.net>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __MEGAPHONE_APPLET_H__
+#define __MEGAPHONE_APPLET_H__
+
+#include <panel-applet.h>
+
+G_BEGIN_DECLS
+
+#define MEGAPHONE_TYPE_APPLET (megaphone_applet_get_type ())
+#define MEGAPHONE_APPLET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MEGAPHONE_TYPE_APPLET, MegaphoneApplet))
+#define MEGAPHONE_APPLET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MEGAPHONE_TYPE_APPLET, MegaphoneAppletClass))
+#define MEGAPHONE_IS_APPLET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MEGAPHONE_TYPE_APPLET))
+#define MEGAPHONE_IS_APPLET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MEGAPHONE_TYPE_APPLET))
+#define MEGAPHONE_APPLET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MEGAPHONE_TYPE_APPLET, MegaphoneAppletClass))
+
+typedef struct _MegaphoneApplet MegaphoneApplet;
+typedef struct _MegaphoneAppletClass MegaphoneAppletClass;
+
+struct _MegaphoneApplet {
+ PanelApplet applet;
+ gpointer priv;
+};
+
+struct _MegaphoneAppletClass {
+ PanelAppletClass parent_class;
+};
+
+GType megaphone_applet_get_type (void);
+
+G_END_DECLS
+
+#endif /* __MEGAPHONE_APPLET_H__ */
diff --git a/trunk/nothere/.gitignore b/trunk/nothere/.gitignore
new file mode 100644
index 000000000..d73fcf90c
--- /dev/null
+++ b/trunk/nothere/.gitignore
@@ -0,0 +1,4 @@
+GNOME_NotHere_Applet.schemas
+GNOME_NotHere_Applet.server
+GNOME_NotHere_Applet.server.in
+nothere-applet
diff --git a/trunk/nothere/Makefile.am b/trunk/nothere/Makefile.am
new file mode 100644
index 000000000..85d5f7528
--- /dev/null
+++ b/trunk/nothere/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = src data
+
diff --git a/trunk/nothere/data/GNOME_NotHere_Applet.server.in.in b/trunk/nothere/data/GNOME_NotHere_Applet.server.in.in
new file mode 100644
index 000000000..e76ad14d2
--- /dev/null
+++ b/trunk/nothere/data/GNOME_NotHere_Applet.server.in.in
@@ -0,0 +1,25 @@
+<oaf_info>
+
+<oaf_server iid="OAFIID:GNOME_NotHere_Applet_Factory" type="exe" location="@LIBEXECDIR@/nothere-applet">
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:Bonobo/GenericFactory:1.0"/>
+ <item value="IDL:Bonobo/Unknown:1.0"/>
+ </oaf_attribute>
+ <oaf_attribute name="name" type="string" _value="Presence"/>
+ <oaf_attribute name="description" type="string" _value="Set your own presence"/>
+</oaf_server>
+
+<oaf_server iid="OAFIID:GNOME_NotHere_Applet" type="factory" location="OAFIID:GNOME_NotHere_Applet_Factory">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:GNOME/Vertigo/PanelAppletShell:1.0"/>
+ <item value="IDL:Bonobo/Control:1.0"/>
+ <item value="IDL:Bonobo/Unknown:1.0"/>
+ </oaf_attribute>
+ <oaf_attribute name="name" type="string" _value="Presence"/>
+ <oaf_attribute name="description" type="string" _value="Set your own presence"/>
+ <oaf_attribute name="panel:category" type="string" value="Internet"/>
+ <oaf_attribute name="panel:icon" type="string" value="empathy.png"/>
+</oaf_server>
+
+</oaf_info>
diff --git a/trunk/nothere/data/GNOME_NotHere_Applet.xml b/trunk/nothere/data/GNOME_NotHere_Applet.xml
new file mode 100644
index 000000000..5d425f108
--- /dev/null
+++ b/trunk/nothere/data/GNOME_NotHere_Applet.xml
@@ -0,0 +1,7 @@
+<Root>
+ <popups>
+ <popup name="button3">
+ <menuitem name="About" verb="about" _label="_About" pixtype="stock" pixname="gtk-about"/>
+ </popup>
+ </popups>
+</Root>
diff --git a/trunk/nothere/data/Makefile.am b/trunk/nothere/data/Makefile.am
new file mode 100644
index 000000000..4aa92147f
--- /dev/null
+++ b/trunk/nothere/data/Makefile.am
@@ -0,0 +1,35 @@
+# Panel applet bonobo stuff
+serverdir = $(libdir)/bonobo/servers
+server_in_files = GNOME_NotHere_Applet.server.in
+server_DATA = $(server_in_files:.server.in=.server)
+
+
+# GConf Schemas
+#schemadir = $(GCONF_SCHEMA_FILE_DIR)
+#schema_in_files = GNOME_NotHere_Applet.schemas.in
+#schema_DATA = $(schema_in_files:.schemas.in=.schemas)
+
+# Misc data
+resourcesdir = $(pkgdatadir)
+resources_DATA = \
+ GNOME_NotHere_Applet.xml
+# nothere-applet.glade
+
+notherebindir = $(libexecdir)
+
+# Build rules
+@INTLTOOL_SERVER_RULE@
+@INTLTOOL_SCHEMAS_RULE@
+
+$(server_in_files): $(server_in_files:.server.in=.server.in.in)
+ sed -e "s|\@LIBEXECDIR\@|$(notherebindir)|" $< > $@
+
+DISTCLEANFILES = \
+ $(server_DATA) \
+ $(server_in_files)
+# $(schema_DATA)
+
+EXTRA_DIST = \
+ GNOME_NotHere_Applet.server.in.in \
+ $(resources_DATA)
+# $(schema_in_files)
diff --git a/trunk/nothere/src/Makefile.am b/trunk/nothere/src/Makefile.am
new file mode 100644
index 000000000..b4b016afc
--- /dev/null
+++ b/trunk/nothere/src/Makefile.am
@@ -0,0 +1,17 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -DPKGDATADIR=\""$(pkgdatadir)"\" \
+ -DGNOMELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
+ -DIMAGEDIR=\"$(datadir)/empathy\" \
+ $(NOTHERE_CFLAGS) $(WARN_CFLAGS)
+
+libexec_PROGRAMS = nothere-applet
+nothere_applet_SOURCES = \
+ nothere-applet.c nothere-applet.h
+
+nothere_applet_LDFLAGS = \
+ $(NOTHERE_LIBS)
+
+nothere_applet_LDADD = \
+ $(top_builddir)/libempathy/libempathy.la \
+ $(top_builddir)/libempathy-gtk/libempathy-gtk.la
diff --git a/trunk/nothere/src/nothere-applet.c b/trunk/nothere/src/nothere-applet.c
new file mode 100644
index 000000000..f2adb0b9f
--- /dev/null
+++ b/trunk/nothere/src/nothere-applet.c
@@ -0,0 +1,137 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Raphaël Slinckx <raphael@slinckx.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Authors: Raphaël Slinckx <raphael@slinckx.net>
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <bonobo/bonobo-ui-component.h>
+
+#include <libmissioncontrol/mission-control.h>
+#include <libempathy-gtk/empathy-presence-chooser.h>
+
+#include "nothere-applet.h"
+
+G_DEFINE_TYPE(NotHereApplet, nothere_applet, PANEL_TYPE_APPLET)
+
+static void nothere_applet_destroy (GtkObject *object);
+static void nothere_applet_about_cb (BonoboUIComponent *uic,
+ NotHereApplet *applet,
+ const gchar *verb_name);
+
+static const BonoboUIVerb nothere_applet_menu_verbs [] = {
+ BONOBO_UI_UNSAFE_VERB ("about", nothere_applet_about_cb),
+ BONOBO_UI_VERB_END
+};
+
+static const char* authors[] = {
+ "Raphaël Slinckx <raphael@slinckx.net>",
+ NULL
+};
+
+static void
+nothere_applet_class_init (NotHereAppletClass *class)
+{
+ GTK_OBJECT_CLASS (class)->destroy = nothere_applet_destroy;
+
+ gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
+ PKGDATADIR G_DIR_SEPARATOR_S "icons");
+}
+
+static gboolean
+do_not_eat_button_press (GtkWidget *widget,
+ GdkEventButton *event)
+{
+ if (event->button != 1) {
+ g_signal_stop_emission_by_name (widget, "button_press_event");
+ }
+
+ return FALSE;
+}
+
+static void
+nothere_applet_init (NotHereApplet *applet)
+{
+ applet->presence_chooser = empathy_presence_chooser_new ();
+ g_signal_connect (G_OBJECT (applet->presence_chooser), "button_press_event",
+ G_CALLBACK (do_not_eat_button_press), NULL);
+
+ gtk_widget_show (applet->presence_chooser);
+
+ gtk_container_add (GTK_CONTAINER (applet), applet->presence_chooser);
+
+ panel_applet_set_flags (PANEL_APPLET (applet), PANEL_APPLET_EXPAND_MINOR);
+ panel_applet_set_background_widget (PANEL_APPLET (applet), GTK_WIDGET (applet));
+}
+
+static void
+nothere_applet_destroy (GtkObject *object)
+{
+ NotHereApplet *applet = NOTHERE_APPLET (object);
+
+ applet->presence_chooser = NULL;
+
+ (* GTK_OBJECT_CLASS (nothere_applet_parent_class)->destroy) (object);
+}
+
+static void
+nothere_applet_about_cb (BonoboUIComponent *uic,
+ NotHereApplet *applet,
+ const gchar *verb_name)
+{
+ gtk_show_about_dialog (NULL,
+ "name", "Presence",
+ "version", PACKAGE_VERSION,
+ "copyright", "Copyright \xc2\xa9 2007 Raphaël Slinckx",
+ "comments", _("Set your own presence"),
+ "authors", authors,
+ "logo-icon-name", "stock_people",
+ NULL);
+}
+
+static gboolean
+nothere_applet_factory (PanelApplet *applet,
+ const gchar *iid,
+ gpointer data)
+{
+ if (strcmp (iid, "OAFIID:GNOME_NotHere_Applet") != 0) {
+ return FALSE;
+ }
+
+ /* Set up the menu */
+ panel_applet_setup_menu_from_file (applet,
+ PKGDATADIR,
+ "GNOME_NotHere_Applet.xml",
+ NULL,
+ nothere_applet_menu_verbs,
+ applet);
+
+ gtk_widget_show (GTK_WIDGET (applet));
+ return TRUE;
+}
+
+PANEL_APPLET_BONOBO_FACTORY ("OAFIID:GNOME_NotHere_Applet_Factory",
+ NOTHERE_TYPE_APPLET,
+ "Presence", PACKAGE_VERSION,
+ nothere_applet_factory,
+ NULL);
diff --git a/trunk/nothere/src/nothere-applet.h b/trunk/nothere/src/nothere-applet.h
new file mode 100644
index 000000000..37e5d91a6
--- /dev/null
+++ b/trunk/nothere/src/nothere-applet.h
@@ -0,0 +1,52 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007 Raphaël Slinckx <raphael@slinckx.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Authors: Raphaël Slinckx <raphael@slinckx.net>
+ */
+
+#ifndef __NOTHERE_APPLET_H__
+#define __NOTHERE_APPLET_H__
+
+#include <panel-applet.h>
+
+G_BEGIN_DECLS
+
+#define NOTHERE_TYPE_APPLET (nothere_applet_get_type ())
+#define NOTHERE_APPLET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NOTHERE_TYPE_APPLET, NotHereApplet))
+#define NOTHERE_APPLET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NOTHERE_TYPE_APPLET, NotHereAppletClass))
+#define NOTHERE_IS_APPLET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NOTHERE_TYPE_APPLET))
+#define NOTHERE_IS_APPLET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NOTHERE_TYPE_APPLET))
+#define NOTHERE_APPLET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NOTHERE_TYPE_APPLET, NotHereAppletClass))
+
+typedef struct _NotHereApplet NotHereApplet;
+typedef struct _NotHereAppletClass NotHereAppletClass;
+
+struct _NotHereApplet {
+ PanelApplet applet;
+ GtkWidget *presence_chooser;
+};
+
+struct _NotHereAppletClass {
+ PanelAppletClass parent_class;
+};
+
+GType nothere_applet_get_type (void);
+
+G_END_DECLS
+
+#endif /* __NOTHERE_APPLET_H__ */
diff --git a/trunk/po/.gitignore b/trunk/po/.gitignore
new file mode 100644
index 000000000..90b9b7408
--- /dev/null
+++ b/trunk/po/.gitignore
@@ -0,0 +1,6 @@
+*.gmo
+.intltool-merge-cache
+Makefile.in.in
+POTFILES
+stamp-it
+empathy.pot
diff --git a/trunk/po/ChangeLog b/trunk/po/ChangeLog
new file mode 100644
index 000000000..385554968
--- /dev/null
+++ b/trunk/po/ChangeLog
@@ -0,0 +1,13 @@
+=== DO NOT EDIT ===
+
+
+ChangeLog is now generated from SVN logs. Simply commit with a message in that format:
+
+Updated <lang> translation (<name>).
+
+Replace <lang> with the language you are commiting as in the name of the po file,
+and replace <name> by the name of the author if different from the name of the committer.
+For example:
+
+Updated fr translation (Xavier Claessens).
+
diff --git a/trunk/po/ChangeLog.old b/trunk/po/ChangeLog.old
new file mode 100644
index 000000000..faa7446f3
--- /dev/null
+++ b/trunk/po/ChangeLog.old
@@ -0,0 +1,347 @@
+2008-01-03 Kjartan Maraas <kmaraas@gnome.org>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-12-31 Yannig Marchegay <yannig@marchegay.org>
+
+ * oc.po: Updated Occitan translation.
+
+2007-12-30 Claude Paroz <claude@2xlibre.net>
+
+ * fr.po: Updated French translation.
+
+2007-12-30 Daniel Nylander <po@danielnylander.se>
+
+ * sv.po: Updated Swedish translation.
+
+2007-12-30 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-12-27 Leonardo Ferreira Fontenelle <leonardof@svn.gnome.org>
+
+ * pt_BR.po: Brazilian Portuguese translation updated by Og Maciel.
+
+2007-12-27 Inaki Larranaga Murgoitio <dooteo@euskalgnu.org>
+
+ * eu.po: Updated Basque translation.
+
+2007-12-23 Djihed Afifi <djihed@gmail.com>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-12-19 Kjartan Maraas <kmaraas@gnome.org>
+
+ * nb.po: Updated Norwegian bokmål translation.
+
+2007-12-18 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po: Updated Japanese translation.
+
+2007-12-17 Xavier Claessens <xclaesse@gmail.com>
+
+ * pt_BR.po: Updated pt_BR translation (André Filipe de Assunção e Brito).
+
+2007-12-17 Luca Ferretti <elle.uca@libero.it>
+
+ * it.po: Updated Italian translation by Milo Casagrande.
+
+2007-12-16 Espen Stefansen <espens@svn.gnome.org>
+
+ * nb.po: Updated Norwegian Bokmål translation.
+
+2007-12-16 Daniel Nylander <po@danielnylander.se>
+
+ * sv.po: Updated Swedish translation.
+
+2007-12-06 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-12-05 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po: Updated Japanese translation.
+
+2007-12-03 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
+
+ * gl.po: Updated Galician Translation.
+ * POTFILES.in: Updated.
+
+2007-12-03 Matej Urbančič <mateju@svn.gnome.org>
+
+ * sl.po: Updated Slovenian translation
+
+2007-11-30 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-11-27 Luca Ferretti <elle.uca@libero.it>
+
+ * it.po: Updated Italian translation by Milo Casagrande.
+
+2007-11-26 Alexander Shopov <ash@contact.bg>
+
+ * bg.po: Updated Bulgarian translation
+
+2007-11-23 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po: Updated Japanese translation.
+
+2007-11-21 Yannig Marchegay <yannig@marchegay.org>
+
+ * oc.po: Updated Occitan translation
+
+2007-11-14 Andre Klapper <a9016009@gmx.de>
+
+ * de.po: Updated German translation.
+
+2007-11-11 Daniel Nylander <po@danielnylander.se>
+
+ * sv.po: Updated Swedish translation.
+
+2007-11-09 Ilkka Tuohela <hile@iki.fi>
+
+ * fi.po: Updated Finnish translation.
+
+2007-11-06 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
+
+ * gl.po: Updated Galician Translation.
+
+2007-11-06 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-11-04 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-11-01 Espen Stefansen <espens@svn.gnome.org>
+
+ * nb.po: Updated Norwegian Bokmål translation.
+
+2007-11-01 Daniel Nylander <po@danielnylander.se>
+
+ * sv.po: Updated Swedish translation.
+
+2007-11-01 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po: Updated Japanese translation.
+
+2007-11-01 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-10-30 Gabor Kelemen <kelemeng@gnome.hu>
+
+ * hu.po: Translation updated
+
+2007-10-28 Ignacio Casal Quinteiro <nacho.resa@gmail.com>
+
+ * gl.po: Added Galician Translation.
+ * LINGUAS: Added 'gl'
+
+2007-10-25 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation.
+
+2007-10-24 Claude Paroz <claude@2xlibre.net>
+
+ * fr.po: Updated French translation.
+
+2007-10-23 Djihed Afifi <djihed@gmail.com>
+
+ * ar.po: Updated Arabic Translation by Djihed Afifi.
+
+2007-10-22 Daniel Nylander <po@danielnylander.se>
+
+ * sv.po: Updated Swedish translation.
+
+2007-10-19 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation.
+
+2007-10-14 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation.
+
+2007-10-11 Daniel Nylander <po@danielnylander.se>
+
+ * sv.po: Updated Swedish translation.
+
+2007-10-08 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po: Updated Japanese translation.
+
+2007-10-07 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation.
+
+2007-09-29 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po: Updated Japanese translation.
+
+2007-09-26 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-09-20 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-09-13 Ilkka Tuohela <hile@iki.fi>
+
+ * fi.po: Updated Finnish translation.
+
+2007-09-10 Jordi Mallach <jordi@sindominio.net>
+
+ * ca.po: Updated Catalan translation.
+
+2007-09-01 Ilkka Tuohela <hile@iki.fi>
+
+ * fi.po: Updated Finnish translation.
+
+2007-08-30 Stéphane Raimbault <stephane.raimbault@gmail.com>
+
+ * fr.po: Updated French translation by Laurent Bigonville and
+ Stéphane Raimbault.
+
+2007-08-26 Xavier Claessens <xclaesse@gmail.com>
+
+ * hr.po: Updated Croatian translation (Senko Rasic).
+
+2007-08-26 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po: Updated Japanese translation.
+
+2007-08-25 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-08-19 Artur Flinta <aflinta@svn.gnome.org>
+
+ * pl.po: Updated Polish translation (GNOME PL Team).
+
+2007-08-18 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-08-16 Ilkka Tuohela <hile@iki.fi>
+
+ * fi.po: Updated Finnish translation.
+
+2007-08-16 Ilkka Tuohela <hile@iki.fi>
+
+ * fi.po: Updated Finnish translation.
+
+2007-08-14 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po: Updated Japanese translation.
+
+2007-08-13 Stéphane Raimbault <stephane.raimbault@gmail.com>
+
+ * fr.po: One more fix. Thanks to Claude Paroz.
+
+2007-08-13 Frederic Peters <fpeters@0d.be>
+
+ * fr.po: Updated French translation with fixes suggested by Stéphane
+ Raimbault.
+
+2007-08-10 Frederic Peters <fpeters@0d.be>
+
+ * fr.po: Updated French translation.
+
+2007-08-09 Inaki Larranaga Murgoitio <dooteo@zundan.com>
+
+ * eu.po: Updated Basque translation.
+
+2007-08-08 Artur Flinta <aflinta@svn.gnome.org>
+
+ * pl.po: Updated Polish translation by GNOME PL Team.
+
+2007-08-05 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-08-01 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-07-31 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po: Updated Japanese translation.
+
+2007-07-30 Daniel Nylander <po@danielnylander.se>
+
+ * sv.po: Updated Swedish translation.
+
+2007-07-15 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-06-30 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * pl.po: Updated Polish translation (Tomasz Dominikowski).
+
+2007-06-28 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-06-24 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po: Updated Japanese translation.
+
+2007-06-21 Daniel Nylander <po@danielnylander.se>
+
+ * sv.po: Updated Swedish translation.
+
+2007-06-21 Pema Geyleg <pema.geyleg@gmail.com>
+
+ * dz.po: Updated dzongkha translation
+
+2007-06-18 Gabor Kelemen <kelemeng@gnome.hu>
+
+ * hu.po: Translation updated.
+
+2007-06-15 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-06-15 Gabor Kelemen <kelemeng@gnome.hu>
+
+ * hu.po: Translation updated - this time really :).
+
+2007-06-11 Gabor Kelemen <kelemeng@gnome.hu>
+
+ * hu.po: Translation updated.
+
+2007-06-10 Xavier Claessens <xclaesse@gmail.com>
+
+ * pl.po: Updated Polish translation (Tomasz Dominikowski).
+
+2007-06-10 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po: Updated Japanese translation.
+
+2007-06-07 Jorge Gonzalez <jorgegonz@svn.gnome.org>
+
+ * es.po: Updated Spanish translation
+
+2007-06-03 Daniel Nylander <po@danielnylander.se>
+
+ * sv.po: Updated Swedish translation.
+
+2007-05-26 Takeshi AIHANA <takeshi.aihana@gmail.com>
+
+ * ja.po, LINGUAS: Added Japanese translation.
+
+2007-05-15 David Lodge <dave@cirt.net>
+
+ * en_GB.po: Added British English translation
+
+2007-05-14 Daniel Nylander <po@danielnylander.se>
+
+ * sv.po: Added Swedish translation.
+
+2007-05-14 Xavier Claessens <xclaesse@gmail.com>
+
+ * Initial version imported from gossip
diff --git a/trunk/po/LINGUAS b/trunk/po/LINGUAS
new file mode 100644
index 000000000..d7d0f3f94
--- /dev/null
+++ b/trunk/po/LINGUAS
@@ -0,0 +1,47 @@
+# please keep this list sorted alphabetically
+ar
+az
+bg
+ca
+cs
+cy
+da
+de
+dz
+el
+en_CA
+en_GB
+eo
+es
+eu
+fi
+fr
+ga
+gl
+he
+hr
+hu
+it
+ja
+lt
+ml
+ms
+nb
+ne
+nl
+oc
+pl
+pt
+pt_BR
+ru
+sl
+sq
+sr
+sr@Latn
+sv
+tr
+uk
+vi
+zh_CN
+zh_HK
+zh_TW
diff --git a/trunk/po/POTFILES.in b/trunk/po/POTFILES.in
new file mode 100644
index 000000000..ea5024bc2
--- /dev/null
+++ b/trunk/po/POTFILES.in
@@ -0,0 +1,75 @@
+# List of source files containing translatable strings.
+# Please keep this file sorted alphabetically.
+
+data/empathy.desktop.in.in
+data/empathy.schemas.in
+
+libempathy/empathy-tp-contact-list.c
+libempathy/empathy-utils.c
+
+libempathy-gtk/empathy-account-chooser.c
+libempathy-gtk/empathy-account-widget.c
+libempathy-gtk/empathy-account-widget-aim.glade
+libempathy-gtk/empathy-account-widget-generic.glade
+libempathy-gtk/empathy-account-widget-groupwise.glade
+libempathy-gtk/empathy-account-widget-icq.glade
+libempathy-gtk/empathy-account-widget-irc.c
+libempathy-gtk/empathy-account-widget-irc.glade
+libempathy-gtk/empathy-account-widget-jabber.glade
+libempathy-gtk/empathy-account-widget-msn.glade
+libempathy-gtk/empathy-account-widget-salut.glade
+libempathy-gtk/empathy-account-widget-sip.glade
+libempathy-gtk/empathy-account-widget-yahoo.glade
+libempathy-gtk/empathy-accounts-dialog.c
+libempathy-gtk/empathy-accounts-dialog.glade
+libempathy-gtk/empathy-avatar-chooser.c
+libempathy-gtk/empathy-avatar-image.c
+libempathy-gtk/empathy-chat.c
+libempathy-gtk/empathy-chat.glade
+libempathy-gtk/empathy-chat-view.c
+libempathy-gtk/empathy-contact-dialogs.c
+libempathy-gtk/empathy-contact-dialogs.glade
+libempathy-gtk/empathy-contact-list-view.c
+libempathy-gtk/empathy-contact-menu.c
+libempathy-gtk/empathy-contact-widget.c
+libempathy-gtk/empathy-contact-widget.glade
+libempathy-gtk/empathy-irc-network-dialog.c
+libempathy-gtk/empathy-log-window.c
+libempathy-gtk/empathy-log-window.glade
+libempathy-gtk/empathy-new-message-dialog.glade
+libempathy-gtk/empathy-presence-chooser.c
+libempathy-gtk/empathy-presence-chooser.glade
+libempathy-gtk/empathy-spell-dialog.c
+libempathy-gtk/empathy-spell-dialog.glade
+libempathy-gtk/empathy-theme-boxes.c
+libempathy-gtk/empathy-theme-irc.c
+libempathy-gtk/empathy-theme-manager.c
+libempathy-gtk/empathy-ui-utils.c
+libempathy-gtk/totem-subtitle-encoding.c
+
+megaphone/data/GNOME_Megaphone_Applet.schemas.in
+megaphone/data/GNOME_Megaphone_Applet.server.in.in
+megaphone/data/GNOME_Megaphone_Applet.xml
+megaphone/src/megaphone-applet.c
+
+nothere/data/GNOME_NotHere_Applet.server.in.in
+nothere/data/GNOME_NotHere_Applet.xml
+nothere/src/nothere-applet.c
+
+src/empathy.c
+src/empathy-about-dialog.c
+src/empathy-call-window.c
+src/empathy-call-window.glade
+src/empathy-chat-window.c
+src/empathy-chat-window.glade
+src/empathy-chatrooms-window.c
+src/empathy-chatrooms-window.glade
+src/empathy-main-window.c
+src/empathy-main-window.glade
+src/empathy-new-chatroom-dialog.c
+src/empathy-new-chatroom-dialog.glade
+src/empathy-preferences.c
+src/empathy-preferences.glade
+src/empathy-status-icon.c
+src/empathy-status-icon.glade
+
diff --git a/trunk/po/POTFILES.skip b/trunk/po/POTFILES.skip
new file mode 100644
index 000000000..126726d76
--- /dev/null
+++ b/trunk/po/POTFILES.skip
@@ -0,0 +1,6 @@
+# Please keep this file sorted alphabetically.
+
+data/empathy.desktop.in
+megaphone/data/GNOME_Megaphone_Applet.server.in
+nothere/data/GNOME_NotHere_Applet.server.in
+
diff --git a/trunk/po/ar.po b/trunk/po/ar.po
new file mode 100644
index 000000000..1de9245e5
--- /dev/null
+++ b/trunk/po/ar.po
@@ -0,0 +1,2485 @@
+# translation of gossip.HEAD.po to Arabic
+# Arabisch translation of PACKAGE.
+# Copyright (C) 2004 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+#
+# Arafat Medini <lumina@silverpen.de>, 2004.
+# Abdulaziz Al-Arfaj <alarfaj0@yahoo.com>, 2004.
+# Khaled Hosny <khaledhosny@eglug.org>, 2006.
+# Abou Manal <aboumanal@gmail.com>, 2008.
+# Djihed Afifi<djihed@gmail.com, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-02-27 14:27+0000\n"
+"PO-Revision-Date: 2008-02-09 22:41+0100\n"
+"Last-Translator: Abou Manal <aboumanal@gmail.com>\n"
+"Language-Team: Arabic <support@eglug.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+"Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : n>=3 && n<=10 ? 2 : "
+"3\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "مرسال أمبثي"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "ارسل و استقبل رسائل فورية"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "افتح دائما نافذة دردشة منفصلة للدردشات الجديدة."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr "المِحرف المضاف للكنية عند استعمال (tab) تكملة الكنية في مجموعة الدردشة."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "تيمة نافذة الدردشة"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr "تحقَّق إذا كان على أمبثي الاتصال آليا عند بدء التَّشغيل"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "تحقق من وجوب استخدام NetworkManager"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "تحقق إذا كان حساب Salut قد أنشىء"
+
+#: ../data/empathy.schemas.in.h:7
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"لائحة عناصرها مُفرقة بالفاصلة للغات المدقق الاملائي قصد الاستخدام (مثال en, "
+"fr, nl)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "قائمة مضغوطة للمراسَلين"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "معيار ترتيب قائمة المراسلين"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "المجلد الافتراضي الذي سيُختار منه صورة الأفاتار"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "تمكين النافذة المنبثقة حين تواجد المرَاسل"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "فعل الصوت عندما أكون بعيدا"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "فعل الصوت عندما أكون مشغولا"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "فعل فحص التهجئة"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "إخفاء النَّافذة الرَّئيسيَّة"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "إخفاء النَّافذة الرَّئيسيَّة."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "مِحرف الكنية التام"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "افتح الدردشات الجديدة في نوافذ منفصلة"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "أعرض الأفاتارات"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "أظهر التلميحة حول إغلاق النافذة الرئيسية"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "إظهار المراسلين الغير متَّصلين"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "لغات التدقيق الهجائي"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "آخر مجلد الذي اخْتِير منه صورة الأفاتار."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "السِمة المستخدمة لعرض المحادثة في نوافذ الدردشة."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "استخدام التعابير المرسومة"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "استخدام أصوات التَّبليغ"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "استخدم السمة لغرف الدردشة"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically login to your accounts on "
+"startup."
+msgstr ""
+"فيما إذا كان ينبغي على أمبثي الولوج آليا إلى حساباتك عند بدء التشغيل أم لا."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first empathy run."
+msgstr "فيما إذا كان حساب Salut قد أُنشِئ عند أول تشغيل لِأمبثي. "
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"فيما إذا كان مدير الشبكة سيُستخدم آليا لقطع الاتصال/إعادة الاتصال أم لا."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"فيما ينبغي أم لا التأكد من الكلمات المكتوبة مقابل اللغات التي ترغب التأكد "
+"بواسطتها. "
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "فيما إذا ستحول التعابير المرسومة إلى صور مرسومة في المحادثات."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "فيما إذا سيصدر صوت عند وصول الرَّسائل."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "فيما إذا سيصدر صوت عندما أكون غائباً."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "فيما إذا سيصدر صوت عندما أكون مشغولاً."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "فيما إذا ستعرض نافذة منبثقة أم لا عندما يتوفر مراسل."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"فيما إذا سيظهر أم لا أفاتارات للمراسلين الموجودين في قائمة المراسَلين ونوافذ "
+"الدردشة."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "فيما إذا سيظهر المراسلين الغير متَّصلين في قائمة المراسَلين."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"فيما إذا كان ينبغي إظهار حوار الرسالة حول إغلاق النافذة الرئيسية بزر 'x' من "
+"على شريط العنوان أم لا."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "فيما إذا سيظهر قائمة المراسَلين في وضع مدمج أم لا."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "أتُستخدم السِمة لغرف الدردشة أم لا."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"أي معيار سيُستخدم لفرز لائحة المراسلين. المفترض استخدام الفرز بواسطة اسم "
+"المراسل بقيمة \"name\". أما قيمة \"state\" فستُفرز الائحة بواسطة الولاية."
+
+#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:149
+msgid "People nearby"
+msgstr "الأشخاص القريبون"
+
+#: ../libempathy/empathy-utils.c:539
+msgid "Available"
+msgstr "متوفّر"
+
+#: ../libempathy/empathy-utils.c:541
+msgid "Busy"
+msgstr "مشغول"
+
+#: ../libempathy/empathy-utils.c:544
+msgid "Away"
+msgstr "غائب"
+
+#: ../libempathy/empathy-utils.c:546
+msgid "Hidden"
+msgstr "مخفي"
+
+#: ../libempathy/empathy-utils.c:549
+msgid "Offline"
+msgstr "غير متصل"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"أمبثي برنامج حر؛ بامكانك إعادة توزيعه و/أو تعديله تحت شروط الرخصة العامة "
+"لجنو والتي نشرتها منظمة البرمجيات الحرة؛ سواء كانت الإصدارة 2 للرخصة أو أي "
+"إصدارة بعدها حسب الرغبة. "
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"يوزّع أمبثي على أمل أن يكون مفيدال لمن يستخدمه دون أدنى مسؤولية؛ ولا حتى "
+"أيضشمان يضمن صلاحية العرض في السوق أو توافقه مع أي استخدام محدد. يمكنم "
+"مراجعة الرخصة العامة لجنو لمزيد من التفاصيل. "
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"من المفترض أن تكون قد استلمت نسخة من رخصة جنو العامة مع هذا البرنامج؛ في حال "
+"عدم استلامك لذلك، يمكنك مكاتبة: Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-1301, USA"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "عميل مراسلة فورية لجنوم"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"فريق عربآيز للترجمة http://www.arabeyes.org :\n"
+"جهاد عفيفي\t<djihed@gmail.com>\n"
+"يوسف رفه\t<yousef@raffah.com>"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "الكل"
+
+#: ../libempathy-gtk/empathy-account-widget.c:276
+#: ../libempathy-gtk/empathy-account-widget.c:321
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>متقدم</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>تجاوز إعدادات الخادم</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "انسَ كلمة المرور وامْحُ المدخلة."
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+msgid "Login I_D:"
+msgstr "ا_سم المستخدم:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+msgid "Pass_word:"
+msgstr "كلمة الم_رور:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "الأو_لويّة:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "الم_ورد:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "إستعمل التشفير القديم SS_L"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "مطلوب ال_تشفير (TLS/SSL )"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_تجاهل أخطاء شهادة SSL"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+msgid "_Port:"
+msgstr "ال_منْفذ:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "ال_خادم:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:13
+msgid "jabber account settings"
+msgstr "إعدادات حساب jabber"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "إعدادات حساب msn"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "البريد إل_كتروني:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "الإ_سم:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "ه_وية Jabber:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "ال_لقب:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "الك_نية:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "ا_سم متعارف عليه:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "إعدادات حساب salut"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:225
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"لإظافة حساب جديد، يمكنك النقر على زر ‘أظف‘ فتُنشأ مُدخلة جديدة لتبدأ بتشكيلها."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:229
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"لإظافة حساب جديد، عليك أولا بتثبيت منتهى خلفي لكل بروتوكول تود استعماله."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:236
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>لم يتم انتقاء أيّ حساب</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"إذا لم تكن ترغب في إظافة حساب، فانقر فقط على الحساب الذي ترغب في تشكيله من "
+"الائحة على اليسار."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:243
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>لم تتم تهيئة أيّ حساب</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:411
+msgid "Enabled"
+msgstr "مفعّل"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:421
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "حسابات"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:904
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"إنك علة وشك إزالة حسابك %s!\n"
+"أمُتأكد أنك ترغب في إتمام العملية؟"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:910
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"لن تُزال أي محادثات أو غرف دردشة إذا قررت إتمام العملية.\n"
+"\n"
+"إذا ما قررت إظافة الحساب لاحقا، سيبقون متوفرين. "
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>حساب جديد</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>إعدادات</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "ا_نشاء"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"لإظافة حساب جديد، يمكنك النقر على زر ‘أظف‘ فتُنشأ مُدخلة جديدة لتبدأ "
+"بتشكيلها.\n"
+"\n"
+"إذا لم تكن ترغب في إظافة حساب، فانقر فقط على الحساب الذي ترغب في تشكيله من "
+"الائحة على اليسار. "
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "النّوع:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:449
+msgid "Select Your Avatar Image"
+msgstr "اختر صورة الأفاتار"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:452
+msgid "No Image"
+msgstr "لا صورة"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:512
+msgid "Images"
+msgstr "صور"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:516
+msgid "All Files"
+msgstr "كل الملفّات"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "انقر للتكبير"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+#, fuzzy
+msgid "End Call"
+msgstr "اتصال"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "دخْل"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "صمت"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "إخراج"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "ارسال الفيديو"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Start Call"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:7
+msgid "Volume"
+msgstr "شدة الصوت"
+
+#: ../libempathy-gtk/empathy-chat.c:445
+msgid "Disconnected"
+msgstr "غير متَّصل"
+
+#: ../libempathy-gtk/empathy-chat.c:580
+msgid "offline"
+msgstr "غير متّصل"
+
+#: ../libempathy-gtk/empathy-chat.c:583
+msgid "invalid contact"
+msgstr "مراسل غير صحيح"
+
+#: ../libempathy-gtk/empathy-chat.c:586
+msgid "permission denied"
+msgstr "رُفض التّصريح"
+
+#: ../libempathy-gtk/empathy-chat.c:589
+msgid "too long message"
+msgstr "الرسالة طويلة جدا"
+
+#: ../libempathy-gtk/empathy-chat.c:592
+msgid "not implemented"
+msgstr "غير مطبق"
+
+#: ../libempathy-gtk/empathy-chat.c:595
+msgid "unknown"
+msgstr "مجهول"
+
+#: ../libempathy-gtk/empathy-chat.c:599
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "خطأ في ارسال الرسالة '%s': %s"
+
+#: ../libempathy-gtk/empathy-chat.c:1056
+msgid "Insert Smiley"
+msgstr "أدرج التعابير المرسومة"
+
+#: ../libempathy-gtk/empathy-chat.c:1103
+msgid "_Check Word Spelling..."
+msgstr "_دقق الإملاء..."
+
+#: ../libempathy-gtk/empathy-chat.c:1558
+msgid "Connected"
+msgstr "متَّصل"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "_مسح"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "إتّ_صل"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "_موضوع جديد..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+msgid "Chat"
+msgstr "دردشة"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "م_علومات المراسل."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "Cu_t"
+msgstr "_قص"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "In_vite..."
+msgstr "ا_دعو..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Insert _Smiley"
+msgstr "أدرج تعبيرا ر_سوميا"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invitation _message:"
+msgstr "رسالة ال_دعوة:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+msgid "Invite"
+msgstr "استدعاء"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "ان_ضم الى جدبد..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Left"
+msgstr "نقل اللِّسان إلى اليسا_ر"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Move Tab _Right"
+msgstr "نقل اللِّسان إلى ال_يمين"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "Select who would you like to invite:"
+msgstr "اختر من تريد دعوته"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+msgid "You have been invited to join a chat conference."
+msgstr "لقد استُدعيت للانضمام إلى اجتماع دردشة. "
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "إ_ضافة مراسَل..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Add To Favorites"
+msgstr "أ_ضِف للمفضّلة"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Close"
+msgstr "أ_غلق"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_المحتويات"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Conversation"
+msgstr "ّم_حادثَة"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+msgid "_Copy"
+msgstr "ا_نسخ"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Detach Tab"
+msgstr "_فصل اللِّسان"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "_حرّر"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "م_ساعدة"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Next Tab"
+msgstr "اللِّسان ال_تَّالي"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Paste"
+msgstr "ا_لصق"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Previous Tab"
+msgstr "اللِّسان ال_سَّابق"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "_غرفة"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+msgid "_Show Contacts"
+msgstr "ا_عرض المراسلين"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:30
+msgid "_Tabs"
+msgstr "أ_لْسنة"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:31
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr "ا_عرض المحادثات السابقة"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Copy Link Address"
+msgstr "_نسخ عنوان الوصلة"
+
+#: ../libempathy-gtk/empathy-chat-view.c:449
+msgid "_Open Link"
+msgstr "_فتح الوصلة"
+
+#: ../libempathy-gtk/empathy-chat-window.c:699
+#, c-format
+msgid "Conversations (%d)"
+msgstr "محادثات (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1299
+msgid "Typing a message."
+msgstr "يتم كتابة رسالة"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "اسم"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "غرفة"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr "اتّصال تلقائي"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+msgid "Account:"
+msgstr "حساب:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "حرر الغرفة المفضلة"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "انضم للغرفة عند بدء التشغيل"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "انضم إلى غرفة الدردشة هاته حين يبدأ أومبثي وها أنت متصَل"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "ادر الغرف المفضّلة"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "الإ_سم:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "ال_خادم:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "ال_غُرفة:"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:176
+msgid "Personal Information"
+msgstr "المعلومات الشخصية"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+msgid "Edit Contact Information"
+msgstr "عدّل معلومات المراسل"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:182
+msgid "Contact Information"
+msgstr "معلومات المراسَل"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:277
+msgid "I would like to add you to my contact list."
+msgstr "أود إضافتك إلى قائمة مراسليَّ."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:301
+msgid "New Contact"
+msgstr "مراسَل جديد"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "_سأقرر لاحقاً"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "طلب تسجيل"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:197
+msgid "_Contact"
+msgstr "_مراسَل"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:201
+msgid "_Group"
+msgstr "م_جموعة"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr "_دردشة"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+msgid "Chat with contact"
+msgstr "دردشة مع المراسل"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "Infor_mation"
+msgstr "_معلومات"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "View contact information"
+msgstr "اعرض معلومات المراسَل"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Re_name"
+msgstr "أعِد ال_تسمية"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Rename"
+msgstr "أعِد التسمية"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+msgid "Edit the groups and name for this contact"
+msgstr "حرر المجموعات والاسم لهذا المرَاسل"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "_Remove"
+msgstr "أ_زل"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "Remove contact"
+msgstr "احذف المراسل"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "_Invite to Chat Room"
+msgstr "ادعو الى غرفة المحادثة"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "Invite to a currently open chat room"
+msgstr "استدعِ إلى غرفة دردشة مفتوحة حاليا"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "_Send File..."
+msgstr "أرسل م_لف..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "Send a file"
+msgstr "أرسل ملفا"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+msgid "View previous conversations with this contact"
+msgstr "اعرض المحادثات السابقة مع هذا المراسل"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "_Call"
+msgstr "_اتصال"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "Start a voice or video conversation with this contact"
+msgstr "ابدأ محادثة صوتية أو فيديوية مع هذا المراسل"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1469
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "آسف، ولكن لا أرغب بك في لائحة مراسليَّ بعد الآن."
+
+#: ../libempathy-gtk/empathy-contact-widget.c:688
+msgid "Select"
+msgstr "إنتقاء"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:698
+#: ../libempathy-gtk/empathy-main-window.c:609
+msgid "Group"
+msgstr "المجموعة"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>معلومات العميل</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>تفاصيل المراسل</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>مراسَل</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>المجموعات</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "الاسم المستعار:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "يوم الميلاد:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "العميل:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "معلومات المراسَل"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "البريد الإلكتروني:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "الإسم الكامل:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "اسم:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "معلومات م_طلوبة..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "نظام التَّشغيل:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"انْتقِ المجموعات التي تود أن يظهر فيها هذا المراسَل، يمكنك انتقاء أكثر من "
+"مجموعة أو لا مجموعة."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "الإصدارة:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "موقع الإنترنت:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:251
+msgid "Enter the new topic you want to set for this room:"
+msgstr "ّما الموضوع الذي تريد تحديده لهذه الغرفة؟"
+
+#: ../libempathy-gtk/empathy-group-chat.c:361
+#, c-format
+msgid "%s has joined the room"
+msgstr "أنضم %s الى غرفة"
+
+#: ../libempathy-gtk/empathy-group-chat.c:364
+#, c-format
+msgid "%s has left the room"
+msgstr "غادر %s الغرفة"
+
+#: ../libempathy-gtk/empathy-group-chat.c:445
+#, c-format
+msgid "Topic: %s"
+msgstr "الموضوع: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:574
+#, c-format
+msgid "Topic set to: %s"
+msgstr "الموضوع: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:576
+msgid "No topic defined"
+msgstr "لا موضوع معرف"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>موضوع:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "محادثة جماعية"
+
+#: ../libempathy-gtk/empathy-log-window.c:499
+msgid "Account"
+msgstr "حساب"
+
+#: ../libempathy-gtk/empathy-log-window.c:506
+msgid "Conversation"
+msgstr "محادثة"
+
+#: ../libempathy-gtk/empathy-log-window.c:516
+msgid "Date"
+msgstr "التاريخ"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "محادثات"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr "المحادثات السابقة"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "ابحث"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "_عن:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "غرف المحادثة"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "تصفّح:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"أدخِل هنا اسم الغرفة التي تود الانضمام إليها أو انقر غرفة واحدة أو أكثر في "
+"الائحة."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"أدخِل الخادم الذي يستضيف الغرفة، أو اتركه فارغا إذا كانت الغرفة على خادم "
+"الحساب الحالي"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "انضم"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "انضم لجديد"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "تح_ديث"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr "هذه الائحة تمثل كل الغرف المُستضافة على الخادم الذي أدخلت اسمه."
+
+#: ../libempathy-gtk/empathy-main-window.c:266
+msgid "Show and edit accounts"
+msgstr "اعرض و _حرّر الحسابات"
+
+#: ../libempathy-gtk/empathy-main-window.c:630
+msgid "Contact"
+msgstr "مراسَل"
+
+#: ../libempathy-gtk/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "_حرِّرْ الحساب"
+
+#: ../libempathy-gtk/empathy-main-window.c:896
+msgid "Network error"
+msgstr "خطأ شبكي"
+
+#: ../libempathy-gtk/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "فشل التحقق"
+
+#: ../libempathy-gtk/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "خطأ التشفير"
+
+#: ../libempathy-gtk/empathy-main-window.c:905
+msgid "Name in use"
+msgstr "الاسم مستخدم مسبقا"
+
+#: ../libempathy-gtk/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr "الشهادة غير متوفرة"
+
+#: ../libempathy-gtk/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr "الشّهادة غير موثوق بها"
+
+#: ../libempathy-gtk/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr "انتهت صلاحيّة الشهادة"
+
+#: ../libempathy-gtk/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr "الشهادة غير نشطة"
+
+#: ../libempathy-gtk/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr "عدم تطابق الشهادة مع اسم الخادم"
+
+#: ../libempathy-gtk/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr "عدم تطابق الشهادة مع التوقيع"
+
+#: ../libempathy-gtk/empathy-main-window.c:926
+msgid "Certificate self signed"
+msgstr "شهادة موقّعة ذاتيّاً"
+
+#: ../libempathy-gtk/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "خطأ في الشهادة"
+
+#: ../libempathy-gtk/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "خطأ مجهول"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "قائمة المراسَلين"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "السياق"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "إن_ضِم إلى المفضلين"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "أدر المفضلة"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "إظهار المراسلين ال_غير متَّصلين"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_حول"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_حسابات"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "م_حادثة جديدة..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "الم_علومات الشخصية"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "ال_تَّفضيلات"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "أ_نه"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "اتصال"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "هويّة المراسَل:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "محادثة جديدة"
+
+#: ../libempathy-gtk/empathy-preferences.c:247
+msgid "Language"
+msgstr "اللغة"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>المظهر</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>صوت</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>السّلوك</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>قائمة المراسَلين</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>فعل التهجئة للغات:</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>الخيارات</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>مرئي</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>قائمة اللغات الموجودة هنا لا تظهر إلا اللغات التي يوجد لها قاموس مركب."
+"</small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Automatically _connect on startup "
+msgstr "_اتَّصل آليا عند بدء التَّشغيل"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "الأفاتارات هي الصور التي اختار المستخدم والظاهرة في لائحة المراسَل"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Chat Th_eme:"
+msgstr "_سمة المحادثة:"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Display notifications when contacts come _online"
+msgstr "اعرض الاشعارات عندما يصبح المراسَلون متصلين "
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _away"
+msgstr "فعل الأصوات عندما أكون _بعيدا"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "Enable sounds when _busy"
+msgstr "فعل الأصوات عندما أكون مَ_شْغولاً"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "General"
+msgstr "عامّ"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Notifications"
+msgstr "التبليغات"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Preferences"
+msgstr "تفضيلات"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _avatars"
+msgstr "اعرض الأ_فاتارات"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show _smileys as images"
+msgstr "اظهر الصّور المتحرّكة كرسوم."
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Show co_mpact contact list"
+msgstr "إظهار _قائمة مضغوطة للمراسلين"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by _name"
+msgstr "رتّب بالإ_سم"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Sort by s_tate"
+msgstr "رتّب حسب ال_حالة"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Spell Checking"
+msgstr "مراجعة التهجئة"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "Themes"
+msgstr "السِمات"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_افتح غرف الدردشة الجديدة في نوافذ منفصلة"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "شغل صوت عند وصول الرسائل"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "ا_ستعمال لغرف المحادثة"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "الرسائل المخصصة..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "رسالة مخصّصة"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "الرسالة:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "احفظ الرّسالة"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "الحالة:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:229
+#, c-format
+msgid "%s went offline"
+msgstr "%s صار دون اتِّصال"
+
+#: ../libempathy-gtk/empathy-private-chat.c:243
+#, c-format
+msgid "%s has come online"
+msgstr "%s قام بالإتصال"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "كلمة"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "الإقتراحات للكلمة"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "مدقق الإملاء"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "الإقتراحات للكلمة:"
+
+#: ../libempathy-gtk/empathy-status-icon.c:369
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"رسالة جديدة من %s:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:434
+#, c-format
+msgid ""
+"Incoming call from %s:\n"
+"%s"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-status-icon.c:738
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "طُلِبَ التسجيل من %s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:741
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"رسالة: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "الحالة"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "إظهار _قائمة المراسلين"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:780
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%A·%d·%B·%Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:78
+msgid "Classic"
+msgstr "تقليدي"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:79
+msgid "Simple"
+msgstr "بسيط"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:80
+msgid "Clean"
+msgstr "نظيف"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:81
+msgid "Blue"
+msgstr "أزرق"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+#, fuzzy
+msgid "<b>Network</b>"
+msgstr "اسم"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+#, fuzzy
+msgid "<b>Servers</b>"
+msgstr "<b>إعدادات</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+#, fuzzy
+msgid "Charset:"
+msgstr "دردشة"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+#, fuzzy
+msgid "Network"
+msgstr "خطأ شبكي"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+#, fuzzy
+msgid "Network:"
+msgstr "خطأ شبكي"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+#, fuzzy
+msgid "Nickname:"
+msgstr "الإسم المستعار"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+#, fuzzy
+msgid "Password:"
+msgstr "كلمة الم_رور:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+#, fuzzy
+msgid "Quit message:"
+msgstr "رسالة مخصّصة"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+#, fuzzy
+msgid "Real name:"
+msgstr "أعِد التسمية"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:13
+#, fuzzy
+msgid "irc account settings"
+msgstr "ابق الإعدادات الحالية"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+#, fuzzy
+msgid "new server"
+msgstr "الخادم:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:512
+#, fuzzy
+msgid "Server"
+msgstr "الخادم:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:527
+#, fuzzy
+msgid "Port"
+msgstr "ال_منْفذ:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:540
+msgid "SSL"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+#, fuzzy
+msgid "Celtic"
+msgstr "تقليدي"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+#, fuzzy
+msgid "Croatian"
+msgstr "محادثة"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+#, fuzzy
+msgid "Nordic"
+msgstr "كلمة"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+#, fuzzy
+msgid "Persian"
+msgstr "الإصدارة:"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+#, fuzzy
+msgid "Western"
+msgstr "موقع الإنترنت:"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+#, fuzzy
+msgid "Vietnamese"
+msgstr "أعِد التسمية"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr "المراسَل الذي سيعرض في البريمج. فارغ يعني لم يتم عرض أي مراسَل. "
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "أمارة أفاتار المراسَل. إذا كانت فارغة فهذا يعني أن المراسَل بدون أفاتار."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "مكبّر الصوت"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "تكلم!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_معلومات"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "الوجود"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "اضبط وجودك"
+
+#: ../src/empathy.c:205
+msgid "- Empathy Instant Messenger"
+msgstr "- مرسال أمبثي"
+
+#~ msgid "Call from %s"
+#~ msgstr "مكالمة من %s"
+
+#~ msgid "_New Message..."
+#~ msgstr "_رسالة جديدة..."
+
+#~ msgid "New message"
+#~ msgstr "رسالة جديدة"
+
+#~ msgid "Disable"
+#~ msgstr "عطّل"
+
+#~ msgid "Edit Account _Details"
+#~ msgstr "حرّر تفاصيل الحساب"
+
+#~ msgid "gtk-cancel"
+#~ msgstr "gtk-cancel"
+
+#~ msgid "gtk-ok"
+#~ msgstr "gtk-ok"
+
+#~ msgid "Instant Messenger"
+#~ msgstr "مراسل فوري"
+
+#, fuzzy
+#~ msgid "Contact List - Empathy"
+#~ msgstr "إظهار _قائمة المراسلين"
+
+#, fuzzy
+#~ msgid "<b>Account</b>"
+#~ msgstr "الحساب"
+
+#~ msgid "Jabber"
+#~ msgstr "جَابّر"
+
+#, fuzzy
+#~ msgid ""
+#~ "<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+#~ "small>"
+#~ msgstr "<span size=\"smaller\">مثال: user@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Chat Room"
+#~ msgstr "نافذة المحادثة"
+
+#, fuzzy
+#~ msgid "<b>Languages</b>"
+#~ msgstr "<b>اللغات</b>"
+
+#, fuzzy
+#~ msgid "_Enable spell checking"
+#~ msgstr "إكمال التثبت من التهجئة"
+
+#, fuzzy
+#~ msgid "Clear List..."
+#~ msgstr " مسح قائمة المستندات الأخيرة؟"
+
+#, fuzzy
+#~ msgid "Are you sure you want to clear the list?"
+#~ msgstr "أمتأكد من أنك تريد مسح قائمة المواقع التي زرتها؟"
+
+#, fuzzy
+#~ msgid "Clear List"
+#~ msgstr " مسح قائمة المستندات الأخيرة؟"
+
+#~ msgid "Enter status message:"
+#~ msgstr "أدخل رسالة الحالة:"
+
+#, fuzzy
+#~ msgid "Status Message Presets"
+#~ msgstr ""
+#~ "قوبلت رسالة حالة GnuPG غير متوقعة:\n"
+#~ "\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "_Add to status message list"
+#~ msgstr "تأليف رد إلى القائمة البريديّة للرّسالة المنتقاة"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "مقطع صوتي لرسالة فورية جديدة"
+
+#, fuzzy
+#~ msgid "Normal"
+#~ msgstr "عادي"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "إ_نضمام"
+
+#, fuzzy
+#~ msgid "Active"
+#~ msgstr "نشط"
+
+#, fuzzy
+#~ msgid "Inactive"
+#~ msgstr "غير نشط"
+
+#, fuzzy
+#~ msgid "Error"
+#~ msgstr "خطأ"
+
+#, fuzzy
+#~ msgid "Participant"
+#~ msgid_plural "Participants"
+#~ msgstr[0] "مشارك إلزامي"
+#~ msgstr[1] ""
+#~ msgstr[2] ""
+#~ msgstr[3] ""
+
+#, fuzzy
+#~ msgid "No role"
+#~ msgstr "لا دور متوفر"
+
+#, fuzzy
+#~ msgid "Owner"
+#~ msgid_plural "Owners"
+#~ msgstr[0] "المالك"
+#~ msgstr[1] ""
+#~ msgstr[2] ""
+#~ msgstr[3] ""
+
+#, fuzzy
+#~ msgid "Member"
+#~ msgid_plural "Members"
+#~ msgstr[0] "عضو"
+#~ msgstr[1] ""
+#~ msgstr[2] ""
+#~ msgstr[3] ""
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "لا تاريخ"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "خطأ مجهول"
+
+#, fuzzy
+#~ msgid "Joining the chatroom was canceled."
+#~ msgstr "حجم نافذة المحادثة"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "غير متوفّر"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "“%s” رفض الإتصال"
+
+#, fuzzy
+#~ msgid "Server address could not be resolved."
+#~ msgstr "خادم X الموجود في إعداد جي دي ام غير موجود."
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "انتهت الفرصة الزمنية لتنشيط Moniker"
+
+#, fuzzy
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "الملف الذي تحاول فتحه ليس عاديا."
+
+#, fuzzy
+#~ msgid "This feature is unavailable."
+#~ msgstr "هل هذا العمل مستمر؟"
+
+#, fuzzy
+#~ msgid "This feature is unauthorized."
+#~ msgstr "هل هذا العمل مستمر؟"
+
+#~ msgid "Home"
+#~ msgstr "المنزل"
+
+#, fuzzy
+#~ msgid "Couldn't send message!"
+#~ msgstr "إرسال هذه الرسالة"
+
+#, fuzzy
+#~ msgid "Connection could not be opened"
+#~ msgstr "لم يمكن فتح الفيلم."
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "هل هذا العمل مستمر؟"
+
+#, fuzzy
+#~ msgid "Stop"
+#~ msgstr "توقّف"
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "_قطع الاتصال"
+
+#~ msgid "Connect"
+#~ msgstr "إتَّصال"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "فشل تسجيل الحساب"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "فشل تسجيل الحساب"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "فشل تسجيل الحساب"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "الرجاء إدخال كلمة السِّر:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr "أكتب إسما جديدا للشعار المعروض:"
+
+#, fuzzy
+#~ msgid "Information requested, please wait..."
+#~ msgstr "جاري تدريب داشر·-·الرجاء الإنتظار"
+
+#, fuzzy
+#~ msgid "To summarize:"
+#~ msgstr "مسجل ل %s"
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "طلب غير صحيح"
+#~ msgstr[1] ""
+
+#, fuzzy
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "طلب تحديث إجتماع"
+#~ msgstr[1] ""
+
+#, fuzzy
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "رسالة النّادل:"
+#~ msgstr[1] ""
+
+#, fuzzy
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "خطأ"
+#~ msgstr[1] ""
+
+#, fuzzy
+#~ msgid "Your invitation has been declined"
+#~ msgstr "تمّ تغيير كلمة السر."
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "اقبل"
+
+#, fuzzy
+#~ msgid "Decline"
+#~ msgstr "رفض"
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "هل تريد إزالة المراسَل\n"
+#~ "%s\n"
+#~ "من قائمة مراسَليك؟"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr "أكتب إسما جديدا للشعار المعروض:"
+
+#~ msgid "Unsorted"
+#~ msgstr "غير مصنّف"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "خطأ مجهول"
+
+#, fuzzy
+#~ msgid "%s would like to send you a file."
+#~ msgstr "هل تريد تحميل ملفات modmap ؟"
+
+#, fuzzy
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "هل تريد تحميل ملفات modmap ؟"
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "إنتقاء ملف"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "إتَّصال"
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "إتَّصال"
+
+#, fuzzy
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "انشاء موضوع جديد"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "الفتح بـاستخدام"
+
+#~ msgid "List the available accounts"
+#~ msgstr "سرد الحسابات المتوفرة"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "إسم-الحساب"
+
+#, fuzzy
+#~ msgid "No accounts available."
+#~ msgstr "لا وجود لوصف."
+
+#~ msgid "Available accounts:"
+#~ msgstr "الحسابات المتوفرة:"
+
+#~ msgid "[default]"
+#~ msgstr "[الإفتراض]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "لا حساب بإسم '%s'."
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "التاريخ"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "جاري تدريب داشر·-·الرجاء الإنتظار"
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "الافتراضي"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "نافذة المحادثة"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "سيضاف %s إلى قائمة مراسليك."
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "سيضاف %s إلى قائمة مراسليك."
+
+#, fuzzy
+#~ msgid "Show"
+#~ msgstr "عرض"
+
+#, fuzzy
+#~ msgid "Contact has been removed"
+#~ msgstr "تمّ تغيير كلمة السر."
+
+#, fuzzy
+#~ msgid "Subject: %s"
+#~ msgstr "<b>الموضوع:</b>"
+
+#, fuzzy
+#~ msgid "New subscription request from %s"
+#~ msgstr "إنشاء طلب إجتماع جديد"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr ""
+#~ "هل تريد إزالة المراسَل\n"
+#~ "%s\n"
+#~ "من قائمة مراسَليك؟"
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr ""
+#~ "هل تريد إزالة المراسَل\n"
+#~ "%s\n"
+#~ "من قائمة مراسَليك؟"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "الرجاء إدخال كلمة سر NNTP لـ %s@%s"
+
+#, fuzzy
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "تم الاتصال مع %s باستخدام %s"
+
+#~ msgid "Remember Password?"
+#~ msgstr "أتذكَّر كلمة السِّر؟"
+
+#, fuzzy
+#~ msgid "Do not show this again"
+#~ msgstr "لا تظهر هذا الحوار مجدداً"
+
+#, fuzzy
+#~ msgid "Could not display the help contents."
+#~ msgstr "تعذّر عرض المساعدة لتوتم"
+
+#, fuzzy
+#~ msgid "Try again later."
+#~ msgstr "رجاء حاول مرة أخرى."
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "دردشة"
+
+#, fuzzy
+#~ msgid "Contact goes offline"
+#~ msgstr "خطأ: مستخدم غير متصل"
+
+#, fuzzy
+#~ msgid "Contact goes online"
+#~ msgstr "عنوان البريد الالكتروني للموصول"
+
+#, fuzzy
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "هل تريد الحفاظ على هذه الاستبانة؟"
+
+#, fuzzy
+#~ msgid "File Transfer Request"
+#~ msgstr "طلب تحديث إجتماع"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "إسم الملف:"
+
+#, fuzzy
+#~ msgid "File size:"
+#~ msgstr "حجم الملف:"
+
+#, fuzzy
+#~ msgid "Not supported yet"
+#~ msgstr "البروتوكول غير مدعوم"
+
+#~ msgid "_Accept"
+#~ msgstr "م_وافقة"
+
+#~ msgid "_Deny"
+#~ msgstr "_رفض"
+
+#, fuzzy
+#~ msgid "-"
+#~ msgstr "-"
+
+#, fuzzy
+#~ msgid "<b>About</b>"
+#~ msgstr "_حول"
+
+#, fuzzy
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "اظهار التفاصيل"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>الخيارات</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">مثال: user@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "ويندوزNT"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "إ_ضافة مراسَل..."
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "اليوم عند %-I:%M %p"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "إ_عداد"
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "على هذا الحاسوب"
+
+#~ msgid "Country:"
+#~ msgstr "البلد:"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "تحرير المعارف %s"
+
+#~ msgid "Edit Groups"
+#~ msgstr "تحرير المجموعات"
+
+#, fuzzy
+#~ msgid "ID:"
+#~ msgstr "الهوية"
+
+#~ msgid "Name:"
+#~ msgstr "الإسم:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "اظهار التفاصيل"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "جاري تسجيل الحساب"
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "ّما اللَّقب الذي تريد إطلاقه على هذا المراسل؟"
+
+#, fuzzy
+#~ msgid "Use system pro_xy"
+#~ msgstr "_لا شيء (يستخدم تيمة النظام)"
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "ما إسم المستخدم الذي تريد استعماله؟"
+
+#, fuzzy
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "لا يمكنك فتح هذا الملف."
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "اتّ_صل"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "الوصف:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_قطع الإتصال"
+
+# To Arabeyes.org translators, from Abdulaziz (08/04/2004):
+# We have no standard word for User ID (or I couldnt find one).
+# This word should not be translated as two seperate
+# words because the English equivalents are never
+# used seperately in this context.
+# I suggest permanently settling on one of the following
+# and adding it to the Qamoose:
+# هوية، رمز، بطاقة، مفتاح، شارة
+# I will leave this one up to the superiors
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr "أدخل هوية المستخدم الذي تَود أن ترسل له رسالة دردشة."
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "الم_جموعة:"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "الك_نية:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "كلمة الس_ر..."
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "إ_ستلم المكالمة"
+
+#, fuzzy
+#~ msgid "_Subscribe"
+#~ msgstr "_إشتراك"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "موقع الإنترنت:"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Gossip"
+#~ msgstr "كُسِّب"
+
+#, fuzzy
+#~ msgid "Group:"
+#~ msgstr "المجموعة:"
+
+#, fuzzy
+#~ msgid "Web Site:"
+#~ msgstr "موقع الإنترنت"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "مُرفق للإضافة."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "إدراج إس_م المستخدم"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "حجم نافذة المحادثة"
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "نافذة المحادثة"
+
+#~ msgid "Preset status messages."
+#~ msgstr "رسائل حالة مضبوطة مسبّقا."
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "سيضاف %s إلى قائمة مراسليك."
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "هوية جَابّ_ر للمراسَل الجديد:"
+
+#, fuzzy
+#~ msgid "Show accounts and pending connections"
+#~ msgstr "لم يمكن الإتِّصال"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "الرجاء إدخال كلمة السِّر:"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/_معلومات المراسَل"
+
+#, fuzzy
+#~ msgid "/Re_name Contact"
+#~ msgstr "/إعادة تسمية الم_راسَل"
+
+#, fuzzy
+#~ msgid "/_Edit Groups"
+#~ msgstr "/_تحرير المجموعات"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "ّم_حادثَة"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "الرجاء إدخال كنية جديدة للمراسَل\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "تحرير المجموعات لـ %s"
+
+#~ msgid "Registering account"
+#~ msgstr "جاري تسجيل الحساب"
+
+#, fuzzy
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>المعلومات قيد الطلب، الرجاء الإنتظار...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">مثال: user@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "هل لديك حساب عند خادم \"جَابّر\"؟"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr ""
+#~ "الرجاء إدخال كنية جديدة للمراسَل\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "الرجاء إدخال كنية جديدة للمراسَل\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "تمَّ الضبط"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "كُسِّب عميلٌ حَديث لنظام المراسلة الفورية \"جَابّر\".\n"
+#~ "\n"
+#~ "سيساعدك هذا المُعاون على تهيئَة كُسِّب و الإتِّصال بخادم \"جَابّر\" المفضَّل لديك.\n"
+#~ "\n"
+#~ "للبدء، أنقر \"إلى الأمام\"."
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "سيتم·إرسال·طلب للإشتراك بتبليغات وجود المستخدم. سيظهر المستخدم دائماً على "
+#~ "أنَّه \"غير متَّصل\" في قائمة مراسليك. إلى·أن·تتمَّ·الموافقة·على·هذا·الطَّلب."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "في أيّ مجموعة تريد وضع هذا المراسَل؟"
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "جاري تسجيل الحساب"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "الم_ورد:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "أهلاً بكم في كُسِّب"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "ما نظام المراسلة الفورية الذي يستعمله المراسل؟"
+
+#~ msgid "What is your name?"
+#~ msgstr "ما إسمك؟"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "أي خادم تريد أن تستعمل؟"
+
+#~ msgid "What username do you use?"
+#~ msgstr "ما إسم المستخدم الذي تستعمله؟"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "ما إسم المستخدم الذي تريد استعماله؟"
+
+#, fuzzy
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "في أيّ مجموعة تريد وضع هذا المراسَل؟"
+
+#, fuzzy
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "كُسِّب الآن مهيَّئ بشكلٍ مناسبٍ لنظامك.\n"
+#~ "يمكنك تغيير تعيينات حسابك لاحقا، بإختيار العنصر>إتَّصل... من قائِمة دردشة-."
+
+#, fuzzy
+#~ msgid "Your Account"
+#~ msgstr "حساب جَابّر"
+
+#~ msgid "Your Identity"
+#~ msgstr "هويَّتك"
+
+#~ msgid "_Hide Contact List"
+#~ msgstr "إ_خفاء قائمة المراسلين"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "لا"
+
+#~ msgid "_Search..."
+#~ msgstr "_بحث..."
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "نعم"
diff --git a/trunk/po/az.po b/trunk/po/az.po
new file mode 100644
index 000000000..d722dd0b6
--- /dev/null
+++ b/trunk/po/az.po
@@ -0,0 +1,1136 @@
+# gossip.HEAD.po faylının Azərbaycan Dilinə tərcüməsi
+# gossip.HEAD.po faylının Azərbaycan dilinə tərcüməsi
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# Mətin Əmirov <metin@karegen.com>, 2003
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2003-10-19 20:34+0300\n"
+"Last-Translator: Mətin Əmirov <metin@karegen.com>\n"
+"Language-Team: Azərbaycan Dili <gnome@azətt.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.1\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "İsmarış:"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Compact contact list"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable spell checker"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show hint about closing the main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether to show the contact list in compact mode or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr ""
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr ""
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr ""
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+msgid "Show and edit accounts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "Bağlan"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List - Empathy"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "Bağlan"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Gedişatlar"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+#, fuzzy
+msgid "_Accounts"
+msgstr "_Gedişatlar"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "Bağlan"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "Çı_x"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#, fuzzy
+msgid "_Preferences"
+msgstr "Qurğular"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "Çı_x"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+#, fuzzy
+msgid "Status"
+msgstr "<b>Vəziyyət:</b>"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr ""
+"Vasif İsmailoğlu\n"
+"Mətin Əmirov"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+msgid "Disable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "_Gedişatlar"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "_Gedişatlar"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+#, fuzzy
+msgid "Accounts"
+msgstr "_Gedişatlar"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "_Gedişatlar"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "_Gedişatlar"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>Ad:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+msgid "Cr_eate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "Ad:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+msgid "_Type:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "_Şifrə:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+msgid "Use encryption (SS_L)"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "Üstünlük:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Verici:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+#, fuzzy
+msgid "Disconnected"
+msgstr "_Ayır"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+#, fuzzy
+msgid "Connected"
+msgstr "Bağlan"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+msgid "Cu_t"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+msgid "In_vite..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "İsmarış:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "İsmarış:"
+msgstr[1] "İsmarış:"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+msgid "Chat Room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "Bağlan"
+msgstr[1] "Bağlan"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "Bağlan"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+msgid "_Group"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "Chat with contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "Bağlan"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "View contact information"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "Ad:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Rename"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "Edit the groups and name for this contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "Remove contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "_Invite to Chat Room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "İsmarış:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "View previous conversations with this contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "<b>Ad:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>Ad:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Ad:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "<b>Ad:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+#, fuzzy
+msgid "<b>Languages</b>"
+msgstr "<b>Ad:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "Bağlan"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>Ad:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+msgid "Notifications"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "Qurğular"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr ""
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+msgid "Clear List..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+msgid "Are you sure you want to clear the list?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+#, fuzzy
+msgid "Enter status message:"
+msgstr "İsmarış:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "İsmarış:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "İsmarış:"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+msgid "Clean"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr ""
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "İsmarış:"
+
+#, fuzzy
+#~ msgid "Active"
+#~ msgstr "_Gedişatlar"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "Namə'lum xəta"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Namə'lum xəta"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Namə'lum xəta"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "Bağlan"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "Bağlan"
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "_Gedişatlar"
+
+#~ msgid "Home"
+#~ msgstr "Ev"
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "_Ayır"
+
+#~ msgid "Connect"
+#~ msgstr "Bağlan"
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "İsmarış:"
+#~ msgstr[1] "İsmarış:"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Ad:"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "Bağlan"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "Bağlan"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Namə'lum xəta"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "Bağlan"
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Bağlan"
+
+#~ msgid "[default]"
+#~ msgstr "[ön qurğulu]"
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "[ön qurğulu]"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Ad:</b>"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "Ad:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "_Verici:"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Ad:</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>Ad:</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "Bağlan"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "_Gedişatlar"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "Bağlan"
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Bağlan"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "Bağlan"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "Bağlan"
+
+#~ msgid "Email:"
+#~ msgstr "ePoçt:"
+
+#~ msgid "Name:"
+#~ msgstr "Ad:"
+
+#~ msgid "Version:"
+#~ msgstr "Buraxılış:"
+
+#, fuzzy
+#~ msgid "_Birthday:"
+#~ msgstr "_Vacibiyyət:"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Bağlan"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Buraxılış:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Ayır"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "ePoçt:"
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "Üstünlük:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "Ad:"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "Ad:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Şifrə:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "İsmarış:"
+
+#, fuzzy
+#~ msgid "Preset status messages"
+#~ msgstr "İsmarış:"
+
+#, fuzzy
+#~ msgid "Preset status messages."
+#~ msgstr "İsmarış:"
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Ad:"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "Üstünlük:"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Xeyir"
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Bəli"
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "Üstünlük:"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "Buraxılış:"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Qurğular"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "Mənbə:"
+
+#~ msgid "To:"
+#~ msgstr "Hədəf:"
+
+#~ msgid "C_onnect"
+#~ msgstr "_Bağlan"
+
+#~ msgid "_Add"
+#~ msgstr "Ə_lavə et"
+
+#, fuzzy
+#~ msgid "About Gossip"
+#~ msgstr "Gossip"
+
+#, fuzzy
+#~ msgid "translator_credits_old"
+#~ msgstr ""
+#~ "Vasif İsmailoğlu <linuxaz@azerimail.net>\n"
+#~ "Mətin Əmirov <metin@karegen.com>"
+
+#~ msgid "Others"
+#~ msgstr "Başqaları"
+
+#~ msgid "minutes"
+#~ msgstr "dəqiqə"
diff --git a/trunk/po/bg.po b/trunk/po/bg.po
new file mode 100644
index 000000000..9e56d75d8
--- /dev/null
+++ b/trunk/po/bg.po
@@ -0,0 +1,1406 @@
+# Bulgarian translation of empathy po-file.
+# Copyright (C) 2004, 2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the empathy package.
+# Yasen Pramatarov <yasen@lindeas.com>, 2004.
+# Alexander Shopov <ash@contact.bg>, 2007.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip trunk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-11-26 08:23+0200\n"
+"PO-Revision-Date: 2007-11-26 07:45+0200\n"
+"Last-Translator: Alexander Shopov <ash@contact.bg>\n"
+"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Бързи съобщения с Empathy"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Изпращане и получаване на бързи съобщения"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Новите разговори да се отварят в отделни прозорци."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "Графична тема за прозореца за разговори"
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Checks if Salut account is created"
+msgstr "Проверка дали е създаден абонамент за Salut"
+
+#: ../data/empathy.schemas.in.h:4
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Списък от двубуквените съкращения на езиците с проверка за правопис (напр. "
+"bg, en, ru)."
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Compact contact list"
+msgstr "Стегнат списък с контакти"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Contact list sort criterium"
+msgstr "Критерий за подребдата на списъка с контактите"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Default directory to select an avatar image from"
+msgstr "Стандартна папка, в която да се търсят изображения за аватари"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable popup when contact is available"
+msgstr "Известяване с прозорец при появата на контакт"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when away"
+msgstr "Със звуци в състояние „_Отсъстващ“"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable sound when busy"
+msgstr "Със звуци в състояние „_Зает“"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable spell checker"
+msgstr "Да се ползва проверка на правописа"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide main window"
+msgstr "Скриване на основния прозорец"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Hide the main window."
+msgstr "Скирване на основния прозорец."
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Open new chats in separate windows"
+msgstr "Отваряне на разговорите в отделни прозорци"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show avatars"
+msgstr "Показване на аватари"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show hint about closing the main window"
+msgstr "Показване на съвет за затваряне на основния прозорец"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Show offline contacts"
+msgstr "Показване на изключените контакти"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Spell checking languages"
+msgstr "Езици с проверка на правописа"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Последната папка, от която е взето изображение за аватар."
+
+#: ../data/empathy.schemas.in.h:20
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Темата, която ще се ползва за прозорците за разговори."
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use graphical smileys"
+msgstr "Изображения за емотикони"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use notification sounds"
+msgstr "Използване на звуци за уведомяване"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "Use theme for chat rooms"
+msgstr "Тема за прозорците за разговори"
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not the Salut account has been created on the first empathy run."
+msgstr "Дали при първото стартиране на Empathy е създаден абонамент за Salut."
+
+#: ../data/empathy.schemas.in.h:25
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Дали да се прави проверка на правописа на въведения текст спрямо избраните "
+"езици."
+
+#: ../data/empathy.schemas.in.h:26
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Дали емотиконите да се преобразуват от ASCII в картинки."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Дали пристигането на съобщения да се известява със звук."
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to play sounds when away."
+msgstr "Дали в състояние „Отсъствам“ да се ползват звуци."
+
+#: ../data/empathy.schemas.in.h:29
+msgid "Whether or not to play sounds when busy."
+msgstr "Дали в състояние „Зает“ да се ползват звуци."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Дали прозорец да известява за появата на контакт."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Дали да се показват аватари в списъците за контакти и прозорците за "
+"разговори."
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+"Дали в списъка да се показват контактите, които в момента не са включени."
+
+#: ../data/empathy.schemas.in.h:33
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Дали да се показва съобщение за затварянето на основния прозорец при "
+"натискане на бутона „х“ в заглавната лента."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Дали да се ползва стегнат изглед за списъка с контактите."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Дали да се ползва тема за стаите за разговори."
+
+#: ../data/empathy.schemas.in.h:36
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Кой критерий да се използва за подредбата на списъка с контактите. "
+"Стандартната стойност е „name“ - подредба по име. Стойност „state“ означава "
+"подреждане по състояние."
+
+#: ../libempathy/empathy-presence.c:185 ../libempathy/empathy-presence.c:285
+msgid "Offline"
+msgstr "Изключен"
+
+#: ../libempathy/empathy-presence.c:275
+msgid "Available"
+msgstr "На линия"
+
+#: ../libempathy/empathy-presence.c:277
+msgid "Busy"
+msgstr "Зает"
+
+#: ../libempathy/empathy-presence.c:280
+msgid "Away"
+msgstr "Отсъстващ"
+
+#: ../libempathy/empathy-presence.c:282
+msgid "Hidden"
+msgstr "Скрит"
+
+#: ../libempathy/empathy-tp-contact-list.c:729 ../src/empathy.c:151
+msgid "People nearby"
+msgstr "Хора наблизо"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Тази програма (Empathy) е свободен софтуер. Можете да я разпространявате и/"
+"или променяте според условията на версия 2 или по-висока (по ваш избор) на "
+"Общия публичен лиценз на GNU, който е публикуван от Фондацията за свободен "
+"софтуер."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Тази програма (Empathy) се разпространява с надеждата да е полезна, но БЕЗ "
+"НИКАКВА ГАРАНЦИЯ, дори и подразбиращата се ПРИГОДНОСТ или ГОДНОСТ ЗА "
+"КОНКРЕТНА УПОТРЕБА. За подробности прегледайте Общия публичен лиценз на GNU."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Трябва да сте получили копие на Общия публичен лиценз на GNU заедно с тази "
+"програма. Ако не се сте - пишете на Фондацията за свободен софтуер на "
+"адрес:\n"
+"Free Software Foundation, Inc., 51 Franklin Street,\n"
+"Fifth Floor, Boston, MA 02110-1301, USA. "
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Програма за бързи съобщения за GNOME"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Ясен Праматаров <yasen@lindeas.com>\n"
+"Александър Шопов <ash@contact.bg>\n"
+"\n"
+"Проектът за превод на GNOME има нужда от подкрепа.\n"
+"Научете повече за нас на http://gnome.cult.bg\n"
+"Докладвайте за грешки на http://gnome.cult.bg/bugs"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "Всички"
+
+#: ../libempathy-gtk/empathy-account-widget-generic.c:146
+#: ../libempathy-gtk/empathy-account-widget-generic.c:208
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>За напреднали</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Изчистване на полето и забравяне на паролата."
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+msgid "Login I_D:"
+msgstr "_Идентификатор:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+msgid "Pass_word:"
+msgstr "П_арола:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+msgid "Priority:"
+msgstr "Приоритет:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Reso_urce:"
+msgstr "_Ресурс:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Use encryption (SS_L)"
+msgstr "Използване на _шифриране (SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+msgid "_Port:"
+msgstr "_Порт:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Сървър:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "jabber account settings"
+msgstr "Настройки на абонамент за jabber"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "Настройки на абонамент за msn"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "_Е-поща:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Лично име:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_Идентификатор по Jabber:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "_Фамилно име:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Псевдоним:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "Име за п_убликуване:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "Настройки на абонамент за Salut"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:218
+msgid "Disable"
+msgstr "Изключване"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:221
+msgid "Enable"
+msgstr "Включване"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:256
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"За да добавите нов абонамент, натиснете бутона „Добавяне“. Ще се появи нов "
+"запис, който можете да настроите."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:260
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"За да добавите нов абонамент, трябва да имате модул, който поддръжа неговия "
+"протокол."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:267
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Не е избран абонамент</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:268
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Ако не искате да добавяте нов абонамент, натиснете върху абонамента, който "
+"искате да настроите, в списъка отляво."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:274
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Няма настроени абонаменти</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:401
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Абонаменти"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:898
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Ще изтриете абонамента „%s“!\n"
+"Искате ли да продължите?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:904
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Никои придналежащи на този абонамент разговори или стаи НЯМА да бъдат "
+"премахнати.\n"
+"\n"
+"Те ще бъдат достъпни, ако решите да добавите отново този абонамент."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Нов абонамент</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Настройки</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "_Създаване"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"За да добавите нов абонамент, натиснете бутона „Добавяне“. Ще се появи нов "
+"запис, който можете да настроите.\n"
+"\n"
+"Ако не искате да добавяте нов абонамент, натиснете върху абонамента, който "
+"искате да настроите, в списъка отляво."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Вид:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:448
+msgid "Select Your Avatar Image"
+msgstr "Избор на изображение за аватар"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:451
+msgid "No Image"
+msgstr "Без изображение"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:511
+msgid "Images"
+msgstr "Изображения"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:515
+msgid "All Files"
+msgstr "Всички файлове"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Натиснете за увеличаване"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+msgid "Call"
+msgstr "Обаждане"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "Вход"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "Заглушаване"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "Изход"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "Изпращане на видео"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Volume"
+msgstr "Сила на звука"
+
+#: ../libempathy-gtk/empathy-chat.c:329
+msgid "Disconnected"
+msgstr "Изключен"
+
+#: ../libempathy-gtk/empathy-chat.c:449
+msgid "offline"
+msgstr "изключен"
+
+#: ../libempathy-gtk/empathy-chat.c:452
+msgid "invalid contact"
+msgstr "грешен контакт"
+
+#: ../libempathy-gtk/empathy-chat.c:455
+msgid "permission denied"
+msgstr "липсват права"
+
+#: ../libempathy-gtk/empathy-chat.c:458
+msgid "too long message"
+msgstr "прекалено дълго съобщение"
+
+#: ../libempathy-gtk/empathy-chat.c:461
+msgid "not implemented"
+msgstr "не е реализирано"
+
+#: ../libempathy-gtk/empathy-chat.c:464
+msgid "unknown"
+msgstr "неизвестна грешка"
+
+#: ../libempathy-gtk/empathy-chat.c:468
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Грешка при изпращането на съобщението „%s“: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:925
+msgid "Insert Smiley"
+msgstr "Вмъкване на емотикон"
+
+#: ../libempathy-gtk/empathy-chat.c:972
+msgid "_Check Word Spelling..."
+msgstr "_Проверка на правопис..."
+
+#: ../libempathy-gtk/empathy-chat.c:1397
+msgid "Connected"
+msgstr "Свързан"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Изчистване на прозореца"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "_Обаждане"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "_Смяна на темата..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+msgid "Chat"
+msgstr "Разговор"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "_Данни за контакта"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "Cu_t"
+msgstr "От_рязване"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "In_vite..."
+msgstr "П_окана..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Insert _Smiley"
+msgstr "_Вмъкване на емотикон"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invitation _message:"
+msgstr "_Съобщение за поканата:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+msgid "Invite"
+msgstr "Покана"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Влизане в _нова..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Left"
+msgstr "Преместване на подпрозореца _наляво"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Move Tab _Right"
+msgstr "Преместване на подпрозореца _надясно"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "Select who would you like to invite:"
+msgstr "Изберете, кого ще поканите:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+msgid "You have been invited to join a chat conference."
+msgstr "Поканени сте да се присъедините към конферентен разговор."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "_Добавяне на контакт..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Add To Favorites"
+msgstr "_Добавяне към отметките..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Close"
+msgstr "_Затваряне"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+msgid "_Conversation"
+msgstr "_Разговор"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Copy"
+msgstr "_Копиране"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+msgid "_Detach Tab"
+msgstr "_Отделяне на подпрозореца"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "_Редактиране"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+msgid "_Next Tab"
+msgstr "_Следващ подпрозорец"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+msgid "_Paste"
+msgstr "_Поставяне"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Previous Tab"
+msgstr "_Предишен подпрозорец"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "_Стая:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Show Contacts"
+msgstr "_Показване на списъка с контакти"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+msgid "_Tabs"
+msgstr "_Страници"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr "_Преглед на предишни разговори"
+
+#: ../libempathy-gtk/empathy-chat-view.c:468
+msgid "_Copy Link Address"
+msgstr "_Копиране на адреса"
+
+#: ../libempathy-gtk/empathy-chat-view.c:476
+msgid "_Open Link"
+msgstr "_Отваряне на адреса"
+
+#: ../libempathy-gtk/empathy-chat-view.c:754
+msgid "%A %d %B %Y"
+msgstr "%d.%m.%Y, %A"
+
+#: ../libempathy-gtk/empathy-chat-window.c:695
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Разговори (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1281
+msgid "Typing a message."
+msgstr "Пише съобщение."
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "Име"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "Стая"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr "Автоматично свързване"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Абонамент:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Редактиране на стаите в отметките"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "_Автоматично влизане в стаи при стартиране"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Влизане в тази стая при стартиране на Empathy, ако сте свързани"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Управление на стаите в отметките"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Име:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "_Сървър:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Стая:"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:176
+msgid "Personal Information"
+msgstr "Лични данни"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+msgid "Edit Contact Information"
+msgstr "Редактиране на данните за контакта"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:182
+msgid "Contact Information"
+msgstr "Данни за контакта"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:277
+msgid "I would like to add you to my contact list."
+msgstr ""
+"bg: Искам да ви добавя към списъка си с контакти.\n"
+"en: I would like to add you to my contact list."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:301
+msgid "New Contact"
+msgstr "Нов контакт"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Отлагане на _решението"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Искане за записване"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:198
+msgid "_Contact"
+msgstr "_Контакт"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:202
+msgid "_Group"
+msgstr "_Група"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr "_Разговор"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+msgid "Chat with contact"
+msgstr "Разговор с контакт"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "Infor_mation"
+msgstr "_Данни за контакта"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "View contact information"
+msgstr "Данни за контакта"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Re_name"
+msgstr "_Преименуване"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Rename"
+msgstr "Преименуване"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+msgid "Edit the groups and name for this contact"
+msgstr ""
+"Редактиране на името и групите на този контакт\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "_Remove"
+msgstr "_Премахване"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "Remove contact"
+msgstr "Премахване на контакт"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "_Invite to Chat Room"
+msgstr "_Пращане на покана в стая за рзговор"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "Invite to a currently open chat room"
+msgstr "Изпращане на покана за текущо отворена стая за разговор"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "_Send File..."
+msgstr "_Изпращане на файл..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "Send a file"
+msgstr "Изпращане на файл"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+msgid "View previous conversations with this contact"
+msgstr "Разглеждане на предишните разговори с този контакт"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "_Call"
+msgstr "_Разговор"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "Start a voice or video conversation with this contact"
+msgstr "Начало на гласова или видео връзка с този контакт"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1423
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr ""
+"bg: Съжалявам, вече не желая да сте в списъка ми с контакти.\n"
+"en: Sorry, I don't want you in my contact list anymore."
+
+#: ../libempathy-gtk/empathy-contact-widget.c:662
+msgid "Select"
+msgstr "Избор"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:672
+#: ../libempathy-gtk/empathy-main-window.c:608
+msgid "Group"
+msgstr "Група"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Данни за клиента</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Данни за контакта</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Контакт</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Групи</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Псевдоним:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Рожден ден:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Клиент:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Данни за контакта"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "Е-поща:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Пълно име:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "Идентификатор:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "Данните са поискани..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "ОС:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Изберете групите, в които да се появава контакта. Можете да изберете 0 или "
+"повече групи за контакт."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Версия:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "Интернет страница:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:254
+msgid "Enter the new topic you want to set for this room:"
+msgstr "Въведете новата тема за тази стая:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:367
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s влезе в стаята"
+
+#: ../libempathy-gtk/empathy-group-chat.c:370
+#, c-format
+msgid "%s has left the room"
+msgstr "%s излезе от стаята"
+
+#: ../libempathy-gtk/empathy-group-chat.c:450
+#, c-format
+msgid "Topic: %s"
+msgstr "Тема: „%s“"
+
+#: ../libempathy-gtk/empathy-group-chat.c:572
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Темата вече е: „%s“"
+
+#: ../libempathy-gtk/empathy-group-chat.c:574
+msgid "No topic defined"
+msgstr "Не е зададена тема"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Тема:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Разговор в група"
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+msgid "Account"
+msgstr "Абонамент"
+
+#: ../libempathy-gtk/empathy-log-window.c:504
+msgid "Conversation"
+msgstr "Разговор"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+msgid "Date"
+msgstr "Дата"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "Разговори"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr "Предишни разговори"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "Търсене"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "_За:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "Стаи за разговор"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Избор:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Въведете името на стаята, в която да влезете, или натиснете една или повече "
+"стаи от списъка."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Попълнете сървъра, на който е стаята. Ако тя е на сървъра на текущия "
+"абонамент, оставете полето празно."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Влизане"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Влизане в нова"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "_Обновяване"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"Този списък показва всички стаи, които се намират на съвръра, към който се "
+"включихте."
+
+#: ../libempathy-gtk/empathy-main-window.c:265
+msgid "Show and edit accounts"
+msgstr "Показване и редактиране на абонаменти"
+
+#: ../libempathy-gtk/empathy-main-window.c:629
+msgid "Contact"
+msgstr "Контакт"
+
+#: ../libempathy-gtk/empathy-main-window.c:812
+msgid "Edit Account _Details"
+msgstr "_Редактиране настройките на абонамент"
+
+#: ../libempathy-gtk/empathy-main-window.c:895
+msgid "Network error"
+msgstr "Мрежова грешка"
+
+#: ../libempathy-gtk/empathy-main-window.c:898
+msgid "Authentication failed"
+msgstr "Неуспешно идентифициране"
+
+#: ../libempathy-gtk/empathy-main-window.c:901
+msgid "Encryption error"
+msgstr "Грешка в шифрирането"
+
+#: ../libempathy-gtk/empathy-main-window.c:904
+msgid "Name in use"
+msgstr "Името е заето"
+
+#: ../libempathy-gtk/empathy-main-window.c:907
+msgid "Certificate not provided"
+msgstr "Не е предоставен сертификат"
+
+#: ../libempathy-gtk/empathy-main-window.c:910
+msgid "Certificate untrusted"
+msgstr "Сертификатът не е доверен"
+
+#: ../libempathy-gtk/empathy-main-window.c:913
+msgid "Certificate expired"
+msgstr "Сертификатът е изтекъл"
+
+#: ../libempathy-gtk/empathy-main-window.c:916
+msgid "Certificate not activated"
+msgstr "Сертификатът не е влязъл в сила"
+
+#: ../libempathy-gtk/empathy-main-window.c:919
+msgid "Certificate hostname mismatch"
+msgstr "Несъвпадение на името с това в сертификата"
+
+#: ../libempathy-gtk/empathy-main-window.c:922
+msgid "Certificate fingerprint mismatch"
+msgstr "Несъвпадение на отпечатъка на сертификата"
+
+#: ../libempathy-gtk/empathy-main-window.c:925
+msgid "Certificate self signed"
+msgstr "Сертификатът е самоподписан"
+
+#: ../libempathy-gtk/empathy-main-window.c:928
+msgid "Certificate error"
+msgstr "Грешка в сертификата"
+
+#: ../libempathy-gtk/empathy-main-window.c:931
+msgid "Unknown error"
+msgstr "Неизвестна грешка"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Списък с контакти"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Контекст"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "_Добавяне към отметките"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Редактиране на отметките"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Показване на _изключените контакти"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_Относно"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Абонаменти"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Ръководство"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "_Помощ"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Ново съобщение..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "_Лични данни"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "_Настройки"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Спиране на програмата"
+
+#: ../libempathy-gtk/empathy-preferences.c:243
+msgid "Language"
+msgstr "Език"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Изглед</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Звуци</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Поведение</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Списък с контакти</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Езици с проверка на правописа:</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Настройки</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Визуални настройки</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>В списъка са само езицитие, за които е инсталиран речник.</small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Аватарите са изображенията, които се избират от потребителите, за да се "
+"показват в списъка с контакти"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "_Тема за прозорците за разговори:"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "_Известяване при появата на контакти"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Със звуци в състояние „_Отсъстващ“"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Със звуци в състояние „_Зает“"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "Общи"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Уведомяване"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Настройки"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "Показване на _аватари"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Използване на _картинки за емотикони"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "_Стегнат списък с контакти"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "Подреждане по _име"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "Подреждане по _състояние"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Проверка на правописа"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "Теми"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr "_Отваряне на разговорите в отделни прозорци"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Play sound when messages arrive"
+msgstr "_Уведомяване със звук при пристигане на съобщение"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Use for chat rooms"
+msgstr "_Да се ползва за стаите за разговор"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Други съобщения..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Други съобщения"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Съобщение:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Запазване на съобщение"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Състояние:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:188
+#, c-format
+msgid "%s went offline"
+msgstr "%s се изключи"
+
+#: ../libempathy-gtk/empathy-private-chat.c:202
+#, c-format
+msgid "%s has come online"
+msgstr "%s се включи"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "Дума"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "Предложения за думата"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Проверка на правописа"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Предложения за думата:"
+
+#: ../libempathy-gtk/empathy-status-icon.c:310
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Ново съобщение от :%s\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:579
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Искане за записване от %s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:582
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Съобщение: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Състояние"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Показване на списъка с контакти"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:87
+msgid "Classic"
+msgstr "Класическа"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:88
+msgid "Simple"
+msgstr "Проста"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:89
+msgid "Clean"
+msgstr "Изчистена"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:90
+msgid "Blue"
+msgstr "Синя"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+"Контактът, който да се появява в аплета. Ако остане празно, няма да се "
+"показва никой контакт."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr ""
+"Идентификаторът на аватара на контакта. Ако не е попълнено нищо, контактът "
+"няма аватар."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Мегафон"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Разговаряйте!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Данни за контакта"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Присъствие"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "Задайте присъствието си"
+
+#: ../src/empathy.c:210
+msgid "Don't connect on startup"
+msgstr "Без автоматично свързване в началото"
+
+#: ../src/empathy.c:222
+msgid "- Empathy Instant Messenger"
+msgstr "- бързи съобщения с Empathy"
diff --git a/trunk/po/ca.po b/trunk/po/ca.po
new file mode 100644
index 000000000..bab57cdb2
--- /dev/null
+++ b/trunk/po/ca.po
@@ -0,0 +1,3940 @@
+# Catalan translation for Empathy
+# Copyright © 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
+# This file is distributed under the same licence as the gossip package.
+# Jordi Mallach <jordi@sindominio.net>, 2003, 2004, 2005, 2006, 2007.
+# Gil Forcada <gilforcada@guifi.net>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-03-12 23:08+0100\n"
+"PO-Revision-Date: 2008-03-13 01:44+0100\n"
+"Last-Translator: Gil Forcada <gilforcada@guifi.net>\n"
+"Language-Team: Catalan <tradgnome@softcatala.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n!=1;\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Missatgeria instantània Empathy"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Envia i rep missatges instantanis"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Obre sempre una finestra de xat separada per a xats nous."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Caràcter que s'afegirà després del sobrenom quan s'utilitzi la compleció de "
+"sobrenoms (tabulació) en els xats de grup."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Tema de la finestra de xat"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr ""
+"Verifica si l'Empathy s'hauria de connectar automàticament en iniciar-se"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Verifica si s'hauria d'utilitzar el NetworkManager"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Verifica si es crea el compte del Salut"
+
+#: ../data/empathy.schemas.in.h:7
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Llista separada per comes de les llengües del verificador ortogràfic a "
+"utilitzar (p. ex. ca, en, es, fr)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Llista de contactes compacta"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Criteri d'ordenació de la llista de contactes"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "El directori predeterminat des d'on seleccionar una imatge d'avatar"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Habilita les finestres emergents quan un contacte és disponible"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Habilita els sons quan s'està absent"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Habilita els sons quan s'està ocupat"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Habilita el verificador ortogràfic"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Oculta la finestra principal"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Oculta la finestra principal."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Caràcter de compleció de sobrenom"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Obre les finestres de xat noves en finestres separades"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Mostra els avatars"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Mostra un consell sobre tancar la finestra principal"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Mostra els contactes desconnectats"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Llengües per a la verificació ortogràfica"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "L'últim directori des d'on es va seleccionar una imatge d'avatar."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+"El tema que s'utilitza per a mostrar la conversa a les finestres de xat."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Utilitza emoticones gràfiques"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Utilitza sons de notificació"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Usa el tema per a les sales de xat"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically login to your accounts on "
+"startup."
+msgstr ""
+"Si l'Empathy hauria d'autenticar els comptes automàticament en iniciar-se."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first empathy run."
+msgstr "Si s'ha creat el compte del Salut en la primera execució de l'Empathy."
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"Si s'hauria d'utilitzar el gestor de xarxa per a desconnectar/tornar a "
+"connectar automàticament."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Si s'han de verificar les paraules introduïdes comparant-les les llengües "
+"escollides per a la verificació ortogràfica."
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Si s'han de convertir les emoticones a imatges gràfiques a les converses."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Si s'ha de reproduir un so quan arriba un missatge."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Si s'han de reproduir sons quan s'està absent."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Si s'han de reproduir sons quan s'està ocupat."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+"Si s'ha de mostrar una finestra emergent quan un contacte esdevé disponible."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Si s'han de mostrar els avatars per als contactes a la llista de contactes i "
+"les finestres de xat."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+"Si s'han de mostrar els contactes que estan desconnectats a la llista de "
+"contactes."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Si s'ha de mostrar el diàleg de missatge sobre tancar la finestra principal "
+"amb el botó «x» de la barra de títol."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Si s'ha de mostrar la llista de contactes en mode compacte."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Si s'ha d'utilitzar el tema per a les sales de xat."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Quin criteri s'ha de fer servir quan s'ordena la llista de contactes. De "
+"manera predeterminada s'ordena pel nom del contacte amb el valor "
+"«name» (nom). Un valor «state» (estat) ordenarà la llista de contactes per "
+"estat."
+
+#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:154
+msgid "People nearby"
+msgstr "Gent propera"
+
+#: ../libempathy/empathy-utils.c:525
+msgid "Available"
+msgstr "Disponible"
+
+#: ../libempathy/empathy-utils.c:527
+msgid "Busy"
+msgstr "Ocupat"
+
+#: ../libempathy/empathy-utils.c:530
+msgid "Away"
+msgstr "Absent"
+
+#: ../libempathy/empathy-utils.c:532
+msgid "Hidden"
+msgstr "Amagat"
+
+#: ../libempathy/empathy-utils.c:535
+msgid "Offline"
+msgstr "Desconnectat"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"L'Empathy és programari lliure; podeu redistribuir-lo i/o modificar-lo sota "
+"els termes de la Llicència Pública General GNU tal i com ha estat publicada "
+"per la Free Software Foundation; bé sota la versió 2 de la Llicència o bé "
+"(si ho preferiu) sota qualsevol versió posterior."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"L'Empathy es distribueix amb l'expectativa de que serà útil, però SENSE CAP "
+"GARANTIA; fins i tot la garantia implícita de COMERCIALITZACIÓ o ADEQUACIÓ "
+"PER UN PROPÒSIT PARTICULAR. Vegeu la Llicència Pública General GNU per "
+"obtenir-ne més detalls."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Hauríeu d'haver rebut una còpia de la Llicència Pública General GNU "
+"juntament amb l'Empathy; en cas contrari, escriviu a la Free Software "
+"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Un client de missatgeria instantània per al GNOME"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Jordi Mallach <jordi@sindominio.net>\n"
+"Gil Forcada <gilforcada@guifi.net>"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "Tots"
+
+#: ../libempathy-gtk/empathy-account-widget.c:284
+#: ../libempathy-gtk/empathy-account-widget.c:329
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Avançat</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:2
+msgid "generic account settings"
+msgstr "paràmetres genèrics de compte"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Oblida la contrasenya i neteja el camp."
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "ICQ _UIN:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+msgid "ICQ account settings"
+msgstr "paràmetres del compte ICQ"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "Con_trasenya:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Charset:"
+msgstr "Joc de _caràcters:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Port:"
+msgstr "_Port:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:12
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Servidor:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr "Xarxa nova"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Xarxa</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Servidors</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Joc de caràcters:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Crea una xarxa d'IRC nova"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Edita la xarxa d'IRC nova seleccionada"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Xarxa"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Xarxa:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Sobrenom:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Contrasenya:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Missatge de desconnexió:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Nom real:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Suprimeix la xarxa IRC seleccionada"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:13
+msgid "irc account settings"
+msgstr "paràmetres del compte IRC"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Sobreescriu els paràmetres del servidor</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "I_D d'entrada:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "Pri_oritat:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "Rec_urs:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Utilitza l'SS_L antic"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "_Es requereix xifratge (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Ignora els errors del certificat SSL"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:13
+msgid "jabber account settings"
+msgstr "paràmetres del compte Jabber"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "paràmetres del compte MSN"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "Corr_eu electrònic:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Nom: "
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_Jabber ID:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "Co_gnoms:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "Sobre_nom:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "Nom _públic:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "paràmetres del compte Salut"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "Servidor j_aponès:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "Utilitza el _Yahoo Japan"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "Yahoo! account settings"
+msgstr "paràmetres del compte Yahoo!"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Ignore conference and chatroom invitations"
+msgstr "_Ignora les invitacions de conferència i sala de xat"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+msgid "_Room List locale:"
+msgstr "_Localització de la llista de la sala:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:224
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Per a afegir un compte nou, podeu fer clic al botó «Afegeix» i es crearà una "
+"nova entrada per a que comenceu a configurar."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:228
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"Per a afegir un compte nou, primer heu d'instal·lar el rerefons de cada "
+"protocol que vulgueu utilitzar."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:235
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>No hi ha un compte seleccionat</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:236
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Si no voleu afegir cap compte, senzillament feu clic al compte que voleu "
+"configurar a la llista de l'esquerra."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:242
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Cap compte configurat</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:410
+msgid "Enabled"
+msgstr "Habilitat"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:420
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Comptes"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:903
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Esteu a punt de suprimir el compte %s.\n"
+"Segur que voleu continuar?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:909
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Qualsevol conversa i sales de xat associades NO se suprimiran si decidiu "
+"continuar.\n"
+"\n"
+"Si decidiu tornar a afegir el compte més tard, encara seran disponibles."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Compte nou</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Paràmetres</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "Cr_ea"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Per a afegir un compte nou, podeu fer clic al botó «Afegeix» i es crearà una "
+"entrada nova perquè pugueu configurar-la.\n"
+"\n"
+"Si no voleu afegir un compte, feu clic al compte que voleu configurar a la "
+"llista de l'esquerra."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Tipus:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:459
+msgid "Select Your Avatar Image"
+msgstr "Seleccioneu la vostra imatge d'avatar"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:462
+msgid "No Image"
+msgstr "Cap imatge"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:522
+msgid "Images"
+msgstr "Imatges"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:526
+msgid "All Files"
+msgstr "Tots els fitxers"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Feu clic per a fer més gran"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+msgid "End Call"
+msgstr "Finalitza la trucada"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "Entrada"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "Silenci"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "Sortida"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "Envia vídeo"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Start Call"
+msgstr "Inicia una trucada"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:7
+msgid "Volume"
+msgstr "Volum"
+
+#: ../libempathy-gtk/empathy-chat.c:441
+msgid "Disconnected"
+msgstr "Fora de línia"
+
+#: ../libempathy-gtk/empathy-chat.c:565
+msgid "offline"
+msgstr "desconnectat"
+
+#: ../libempathy-gtk/empathy-chat.c:568
+msgid "invalid contact"
+msgstr "contacte no vàlid"
+
+#: ../libempathy-gtk/empathy-chat.c:571
+msgid "permission denied"
+msgstr "s'ha denegat el permís"
+
+#: ../libempathy-gtk/empathy-chat.c:574
+msgid "too long message"
+msgstr "el missatge és massa llarg"
+
+#: ../libempathy-gtk/empathy-chat.c:577
+msgid "not implemented"
+msgstr "no implementat"
+
+#: ../libempathy-gtk/empathy-chat.c:580
+msgid "unknown"
+msgstr "desconegut"
+
+#: ../libempathy-gtk/empathy-chat.c:584
+#, 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:1041
+msgid "Insert Smiley"
+msgstr "Insereix una emoticona"
+
+#: ../libempathy-gtk/empathy-chat.c:1088
+msgid "_Check Word Spelling..."
+msgstr "_Verifica l'ortografia de la paraula..."
+
+#: ../libempathy-gtk/empathy-chat.c:1545
+msgid "Connected"
+msgstr "Connectat"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Neteja"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "T_ruca"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "Canvia el _tema..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+msgid "Chat"
+msgstr "Xat"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "Infor_mació del contacte"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "In_vite..."
+msgstr "Con_vida..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "Insereix una e_moticona"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Invitation _message:"
+msgstr "_Missatge d'invitació:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invite"
+msgstr "Convida"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Uneix-me a un _nou/nova..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Mou la pestanya a l'_esquerra"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Mou la pestanya a la d_reta"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr "Seleccioneu qui voleu convidar:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "Us han convidat a unir-vos a una conferència de xat."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "_Afegeix un contacte..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "_Afegeix als preferits"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Contents"
+msgstr "_Continguts"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Conversa"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+msgid "_Detach Tab"
+msgstr "D_esenganxa la pestanya"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+#: ../libempathy-gtk/empathy-contact-list-view.c:215
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr "_Edita"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr "A_juda"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "Pestanya següe_nt"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+msgid "_Previous Tab"
+msgstr "_Pestanya anterior"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Room"
+msgstr "_Sala"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Show Contacts"
+msgstr "_Mostra els contactes"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Tabs"
+msgstr "Pes_tanyes"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+#: ../libempathy-gtk/empathy-contact-list-view.c:231
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+msgid "_View Previous Conversations"
+msgstr "_Visualitza les converses anteriors"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+msgid "gtk-close"
+msgstr "gtk-close"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+msgid "gtk-copy"
+msgstr "gtk-copy"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:30
+msgid "gtk-cut"
+msgstr "gtk-cut"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:31
+msgid "gtk-paste"
+msgstr "gtk-paste"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Copy Link Address"
+msgstr "_Copia l'adreça de l'enllaç"
+
+#: ../libempathy-gtk/empathy-chat-view.c:449
+msgid "_Open Link"
+msgstr "_Obre l'enllaç"
+
+#: ../libempathy-gtk/empathy-chat-window.c:698
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Converses (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1293
+msgid "Typing a message."
+msgstr "S'està teclejant un missatge."
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "Nom"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "Sala"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr "Connexió automàtica"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+msgid "Account:"
+msgstr "Compte:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Edita la sala preferida"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Uneix-me a la sala en _iniciar"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr ""
+"Uniu-vos a aquesta sala de xat quan s'iniciï l'Empathy i estigueu connectat"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Gestiona les sales preferides"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "N_om:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "S_ervidor:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "Sa_la:"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:176
+msgid "Personal Information"
+msgstr "Informació personal"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+msgid "Edit Contact Information"
+msgstr "Edita la informació del contacte"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:182
+msgid "Contact Information"
+msgstr "Informació del contacte"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:277
+msgid "I would like to add you to my contact list."
+msgstr "Voldria afegir-te a la meva llista de contactes."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:301
+msgid "New Contact"
+msgstr "Contacte nou"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Ho _decidiré més tard"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Sol·licitud de subscripció"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:195
+msgid "_Contact"
+msgstr "_Contacte"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:199
+msgid "_Group"
+msgstr "_Grup"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:203
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_Xat"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:203
+msgid "Chat with contact"
+msgstr "Xateja amb un contacte"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:207
+msgid "Infor_mation"
+msgstr "Infor_mació"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:207
+msgid "View contact information"
+msgstr "Visualitza la informació del contacte"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:211
+msgid "Re_name"
+msgstr "Rea_nomena"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:211
+msgid "Rename"
+msgstr "Reanomena"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:215
+msgid "Edit the groups and name for this contact"
+msgstr "Edita els grups i nom per a aquest contacte"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:219
+msgid "_Remove"
+msgstr "_Suprimeix"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:219
+msgid "Remove contact"
+msgstr "Suprimeix el contacte"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:223
+msgid "_Invite to Chat Room"
+msgstr "Conv_ida a una sala de xat"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:223
+msgid "Invite to a currently open chat room"
+msgstr "Convida a una sala de xat actualment oberta"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:227
+msgid "_Send File..."
+msgstr "E_nvia un fitxer..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:227
+msgid "Send a file"
+msgstr "Envia un fitxer"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:231
+msgid "View previous conversations with this contact"
+msgstr "Visualitza les converses anteriors amb aquest contacte"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:236
+msgid "_Call"
+msgstr "Tru_ca"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:236
+msgid "Start a voice or video conversation with this contact"
+msgstr "Inicia una conversa de veu o vídeo amb aquest contacte"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1471
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Ho sento, no et vull més a la meva llista de contactes."
+
+#: ../libempathy-gtk/empathy-contact-widget.c:690
+msgid "Select"
+msgstr "Selecciona"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:700
+#: ../libempathy-gtk/empathy-main-window.c:609
+msgid "Group"
+msgstr "Grup"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Informació del client</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Detalls del contacte</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Contacte</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Grups</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Sobrenoms:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Aniversari:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Client:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Informació del contacte"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "Correu electrònic:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Nom complet:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "Indentificador:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "S'ha demanat la informació..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "SO:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Seleccioneu els grups en els quals voleu que hi hagi aquest contacte; podeu "
+"seleccionar-ne més d'un o bé cap."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Versió:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "Pàgina web:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:249
+msgid "Enter the new topic you want to set for this room:"
+msgstr "Introduïu el tema nou que voleu establir per a aquesta sala:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:359
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s ha entrat a la sala"
+
+#: ../libempathy-gtk/empathy-group-chat.c:362
+#, c-format
+msgid "%s has left the room"
+msgstr "%s ha sortit de la sala"
+
+#: ../libempathy-gtk/empathy-group-chat.c:448
+#, c-format
+msgid "Topic: %s"
+msgstr "Tema: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:523
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Tema establert a: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:525
+msgid "No topic defined"
+msgstr "No s'ha definit cap tema"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Tema:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Xat en grup"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+msgid "new server"
+msgstr "servidor nou"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:512
+msgid "Server"
+msgstr "Servidor"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:527
+msgid "Port"
+msgstr "Port"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:540
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:499
+msgid "Account"
+msgstr "Compte"
+
+#: ../libempathy-gtk/empathy-log-window.c:506
+msgid "Conversation"
+msgstr "Conversa"
+
+#: ../libempathy-gtk/empathy-log-window.c:516
+msgid "Date"
+msgstr "Data"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "Converses"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr "Converses anteriors"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "Cerca"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "_Per a:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "Sales de xat"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Navega:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Introduïu el nom de la sala a la qual us voleu unir o feu clic en una o més "
+"sales de la llista."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Introduïu el servidor que hostatja la sala, o deixeu-ho en blanc si la sala "
+"és en el servidor del compte actual"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Uneix-te"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Uneix-te a un nou"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "Ac_tualitza"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"Aquesta llista representa totes les sales de xat hostatjades al servidor que "
+"heu introduït."
+
+#: ../libempathy-gtk/empathy-main-window.c:266
+msgid "Show and edit accounts"
+msgstr "Mostra i edita els comptes"
+
+#: ../libempathy-gtk/empathy-main-window.c:630
+msgid "Contact"
+msgstr "Contacte"
+
+#: ../libempathy-gtk/empathy-main-window.c:819
+msgid "_Edit account"
+msgstr "_Edita el compte"
+
+#: ../libempathy-gtk/empathy-main-window.c:902
+msgid "Network error"
+msgstr "Error de la xarxa"
+
+#: ../libempathy-gtk/empathy-main-window.c:905
+msgid "Authentication failed"
+msgstr "Ha fallat l'autenticació"
+
+#: ../libempathy-gtk/empathy-main-window.c:908
+msgid "Encryption error"
+msgstr "Error de xifratge"
+
+#: ../libempathy-gtk/empathy-main-window.c:911
+msgid "Name in use"
+msgstr "Nom utilitzat"
+
+#: ../libempathy-gtk/empathy-main-window.c:914
+msgid "Certificate not provided"
+msgstr "No s'ha proporcionat el certificat"
+
+#: ../libempathy-gtk/empathy-main-window.c:917
+msgid "Certificate untrusted"
+msgstr "El certificat no és de confiança"
+
+#: ../libempathy-gtk/empathy-main-window.c:920
+msgid "Certificate expired"
+msgstr "El certificat ha expirat"
+
+#: ../libempathy-gtk/empathy-main-window.c:923
+msgid "Certificate not activated"
+msgstr "El certificat no està activat"
+
+#: ../libempathy-gtk/empathy-main-window.c:926
+msgid "Certificate hostname mismatch"
+msgstr "No coincideix el nom de la màquina del certificat"
+
+#: ../libempathy-gtk/empathy-main-window.c:929
+msgid "Certificate fingerprint mismatch"
+msgstr "No coincideix l'empremta digital del certificat"
+
+#: ../libempathy-gtk/empathy-main-window.c:932
+msgid "Certificate self signed"
+msgstr "Certificat signat per un mateix"
+
+#: ../libempathy-gtk/empathy-main-window.c:935
+msgid "Certificate error"
+msgstr "Error en el certificat"
+
+#: ../libempathy-gtk/empathy-main-window.c:938
+msgid "Unknown error"
+msgstr "Error desconegut"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Llista de contactes"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Context"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Uneix-te als _preferits"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Gestiona els preferits"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "M_ostra els contactes desconnectats"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+msgid "_Accounts"
+msgstr "_Comptes"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "Conversa _nova..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+msgid "_Personal Information"
+msgstr "Informació _personal"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "_Preferències"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "gtk-about"
+msgstr "gtk-about"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "gtk-quit"
+msgstr "gtk-quit"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Truca"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "ID del contacte:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Conversa nova"
+
+#: ../libempathy-gtk/empathy-preferences.c:281
+msgid "Language"
+msgstr "Llengua"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Aparença</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Àudio</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Comportament</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Llista de contactes</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Habilita la verificació ortogràfica per a les llengües:</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Opcions</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Visual</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>La llista de llengües només reflecteix les llengües per a les quals "
+"teniu un diccionari instal·lat.</small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Automatically _connect on startup "
+msgstr "_Connecta automàticament en iniciar "
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Els avatar són imatges seleccionades per l'usuari que es mostren a la llista "
+"de contactes"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Chat Th_eme:"
+msgstr "T_ema de xat:"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Display notifications when contacts come _online"
+msgstr "Mostra les notificacions quan els contactes es c_onnecten"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _away"
+msgstr "Habilita els sons quan s'està _absent"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "Enable sounds when _busy"
+msgstr "Habilita els sons quan s'està _ocupat"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "General"
+msgstr "General"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Notifications"
+msgstr "Notificacions"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Preferences"
+msgstr "Preferències"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _avatars"
+msgstr "Mostra els av_atars"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show _smileys as images"
+msgstr "Mo_stra les emoticones com a imatges"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Show co_mpact contact list"
+msgstr "_Mostra la llista de contactes compacta"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by _name"
+msgstr "Ordena per _nom"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Sort by s_tate"
+msgstr "Ordena per es_tat"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Spell Checking"
+msgstr "Verificació ortogràfica"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "Themes"
+msgstr "Temes"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Obre xats nous en finestres separades"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "Re_produeix un so quan arribin missatges"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "_Utilitza a les sales de xat"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Missatges personalitzats..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Missatge personalitzat"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Missatge:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Desa el missatge"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Estat:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:230
+#, c-format
+msgid "%s went offline"
+msgstr "%s s'ha desconnectat"
+
+#: ../libempathy-gtk/empathy-private-chat.c:244
+#, c-format
+msgid "%s has come online"
+msgstr "%s s'ha connectat"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "Paraula"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "Suggeriments per a la paraula"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Verificador ortogràfic"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Suggeriments per a la paraula:"
+
+#: ../libempathy-gtk/empathy-status-icon.c:358
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Missatge nou de %s:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:427
+#, c-format
+msgid ""
+"Incoming call from %s:\n"
+"%s"
+msgstr ""
+"Trucada entrant de %s:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:728
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Sol·licitud de subscripció de %s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:731
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Missatge: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Estat"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Surt"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Mostra la llista de contactes"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:780
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:78
+msgid "Classic"
+msgstr "Clàssic"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:79
+msgid "Simple"
+msgstr "Simple"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:80
+msgid "Clean"
+msgstr "Net"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:81
+msgid "Blue"
+msgstr "Blau"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Localització actual"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Àrab"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Armeni"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Bàltic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Cèltic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Europeu central"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Xinès simplificat"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Xinès tradicional"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Croat"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Ciríl·lic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Ciríl·lic/Rus"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Ciríl·lic/Ucraïnès"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Georgià"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Grec"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Gujarati"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Hebreu"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Hebreu visual"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Islandès"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Japonès"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Coreà"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Nòrdic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Persa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Romanès"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Sud europeu"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Tailandès"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Turc"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Occidental"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnamita"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+"El contacte per mostrar en la miniaplicació. Si està buit significa que no "
+"es mostrarà cap contacte."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "L'avatar del contacte. Si està buit significa que no té avatar."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megàfon"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Parleu!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_Quant a"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Informació"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Presència"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "Establiu la vostra presència"
+
+#: ../src/empathy.c:290
+msgid "- Empathy Instant Messenger"
+msgstr "- Missatgeria instantània Empathy"
+
+#~ msgid "Cu_t"
+#~ msgstr "Re_tall"
+
+#~ msgid "_Close"
+#~ msgstr "_Tanca"
+
+#~ msgid "_Copy"
+#~ msgstr "_Copia"
+
+#~ msgid "_Paste"
+#~ msgstr "_Enganxa"
+
+#~ msgid "Use encryption (SS_L)"
+#~ msgstr "Utilitza el xifrat (SS_L)"
+
+#~ msgid "Disable"
+#~ msgstr "Inhabilita"
+
+#~ msgid "New Message"
+#~ msgid_plural "New Messages"
+#~ msgstr[0] "Missatge nou"
+#~ msgstr[1] "Missatges nous"
+
+#~ msgid "Chat Room"
+#~ msgstr "Sala de xat"
+
+#~ msgid "_New Message..."
+#~ msgstr "_Nou missatge..."
+
+#, fuzzy
+#~ msgid ""
+#~ "Subscription requested for %s\n"
+#~ "Message: %s"
+#~ msgstr "Sol·licitud de subscripció nova de %s"
+
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Missatgeria instantània Gossip"
+
+#~ msgid "The default location for file transfers to be saved to"
+#~ msgstr "La ubicació per defecte per a les transferències de fitxers desades"
+
+#~ msgid ""
+#~ "This is updated each time the user changes the location they wish to save "
+#~ "the file to so that the last location used to save file transfers can be "
+#~ "used without prompting the user each time."
+#~ msgstr ""
+#~ "Això s'actualitza cada vegada que l'usuari canvia la ubicació on volen "
+#~ "desar el fitxer per a que sempre s'utilitze l'última ubicació per a desar "
+#~ "les transferències de fitxers sense haver de preguntar a l'usuari cada "
+#~ "vegada."
+
+#~ msgid "Normal"
+#~ msgstr "Normal"
+
+#~ msgid "Joining"
+#~ msgstr "S'està entrant"
+
+#~ msgid "Active"
+#~ msgstr "Actiu"
+
+#~ msgid "Inactive"
+#~ msgstr "Inactiu"
+
+#~ msgid "Error"
+#~ msgstr "Error"
+
+#~ msgid "Moderator"
+#~ msgid_plural "Moderators"
+#~ msgstr[0] "Moderador"
+#~ msgstr[1] "Moderadors"
+
+#~ msgid "Participant"
+#~ msgid_plural "Participants"
+#~ msgstr[0] "Participant"
+#~ msgstr[1] "Participants"
+
+#~ msgid "Visitor"
+#~ msgid_plural "Visitors"
+#~ msgstr[0] "Visitant"
+#~ msgstr[1] "Visitants"
+
+#~ msgid "No role"
+#~ msgstr "Cap rol"
+
+#~ msgid "Owner"
+#~ msgid_plural "Owners"
+#~ msgstr[0] "Propietari"
+#~ msgstr[1] "Propietaris"
+
+#~ msgid "Administrator"
+#~ msgid_plural "Administrators"
+#~ msgstr[0] "Administrador"
+#~ msgstr[1] "Administradors"
+
+#~ msgid "Member"
+#~ msgid_plural "Members"
+#~ msgstr[0] "Membre"
+#~ msgstr[1] "Menbres"
+
+#~ msgid "No affiliation"
+#~ msgstr "Sense afiliació"
+
+#~ msgid ""
+#~ "The chat room you tried to join requires a password. You either failed to "
+#~ "supply a password or the password you tried was incorrect."
+#~ msgstr ""
+#~ "La sala de xat a la qual heu intentat unir-vos requereix una contrasenya. "
+#~ "No heu introduït una contrasenya, o aquesta era incorrecta."
+
+#~ msgid "You have been banned from this chatroom."
+#~ msgstr "Heu estat bandejats d'aquesta sala de xat."
+
+#~ msgid "The conference room you tried to join could not be found."
+#~ msgstr ""
+#~ "No s'ha trobat la sala de conferències a la qual heu intentat unir-vos."
+
+#~ msgid "Chatroom creation is restricted on this server."
+#~ msgstr "La creació de sales de xat és restringida en aquest servidor."
+
+#~ msgid "Chatroom reserved nick names must be used on this server."
+#~ msgstr ""
+#~ "En aquest servidor s'ha d'utilitzar sobrenoms reservats per a cada sala."
+
+#~ msgid "You are not on the chatroom's members list."
+#~ msgstr "No sou a la llista de membres de la sala de xat."
+
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "El sobrenom que heu triat ja està en ús."
+
+#~ msgid "The maximum number of users for this chatroom has been reached."
+#~ msgstr "S'ha assolit el nombre màxim d'usuaris per a aquesta sala de xat."
+
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr ""
+#~ "El servidor de conferències remot no ha contestat en un temps raonable."
+
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr ""
+#~ "S'ha produït un error desconegut, comproveu que els vostres detalls són "
+#~ "correctes."
+
+#~ msgid "Joining the chatroom was canceled."
+#~ msgstr "S'ha cancel·lat la unió a la sala de xat."
+
+#~ msgid "Unavailable"
+#~ msgstr "No disponible"
+
+#~ msgid "Service has gone and is no longer available"
+#~ msgstr "El servei ha desaparegut i ja no està disponible"
+
+#~ msgid "Bad or malformed request to this service"
+#~ msgstr "Petició incorrecta o malformada a aquest servei"
+
+#~ msgid "Unauthorized request to this service"
+#~ msgstr "Petició no autoritzada a aquest servei"
+
+#~ msgid "Payment is required for this service"
+#~ msgstr "Es requereix pagament per a aquest servei"
+
+#~ msgid "This service is forbidden"
+#~ msgstr "Aquest servei és prohibit"
+
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Aquest servei no és disponible o no s'ha trobat"
+
+#~ msgid "Unacceptable request sent to this services"
+#~ msgstr "Petició inacceptable enviada a aquest servei"
+
+#~ msgid "Registration is required"
+#~ msgstr "Es requereix l'enregistrament"
+
+#~ msgid "There was a conflict of interest trying to use this service"
+#~ msgstr "Hi havia un conflicte d'interessos en tractar d'usar aquest servei"
+
+#~ msgid "There was an internal service error"
+#~ msgstr "S'ha produït un error intern del servei"
+
+#~ msgid "This feature is not implemented"
+#~ msgstr "Aquesta funcionalitat no està implementada"
+
+#~ msgid "The remote service timed out"
+#~ msgstr "S'ha esgotat el temps d'espera per al servei remot"
+
+#~ msgid "new account"
+#~ msgstr "compte nou"
+
+#~ msgid "Home"
+#~ msgstr "Casa"
+
+#~ msgid "Couldn't send message!"
+#~ msgstr "No s'ha pogut enviar el missatge!"
+
+#~ msgid "Connection could not be opened"
+#~ msgstr "No s'ha pogut obrir la connexió"
+
+#~ msgid "An unknown error occurred."
+#~ msgstr "S'ha produït un error desconegut."
+
+#~ msgid "Connection refused."
+#~ msgstr "S'ha rebutjat la connexió."
+
+#~ msgid "Server address could not be resolved."
+#~ msgstr "No s'ha pogut resoldre l'adreça del servidor."
+
+#~ msgid "Connection timed out."
+#~ msgstr "S'ha exhaurit el temps d'espera de la connexió."
+
+#~ msgid "Authentication failed."
+#~ msgstr "Ha fallat l'autenticació."
+
+#~ msgid "The username you are trying already exists."
+#~ msgstr "El nom d'usuari que esteu intentant fer servir ja existeix."
+
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "El nom d'usuari que esteu intentant fer servir no és vàlid."
+
+#~ msgid "This feature is unavailable."
+#~ msgstr "Aquesta funcionalitat no està disponible."
+
+#~ msgid "This feature is unauthorized."
+#~ msgstr "Aquesta funcionalitat no està autoritzada."
+
+#~ msgid "A specific protocol error occurred that was unexpected."
+#~ msgstr "S'ha produït un error de protocol específic inesperat."
+
+#~ msgid "The other party disconnected"
+#~ msgstr "L'altra part s'ha desconnectat"
+
+#~ msgid "A protocol error occurred during the transfer"
+#~ msgstr "S'ha produït un error de protocol durant la transferència"
+
+#~ msgid "Unable to connect to the other party"
+#~ msgstr "No s'ha pogut connectar a l'altra part"
+
+#~ msgid "File name is too long"
+#~ msgstr "El nom del fitxer és massa llarg"
+
+#~ msgid "File doesn't exist"
+#~ msgstr "El fitxer no existeix"
+
+#~ msgid "File is a directory"
+#~ msgstr "El fitxer és un directori"
+
+#~ msgid "Read only file system"
+#~ msgstr "Sistema de fitxers de només lectura"
+
+#~ msgid "File is busy"
+#~ msgstr "El fitxer està ocupat"
+
+#~ msgid "Bad memory"
+#~ msgstr "Memòria invàlida"
+
+#~ msgid "Too many levels of symbolic links"
+#~ msgstr "Massa nivells d'enllaços simbòlics"
+
+#~ msgid "No space is available"
+#~ msgstr "No hi ha espai disponible"
+
+#~ msgid "Virtual memory exhausted"
+#~ msgstr "S'ha exhaurit la memòria virtual"
+
+#~ msgid "Too many open files"
+#~ msgstr "Hi ha massa fitxers oberts"
+
+#~ msgid "Input/output error"
+#~ msgstr "Error d'Entrada/Sortida"
+
+#~ msgid "File is too large"
+#~ msgstr "El fitxer és massa gran"
+
+#~ msgid "Stop"
+#~ msgstr "Atura"
+
+#~ msgid "Disconnect"
+#~ msgstr "Desconnecta"
+
+#~ msgid "Connect"
+#~ msgstr "Connecta"
+
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "S'han enregistrat els nous paràmetres del compte."
+
+#~ msgid "You should now be able to connect to your new account."
+#~ msgstr "Ara hauríeu de poder connectar al vostre compte nou."
+
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "No s'han pogut enregistrar els nous paràmetres del compte."
+
+#~ msgid "Successfully changed your account password."
+#~ msgstr "S'ha canviat la contrasenya correctament."
+
+#~ msgid "You should now be able to connect with your new password."
+#~ msgstr "Ara hauríeu de poder connectar amb la vostra contrasenya nova."
+
+#~ msgid "Failed to change your account password."
+#~ msgstr "No s'ha pogut canviar la contrasenya del compte."
+
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Introduïu una contrasenya nova per a aquest compte:\n"
+#~ "%s"
+
+#~ msgid "No information is available for this contact."
+#~ msgstr "No hi ha informació disponible per a aquest contacte."
+
+#~ msgid "Information requested, please wait..."
+#~ msgstr "S'ha demanat la informació, espereu, si us plau..."
+
+#~ msgid "To summarize:"
+#~ msgstr "En resum:"
+
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "%d sol·licitud de subscripció"
+#~ msgstr[1] "%d sol·licituds de subscripció"
+
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "%d petició de transferència de fitxer"
+#~ msgstr[1] "%d peticions de transferència de fitxer"
+
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "%d missatge del servidor"
+#~ msgstr[1] "%d missatges del servidor"
+
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "%d error"
+#~ msgstr[1] "%d errors"
+
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "Si sortiu, perdreu tota la informació no llegida."
+
+#~ msgid "Gossip is still running, it is just hidden."
+#~ msgstr "El Gossip encara s'està executant, només està amagat."
+
+#~ msgid "Click on the notification area icon to show Gossip."
+#~ msgstr "Feu clic a l'àrea de notificació per a mostrar el Gossip."
+
+#~ msgid "You were about to quit!"
+#~ msgstr "Estàveu a punt de sortir!"
+
+#~ msgid ""
+#~ "Since no system or notification tray has been found, this action would "
+#~ "normally quit Gossip.\n"
+#~ "\n"
+#~ "This is just a reminder, from now on, Gossip will quit when performing "
+#~ "this action unless you uncheck the option below."
+#~ msgstr ""
+#~ "Com no s'ha trobat una safata del sistema o de notificació, aquesta acció "
+#~ "normalment sortiria del Gossip.\n"
+#~ "\n"
+#~ "Això només és un recordatori, des d'ara Gossip sortirà quan realitzeu "
+#~ "aquesta acció a no ser que desmarqueu la següent opció."
+
+#~ msgid "Edit Account _Details"
+#~ msgstr "Edita els _detalls del compte"
+
+#~ msgid "Select who would you like to invite to room:"
+#~ msgstr "Seleccioneu a qui us agradaria convidar a la sala:"
+
+#~ msgid "Select which room you would like to invite:"
+#~ msgstr "Seleccioneu a quina sala voldrieu convidar:"
+
+#~ msgid "Your invitation has been declined"
+#~ msgstr "S'ha declinat la vostra invitació"
+
+#~ msgid "Accept"
+#~ msgstr "Accepta"
+
+#~ msgid "Decline"
+#~ msgstr "Declina"
+
+#~ msgid "Emai_l..."
+#~ msgstr "Correu e_lectrònic..."
+
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr "Voleu eliminar aquest contacte de la llista de contactes?"
+
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Introduïu un nom nou per al grup:\n"
+#~ "%s"
+
+#~ msgid "Unsorted"
+#~ msgstr "Sense ordenar"
+
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server."
+#~ msgstr ""
+#~ "Establiu l'àlias que voleu usar per a:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "Podeu obtenir informació del contacte des del servidor."
+
+#~ msgid "New file transfer request from %s"
+#~ msgstr "Petició de transferència de fitxer nova de %s"
+
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "S'ha declinat el vostre oferiment de transferència."
+
+#~ msgid "The other user decided not to continue."
+#~ msgstr "L'altre usuari ha decidit no continuar."
+
+#~ msgid "Unable to complete the file transfer."
+#~ msgstr "No s'ha pogut completar la transferència del fitxer."
+
+#~ msgid "Unable to start the file transfer."
+#~ msgstr "No s'ha pogut iniciar la transferència del fitxer."
+
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "La transferència de fitxers no està suportada pels dos usuaris."
+
+#~ msgid "An unknown error occurred during file transfer."
+#~ msgstr ""
+#~ "S'ha produït un error desconegut durant la transferència del fitxer."
+
+#~ msgid "Transfer complete"
+#~ msgstr "Transferència completa"
+
+#~ msgid "The file has been transfered successfully."
+#~ msgstr "S'ha transferit el fitxer correctament."
+
+#~ msgid "Transferring file"
+#~ msgstr "S'està transferint el fitxer"
+
+#~ msgid "Please wait while the file is transferred"
+#~ msgstr "Espereu mentre es transfereix el fitxer"
+
+#~ msgid "%s would like to send you a file"
+#~ msgstr "%s vol enviar-vos un fitxer"
+
+#~ msgid "Someone would like to send you a file"
+#~ msgstr "Algú vol enviar-vos un fitxer"
+
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Voleu acceptar aquest fitxer?"
+
+#~ msgid "Attempting to send file to %s"
+#~ msgstr "S'està tractant d'enviar el fitxer a %s"
+
+#~ msgid "Attempting to send file"
+#~ msgstr "S'està tractant d'enviar el fitxer"
+
+#~ msgid "Please wait while the other participant responds"
+#~ msgstr "Espereu mentre l'altre participant respon"
+
+#~ msgid "Select a file"
+#~ msgstr "Seleccioneu un fitxer"
+
+#~ msgid "Connecting..."
+#~ msgstr "S'està connectant..."
+
+#~ msgid "Retry connection"
+#~ msgstr "Torna a intentar la connexió"
+
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "S'ha convidat a %s a unir-se a aquesta conferència de xat."
+
+#~ msgid "You have been kicked from this room"
+#~ msgstr "Heu estat expulsats d'aquesta sala de xat"
+
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "%s ha establert el tema: %s"
+
+#~ msgid "Enter the new nickname you want to be know by:"
+#~ msgstr "Introduïu el sobrenom nou pel qual voleu que us coneguin:"
+
+#~ msgid ""
+#~ "What reason do you want to give for removing this user from the room?"
+#~ msgstr "Quina raó voleu donar per a expulsar aquest usuari de la sala?"
+
+#~ msgid "You have been removed from the room by an administrator."
+#~ msgstr "Heu estat expulsats de la sala per l'administrador."
+
+#~ msgid "Do not show this again"
+#~ msgstr "No mostres això de nou"
+
+#~ msgid "Conversation With"
+#~ msgstr "Conversa amb"
+
+#~ msgid "Allow multiple instances of the application to run at the same time"
+#~ msgstr "Permet que s'executen diverses instàncies de l'aplicació a l'hora"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Llista els comptes disponibles"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "NOM-COMPTE"
+
+#~ msgid "You can not use --no-connect together with --account"
+#~ msgstr "No podeu utilitzar --no-connect amb --account"
+
+#~ msgid "No accounts available."
+#~ msgstr "No hi ha comptes disponibles."
+
+#~ msgid "Available accounts:"
+#~ msgstr "Comptes disponibles:"
+
+#~ msgid "[default]"
+#~ msgstr "[predeterminat]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "No hi ha cap compte amb el nom «%s»."
+
+#~ msgid "Create"
+#~ msgstr "Crea"
+
+#~ msgid "Rooms"
+#~ msgstr "Sales"
+
+#~ msgid "Users"
+#~ msgstr "Usuaris"
+
+#~ msgid "Description"
+#~ msgstr "Descripció"
+
+#~ msgid "Found %d conference room"
+#~ msgid_plural "Found %d conference rooms"
+#~ msgstr[0] "S'ha trobat %d sala de xat"
+#~ msgstr[1] "S'han trobat %d sales de xat"
+
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "S'estan cercant sales de xat, espereu..."
+
+#~ msgid "Browsing cancelled!"
+#~ msgstr "S'ha cancel·lat la cerca."
+
+#~ msgid "Default"
+#~ msgstr "Predeterminat"
+
+#~ msgid "Chat!"
+#~ msgstr "Xateja!"
+
+#~ msgid "%s wants to be added to your contact list for your '%s' account."
+#~ msgstr ""
+#~ "%s vol afegir-se a la vostra llista de contactes per al vostre compte «%"
+#~ "s»."
+
+#~ msgid ""
+#~ "Someone wants to be added to your contact list for your '%s' account."
+#~ msgstr ""
+#~ "Algú vol afegir-se a la vostra llista de contactes per al vostre compte «%"
+#~ "s»."
+
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s vol afegir-se a la vostra llista de contactes."
+
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Algú vol afegir-se a la vostra llista de contactes."
+
+#~ msgid "Show"
+#~ msgstr "Mostra"
+
+#~ msgid "Are you sure you want to clear the list?"
+#~ msgstr "Esteu segur de voler buidar la llista?"
+
+#~ msgid ""
+#~ "This will remove any custom messages you have added to the list of preset "
+#~ "status messages."
+#~ msgstr ""
+#~ "Això suprimirà qualsevol missatge personalitzat que hagueu afegit a la "
+#~ "llista de missatges d'estat preestablerts."
+
+#~ msgid "Clear List"
+#~ msgstr "Neteja la llista"
+
+#~ msgid "Clear List..."
+#~ msgstr "Neteja la llista..."
+
+#~ msgid "Contact has been removed"
+#~ msgstr "S'ha suprimit el contacte"
+
+#~ msgid "Subject: %s"
+#~ msgstr "Assumpte: %s"
+
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "Voleu afegir a aquesta persona a la vostra llista de contactes?"
+
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "Voleu afegir a %s a la vostra llista de contactes?"
+
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Si us plau, introduïu la contrasenya per al compte %s"
+
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "S'està entrant al compte «%s»"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Voleu que es recorde la contrasenya?"
+
+#~ msgid "Could not display the help contents."
+#~ msgstr "No s'han pogut mostrar els continguts de l'ajuda."
+
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "Sembla que el servidor no està responent."
+
+#~ msgid "Try again later."
+#~ msgstr "Proveu-ho més tard."
+
+#~ msgid "Change"
+#~ msgstr "Canvia"
+
+#~ msgid "Contact goes offline"
+#~ msgstr "El contacte s'ha desconnectat"
+
+#~ msgid "Contact goes online"
+#~ msgstr "El contacte s'ha connectat"
+
+#~ msgid "Change Na_me..."
+#~ msgstr "Canvia el no_m..."
+
+#~ msgid "Send _Email..."
+#~ msgstr "_Envia un correu electrònic..."
+
+#~ msgid "_Kick..."
+#~ msgstr "E_xpulsa..."
+
+#~ msgid "File Transfer"
+#~ msgstr "Transferència de fitxer"
+
+#~ msgid "Location:"
+#~ msgstr "Ubicació:"
+
+#~ msgid "Name:"
+#~ msgstr "Nom:"
+
+#~ msgid "Not supported yet"
+#~ msgstr "Encara no està implementat"
+
+#~ msgid "Open _Folder"
+#~ msgstr "Obre la _carpeta"
+
+#~ msgid "Select A File"
+#~ msgstr "Seleccioneu un fitxer"
+
+#~ msgid "Size:"
+#~ msgstr "Mida:"
+
+#~ msgid ""
+#~ "Show more information about chatrooms found and make the window resizable."
+#~ msgstr ""
+#~ "Mostra més informació sobre les sales de xat trobades i fes la finestra "
+#~ "redimensionable."
+
+#~ msgid "_Password"
+#~ msgstr "Con_trassenya"
+
+#~ msgid "-"
+#~ msgstr "-"
+
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Quant a</b>"
+
+#~ msgid "<b>Account</b>"
+#~ msgstr "<b>Compte</b>"
+
+#~ msgid "<b>Languages</b>"
+#~ msgstr "<b>Llengües</b>"
+
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Detalls personals</b>"
+
+#~ msgid "<b>Status</b>"
+#~ msgstr "<b>Estat</b>"
+
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>Subscripció</b>"
+
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Exemple: Pere o usuari@jabber.org</span>"
+
+#~ msgid ""
+#~ "<span size=\"smaller\">Note: You must select an account if the contact is "
+#~ "unknown</span>"
+#~ msgstr ""
+#~ "<span size=\"smaller\">Nota: Heu de seleccionar un compte si el contacte "
+#~ "és desconegut</span>"
+
+#~ msgid "A unique name for this account to identify it personally to you."
+#~ msgstr "Un nom únic per a aquest compte que us ajude a identificar-lo."
+
+#~ msgid "Accou_nt:"
+#~ msgstr "Com_pte:"
+
+#~ msgid "Add Contact"
+#~ msgstr "Afegeix un contacte"
+
+#~ msgid "Avatar:"
+#~ msgstr "Àvatar:"
+
+#~ msgid "C_hange"
+#~ msgstr "Ca_nvia"
+
+#~ msgid "Ch_at"
+#~ msgstr "X_at"
+
+#~ msgid "Con_tact:"
+#~ msgstr "Con_tacte:"
+
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Connec_ta en iniciar"
+
+#~ msgid "Contact List - Gossip"
+#~ msgstr "_Mostra la llista de contactes"
+
+#~ msgid "Country:"
+#~ msgstr "Estat:"
+
+#~ msgid "Edit Contact"
+#~ msgstr "Edita el contacte"
+
+#~ msgid "Edit Groups"
+#~ msgstr "Edita els grups"
+
+#~ msgid "Enter status message:"
+#~ msgstr "Introduïu el missatge d'estat:"
+
+#~ msgid "ID:"
+#~ msgstr "ID:"
+
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr ""
+#~ "Si trieu decidir-ho més tard, se us tornarà a preguntar la pròxima vegada "
+#~ "que entreu."
+
+#~ msgid "Imendio "
+#~ msgstr "Imendio"
+
+#~ msgid "Personal Details"
+#~ msgstr "Detalls personals"
+
+#~ msgid "R_egister"
+#~ msgstr "R_egistra'm..."
+
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Establiu l'àlias que voleu usar per a:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "Podeu obtenir informació del contacte des del servidor. "
+
+#~ msgid "Status Message Presets"
+#~ msgstr "Missatges d'estat predefinits"
+
+#~ msgid ""
+#~ "This acts as a filter to the contact list below.\n"
+#~ "\n"
+#~ "You can use segments of contact's name or ID, for example, \"jabber.org\" "
+#~ "will list everyone using that server.\n"
+#~ "\n"
+#~ "You can also use the name of a group to show only contacts in a specific "
+#~ "group."
+#~ msgstr ""
+#~ "Això actua com un filtre per a la llista de contactes següent.\n"
+#~ "\n"
+#~ "Podeu utilitzar segments del nom del contacte o ID; per exemple, «jabber."
+#~ "org» mostrarà a tothom que utilitze aquest servidor.\n"
+#~ "\n"
+#~ "També podeu utilitzar el nom d'un grup per a mostrar només contactes d'un "
+#~ "grup específic."
+
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "Això actua com un filtre per a la llista de contactes. Podeu utilitzar "
+#~ "segments del nom del contacte o ID; per exemple, «jabber.org» mostrarà a "
+#~ "tothom que utilitze aquest servidor"
+
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr ""
+#~ "Aquest és el nom que s'utilitzarà per a aquest contacte a la vostra "
+#~ "llista de contactes"
+
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "Aquest nom s'usarà per a indentificar-vos en les finestres de xat"
+
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr ""
+#~ "Aquest nom s'usarà per a indentificar-vos quan contactes nous cerquen els "
+#~ "vostres detalls"
+
+#~ msgid "Use default name here from the contact's VCard."
+#~ msgstr "Utilitza ací el nom per defecte de l'VCard del contacte."
+
+#~ msgid "Use system pro_xy"
+#~ msgstr "Utilitza el _servidor intermediari del sistema"
+
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Quin compte voleu utilitzar?"
+
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "No esteu subscrit a aquest contacte."
+
+#~ msgid "_Accept"
+#~ msgstr "_Accepta"
+
+#~ msgid "_Add to status message list"
+#~ msgstr "_Afegeix a la llista de missatges d'estat"
+
+#~ msgid "_Birthday:"
+#~ msgstr "Ani_versari:"
+
+#~ msgid "_Connect"
+#~ msgstr "_Connecta"
+
+#~ msgid "_Deny"
+#~ msgstr "_Denega"
+
+#~ msgid "_Description:"
+#~ msgstr "_Descripció:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Desconnecta"
+
+#~ msgid "_Enable spell checking"
+#~ msgstr "_Habilita la correcció ortogràfica"
+
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Introduïu el nom o ID d'usuari de la persona amb la qual voleu xatejar:"
+
+#~ msgid "_Group:"
+#~ msgstr "_Grup:"
+
+#~ msgid "_Nick Name:"
+#~ msgstr "Àl_ies:"
+
+#~ msgid "_Password:"
+#~ msgstr "Con_trassenya:"
+
+#~ msgid "_Retrieve"
+#~ msgstr "_Obté"
+
+#~ msgid "_Search"
+#~ msgstr "_Cerca"
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Subscriu"
+
+#~ msgid "_Web site:"
+#~ msgstr "Pàgina _web:"
+
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr ""
+#~ "La sala de xat a la qual heu intentat unir-vos requereix una contrasenya."
+
+#~ msgid "Using the %s backend"
+#~ msgstr "Usant el rerefons de %s"
+
+#~ msgid "Bye bye"
+#~ msgstr "Adéu siau"
+
+#~ msgid "Cancel"
+#~ msgstr "Cancel·la"
+
+#~ msgid "OK"
+#~ msgstr "D'acord"
+
+#~ msgid "File name:"
+#~ msgstr "Nom del fitxer:"
+
+#~ msgid "File size:"
+#~ msgstr "Mida del fitxer:"
+
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "Aquesta persona us vol enviar aquest fitxer:"
+
+#~ msgid "Jabber"
+#~ msgstr "Jabber"
+
+#~ msgid "Edit"
+#~ msgstr "Edita"
+
+#~ msgid "Connecting"
+#~ msgstr "S'està connectant"
+
+#~ msgid "Perhaps you are trying to connect to the wrong port?"
+#~ msgstr "Potser us esteu intentant connectar al port incorrecte?"
+
+#~ msgid "Perhaps the service is not currently running?"
+#~ msgstr "Potser el servei no s'està executant actualment?"
+
+#~ msgid "Check your connection details."
+#~ msgstr "Comproveu els detalls de la connexió."
+
+#~ msgid "Perhaps the server is not running this service."
+#~ msgstr "Potser el servidor no està executant aquest servei."
+
+#~ msgid "Check your username and password are correct."
+#~ msgstr "Comproveu que el vostre nom d'usuari i contrasenya són correctes."
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "S'afegirà a %s a la vostra llista de contactes."
+
+#~ msgid "%s ID of new contact:"
+#~ msgstr "%s ID del nou contacte:"
+
+#~ msgid "Example: %s"
+#~ msgstr "Exemple: %s"
+
+#~ msgid "Show accounts and pending connections"
+#~ msgstr "Mostra els comptes i les connexions pendents"
+
+#~ msgid "You have no Instant Messaging accounts configured!"
+#~ msgstr "No teniu cap compte de missatgeria instantània configurat!"
+
+#~ msgid ""
+#~ "Next you will be presented with the Account Information dialog to set "
+#~ "your details up."
+#~ msgstr ""
+#~ "A continuació s'obrirà el diàleg d'Informació del compte per a que "
+#~ "establiu els vostres paràmetres."
+
+#~ msgid "Favourite"
+#~ msgstr "Favorit"
+
+#~ msgid "Registering account"
+#~ msgstr "S'està registrant el compte"
+
+#~ msgid "Example"
+#~ msgstr "Exemple"
+
+#~ msgid "Add to _favourites"
+#~ msgstr "Afegeix als _favorits"
+
+#~ msgid ""
+#~ "Customize your own nickname, the server and chatroom which you wish to "
+#~ "join."
+#~ msgstr ""
+#~ "Personalitzeu el vostre sobrenom, el servidor i sala de xat a la qual "
+#~ "voleu entrar."
+
+#~ msgid "Edit your chat room details:"
+#~ msgstr "Editeu els detalls de la sala de xat:"
+
+#~ msgid "Na_me:"
+#~ msgstr "No_m:"
+
+#~ msgid "New Chat Room"
+#~ msgstr "Sala de xat nova"
+
+#~ msgid ""
+#~ "Pick a saved chat room from the presets available below and click Join to "
+#~ "start chatting."
+#~ msgstr ""
+#~ "Seleccioneu una sala de xat desada de les predefinides a continuació i "
+#~ "feu clic en «Uneix-te» per a començar a xatejar."
+
+#~ msgid "Save _this chat room"
+#~ msgstr "Desa aques_ta sala de xat"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>S'ha demanat la informació, espereu, si us plau...</b>"
+
+#~ msgid "<span size=\"smaller\">Example: user@jabber.org</span>"
+#~ msgstr "<span size=\"smaller\">Exemple: usuari@jabber.org</span>"
+
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Exemple:</span>"
+
+#~ msgid "Account Name"
+#~ msgstr "Nom del compte"
+
+#~ msgid "Add a contact"
+#~ msgstr "Afegeix un contacte"
+
+#~ msgid "Connection Details"
+#~ msgstr "Detalls de la connexió"
+
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Teniu ja un compte configurat en un servidor?"
+
+#~ msgid "Enter a name for this account"
+#~ msgstr "Introduïu un nom per a aquest compte"
+
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr "Introduïu el port utilitzat en la connexió per a aquest compte"
+
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr "Introduïu el servidor utilitzat en la connexió per a aquest compte"
+
+#~ msgid "Enter the user's contact ID:"
+#~ msgstr "Introduïu l'ID de contacte de l'usuari:"
+
+#~ msgid "Enter your real name here"
+#~ msgstr "Introduïu ací el vostre nom real"
+
+#~ msgid "Finished"
+#~ msgstr "Finalitzat"
+
+#~ msgid "For increased security, enable this option"
+#~ msgstr "Per a més seguretat, habiliteu aquesta opció"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip és un client modern per al sistema de missatgeria instantània "
+#~ "Jabber.\n"
+#~ "\n"
+#~ "Aquest assistent vos ajudarà a configurar Gossip i connectar-vos al "
+#~ "vostre\n"
+#~ "servidor de Jabber favorit.\n"
+#~ "\n"
+#~ "Per començar, feu clic en «Endavant»."
+
+#~ msgid "Group:"
+#~ msgstr "Grup:"
+
+#~ msgid ""
+#~ "If you have another machine on your network which 'proxies' the "
+#~ "connection to the internet and you want to use it, enable this option"
+#~ msgstr ""
+#~ "Si teniu un altre ordinador que fa de «servidor intermediari» de la "
+#~ "connexió a Internet i el voleu utilitzar, habiliteu aquesta opció"
+
+#~ msgid ""
+#~ "If you need to set specific connection details, like a different server "
+#~ "or port, you can configure that here:"
+#~ msgstr ""
+#~ "Si necessiteu establir detalls de connexió específics, com un servidor o "
+#~ "port diferent, ho podeu configurar ací:"
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "Per a subscriure a les notificacions de presència de l'usuari, s'enviarà "
+#~ "una petició. Fins que s'aprove aquesta petició, l'usuari es mostrarà "
+#~ "sempre com «Desconnectat» a la vostra llista de contactes."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "A quin grup voleu afegir a aquest contacte?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "Jabber ID:"
+
+#~ msgid ""
+#~ "Leave this blank if you don't want your password stored on a public "
+#~ "machine. If you decide to do this, you will be prompted each time you "
+#~ "connect for a password"
+#~ msgstr ""
+#~ "Deixeu això en blanc si no voleu que s'emmagatzeme la vostra contrasenya "
+#~ "en un ordinador públic. Si decidiu fer això, se us preguntarà per la "
+#~ "contrasenya cada vegada que us connecteu"
+
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr "Premeu «Subscriu» per a demanar la recepció del seu estat"
+
+#~ msgid "Registering Account"
+#~ msgstr "S'està registrant el compte"
+
+#~ msgid "Resource:"
+#~ msgstr "Recurs:"
+
+#~ msgid "Sending request"
+#~ msgstr "S'està enviant la petició"
+
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>martyn@imendio.com</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Establiu l'àlias que voleu usar per a:\n"
+#~ "<b>martyn@imendio.com</b>\n"
+#~ "\n"
+#~ "Podeu obtenir informació del contacte des del servidor."
+
+#~ msgid "Web Site:"
+#~ msgstr "Pàgina web:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Benvinguts a Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Quin sistema de missatgeria instantània utilitza el contacte?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Quin és el vostre nom?"
+
+#~ msgid ""
+#~ "What name do you want to use to identify this account?\n"
+#~ "\n"
+#~ "This name could be something associated with the service provider, for "
+#~ "example, <b>Google</b>."
+#~ msgstr ""
+#~ "Quin nom voleu utilitzar per a identificar aquest compte?\n"
+#~ "\n"
+#~ "Aquest nom pot ser alguna cosa associada amb el proveidor del servei, per "
+#~ "exemple, <b>Google</b>."
+
+#~ msgid "What password do you want to use?"
+#~ msgstr "Quina contrasenya voleu utilitzar?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Quin nom d'usuari utilitzeu?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Quin nom d'usuari voleu utilitzar?"
+
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "A quin compte voleu afegir a aquest contacte?"
+
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Podeu canviar els paràmetres del vostre compte més endavant, seleccionant "
+#~ "l'element del menú «Edita->Comptes»."
+
+#~ msgid ""
+#~ "You need to set a name for the connection, for example, <b>Home</b> or "
+#~ "<b>Laptop</b>."
+#~ msgstr ""
+#~ "Heu d'establir un nom per a la connexió, per exemple <b>Casa</b> o "
+#~ "<b>Portàtil</b>."
+
+#~ msgid "Your Account"
+#~ msgstr "El vostre compte"
+
+#~ msgid "Your Identity"
+#~ msgstr "La vostra identitat"
+
+#~ msgid "Your new account has now been set up."
+#~ msgstr "S'ha configurat el vostre compte nou."
+
+#~ msgid "_Forget"
+#~ msgstr "_Oblida-la"
+
+#~ msgid "_Group Chat"
+#~ msgstr "Xat en _grup"
+
+#~ msgid "_No"
+#~ msgstr "_No"
+
+#~ msgid "_Search..."
+#~ msgstr "_Cerca..."
+
+#~ msgid "_Yes"
+#~ msgstr "_Sí"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Missatges d'estat preestablerts."
+
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Introduïu el vostre missatge d'invitació a:\n"
+#~ "%s"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Informació del contacte %s"
+
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/Infor_mació del contacte"
+
+#~ msgid "/Re_name Contact"
+#~ msgstr "/Rea_nomena el contacte"
+
+#~ msgid "/_Edit Groups"
+#~ msgstr "/_Edita els grups"
+
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "/_Visualitza converses prèvies"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Introduïu un àlias nou per al contacte\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Edita els grups per %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Registre de conversa"
+
+#~ msgid "Respond"
+#~ msgstr "Respon!"
+
+#~ msgid "Chat Rooms..."
+#~ msgstr "Sales de xat..."
+
+#~ msgid "_Hide Contact List"
+#~ msgstr "_Oculta la llista de contactes"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Sigues silenciós quan s'està absent"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Sigues silenciós quan s'està ocupat"
+
+#~ msgid "Height of main window"
+#~ msgstr "Alçada de la finestra principal"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "La posició X de la finestra principal."
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "La posició Y de la finestra principal."
+
+#~ msgid "The width of the main window."
+#~ msgstr "L'amplada de la finestra principal."
+
+#~ msgid "Whether spell checking should be turned on."
+#~ msgstr "Si s'hauria d'habilitar la correcció ortogràfica."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Amplada de la finestra principal"
+
+#~ msgid "X position of main window"
+#~ msgstr "Posició X de la finestra principal"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Posició Y de la finestra principal"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip, un client de missatgeria instantània"
+
+#~ msgid "Close this chat window"
+#~ msgstr "Tanca aquesta finestra de xat"
+
+#~ msgid "Requested Information"
+#~ msgstr "Informació sol·licitada"
+
+#~ msgid "Available..."
+#~ msgstr "Disponible..."
+
+#~ msgid "Busy..."
+#~ msgstr "Ocupat..."
+
+#~ msgid "Away..."
+#~ msgstr "Absent..."
+
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>So</b>"
+
+#~ msgid "Check spelling while I _type"
+#~ msgstr "Comprova l'ortografia mentre s'escriu"
+
+#~ msgid "Join _Group Chat..."
+#~ msgstr "Entra a un xat en _grup..."
+
+#~ msgid "Requested information."
+#~ msgstr "S'ha demanat la informació."
+
+#~ msgid "Requesting contact information, please wait..."
+#~ msgstr "S'està demanant la informació del contacte, espereu..."
+
+#~ msgid "/_Invite to Chat Conference"
+#~ msgstr "/_Convida a una conferència de xat"
+
+#~ msgid "Contact _Information"
+#~ msgstr "_Informació del contacte"
+
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - Comptes"
+
+#~ msgid "Por_t:"
+#~ msgstr "Por_t:"
+
+#~ msgid "Open"
+#~ msgstr "Obert"
+
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "No s'ha trobat el servidor que volieu utilitzar"
+
+#~ msgid "Connection to the server failed."
+#~ msgstr "Ha fallat la connexió al servidor."
+
+#~ msgid "Written by:"
+#~ msgstr "Escrit per:"
+
+#~ msgid "Translated by:"
+#~ msgstr "Traduït per:"
+
+#~ msgid "Account ID"
+#~ msgstr "ID del compte"
+
+#~ msgid "Last Error"
+#~ msgstr "Últim error"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sXat - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Mostra el _registre"
+
+#~ msgid "Afrikaans"
+#~ msgstr "Afrikaans"
+
+#~ msgid "Amharic"
+#~ msgstr "Amhàric"
+
+#~ msgid "Azerbaijani"
+#~ msgstr "Àzeri"
+
+#~ msgid "Belarusian"
+#~ msgstr "Bielorús"
+
+#~ msgid "Bulgarian"
+#~ msgstr "Búlgar"
+
+#~ msgid "Breton"
+#~ msgstr "Bretó"
+
+#~ msgid "Bosnian"
+#~ msgstr "Bosni"
+
+#~ msgid "Catalan"
+#~ msgstr "Català"
+
+#~ msgid "Czech"
+#~ msgstr "Txec"
+
+#~ msgid "Welsh"
+#~ msgstr "Gal·lès"
+
+#~ msgid "Danish"
+#~ msgstr "Danès"
+
+#~ msgid "German"
+#~ msgstr "Alemany"
+
+#~ msgid "German (Austria)"
+#~ msgstr "Alemany (Àustria)"
+
+#~ msgid "German (Germany)"
+#~ msgstr "Alemany (Alemanya)"
+
+#~ msgid "German (Swiss)"
+#~ msgstr "Alemany (Suïssa)"
+
+#~ msgid "English"
+#~ msgstr "Anglès"
+
+#~ msgid "English (Canadian)"
+#~ msgstr "Anglès (canadenc)"
+
+#~ msgid "English (British)"
+#~ msgstr "Anglès (britànic)"
+
+#~ msgid "English (American)"
+#~ msgstr "Anglès (americà)"
+
+#~ msgid "Esperanto"
+#~ msgstr "Esperanto"
+
+#~ msgid "Spanish"
+#~ msgstr "Castellà"
+
+#~ msgid "Estonian"
+#~ msgstr "Estonià"
+
+#~ msgid "Finnish"
+#~ msgstr "Finès"
+
+#~ msgid "French"
+#~ msgstr "Francès"
+
+#~ msgid "French (France)"
+#~ msgstr "Francès (França)"
+
+#~ msgid "French (Swiss)"
+#~ msgstr "Francès (Suïssa)"
+
+#~ msgid "Irish Gaelic"
+#~ msgstr "Gaèlic irlandès"
+
+#~ msgid "Scots Gaelic"
+#~ msgstr "Gaèlic escocès"
+
+#~ msgid "Manx Gaelic"
+#~ msgstr "Manx"
+
+#~ msgid "Hungarian"
+#~ msgstr "Hongarès"
+
+#~ msgid "Indonesian"
+#~ msgstr "Indonesi"
+
+#~ msgid "Italian"
+#~ msgstr "Italià"
+
+#~ msgid "Kannada"
+#~ msgstr "Kannada"
+
+#~ msgid "Kurdish"
+#~ msgstr "Kurd"
+
+#~ msgid "Limburgish"
+#~ msgstr "Limburguès"
+
+#~ msgid "Lithuanian"
+#~ msgstr "Lituà"
+
+#~ msgid "Latvian"
+#~ msgstr "Letó"
+
+#~ msgid "Maori"
+#~ msgstr "Maori"
+
+#~ msgid "Macedonian"
+#~ msgstr "Macedoni"
+
+#~ msgid "Malayalam"
+#~ msgstr "Malailam"
+
+#~ msgid "Mongolian"
+#~ msgstr "Mongol"
+
+#~ msgid "Marathi"
+#~ msgstr "Marati"
+
+#~ msgid "Malay"
+#~ msgstr "Malai"
+
+#~ msgid "Norwegian (Bokmal)"
+#~ msgstr "Noruec (Bokmål)"
+
+#~ msgid "Nepali"
+#~ msgstr "Nepalès"
+
+#~ msgid "Dutch"
+#~ msgstr "Holandès"
+
+#~ msgid "Norwegian"
+#~ msgstr "Noruec"
+
+#~ msgid "Norwegian (Nynorsk)"
+#~ msgstr "Noruec (Nynorsk)"
+
+#~ msgid "Norwegian (Nyorsk)"
+#~ msgstr "Norwegian (Nyorsk)"
+
+#~ msgid "Oriya"
+#~ msgstr "Oriya"
+
+#~ msgid "Punjabi"
+#~ msgstr "Panjabi"
+
+#~ msgid "Polish"
+#~ msgstr "Polonès"
+
+#~ msgid "Portuguese"
+#~ msgstr "Portuguès"
+
+#~ msgid "Portuguese (Portugal)"
+#~ msgstr "Portuguès (Portugal)"
+
+#~ msgid "Portuguese (Brazil)"
+#~ msgstr "Portuguès (Brasil)"
+
+# NOTA: Segons el Termcat (Josep)
+#~ msgid "Kinyarwanda"
+#~ msgstr "Kinyarwanda"
+
+#~ msgid "Slovak"
+#~ msgstr "Eslovac"
+
+#~ msgid "Slovenian"
+#~ msgstr "Eslovè"
+
+#~ msgid "Albanian"
+#~ msgstr "Albanès"
+
+#~ msgid "Serbian"
+#~ msgstr "Serbi"
+
+#~ msgid "Swedish"
+#~ msgstr "Suec"
+
+#~ msgid "Telugu"
+#~ msgstr "Telugu"
+
+#~ msgid "Turkmen"
+#~ msgstr "Turcman"
+
+#~ msgid "Wallon"
+#~ msgstr "Való"
+
+#~ msgid "Xhosa"
+#~ msgstr "Xhosa"
+
+# Nota: Segons el Termcat (Josep)
+#~ msgid "Yiddish"
+#~ msgstr "Jiddisch"
+
+#~ msgid "View Lo_g"
+#~ msgstr "Visualitza el re_gistre"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - Xat en grup"
+
+#~ msgid "Gossip - New Chatroom"
+#~ msgstr "Gossip - Sala de xat nova"
+
+#~ msgid "Idle"
+#~ msgstr "Inactiu"
+
+#~ msgid "Progress:"
+#~ msgstr "Progrés:"
+
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Gossip - Afegeix un contacte"
+
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "Gossip - Informació del contacte"
+
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - Edita els grups"
+
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - Compte nou"
+
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - Missatge nou"
+
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Gossip - Detalls personals"
+
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Gossip - Preferències"
+
+#~ msgid "Gossip - Spell Checker"
+#~ msgstr "Gossip - Verificador ortogràfic"
+
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - missatge d'estat"
+
+#~ msgid "Personal Details Saved!"
+#~ msgstr "S'han desat els detalls personals."
+
+#~ msgid "Waiting for server to respond, please wait..."
+#~ msgstr "S'està esperant a la resposta del servidor, espereu..."
+
+#~ msgid ""
+#~ "You can identify this account with a name, for example, <b>Home</b> or "
+#~ "<b>Work</b>. Choose a name for this account:"
+#~ msgstr ""
+#~ "Podeu identificar aquest compte amb un nom, com per exemple, <b>Casa</b> "
+#~ "o <b>Feina</b>. Seleccioneu un nom per a aquest compte:"
+
+#~ msgid "Redirect"
+#~ msgstr "Redirecció"
+
+#~ msgid "Bad Request"
+#~ msgstr "Petició incorrecta"
+
+#~ msgid "Not Authorized"
+#~ msgstr "No autoritzat"
+
+#~ msgid "Payment Required"
+#~ msgstr "Es requereix pagament"
+
+#~ msgid "Not Found"
+#~ msgstr "No s'ha trobat"
+
+#~ msgid "Not Allowed"
+#~ msgstr "No permés"
+
+#~ msgid "Not Acceptable"
+#~ msgstr "No acceptable"
+
+#~ msgid "Request Timeout"
+#~ msgstr "Temps d'espera esgotat per a la petició"
+
+#~ msgid "Conflict"
+#~ msgstr "Conflicte"
+
+#~ msgid "Remote Server Error"
+#~ msgstr "Error d'un servidor remot"
+
+#~ msgid "Service Unavailable"
+#~ msgstr "Servei no disponible"
+
+#~ msgid "Edit List..."
+#~ msgstr "Edita la llista..."
+
+#~ msgid "Custom"
+#~ msgstr "Personalitzat"
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip tractarà d'utilitzar el vostre compte:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Gossip tractarà d'enregistrar el compte:"
+
+#~ msgid ""
+#~ "If you continue, you will not be able to talk to the 1 contact you are "
+#~ "using this account for!"
+#~ msgstr ""
+#~ "Si continueu, no podreu parlar amb el contacte amb qui esteu utilitzant "
+#~ "aquest compte!"
+
+#~ msgid ""
+#~ "If you continue, you will not be able to add or talk to contacts using "
+#~ "this transport!"
+#~ msgstr ""
+#~ "Si continueu, no podreu afegir o parlar amb els contactes que utilitzen "
+#~ "aquest transport!"
+
+#~ msgid ""
+#~ "If you continue, you will not be able to talk to the %d contacts you are "
+#~ "using this account for!"
+#~ msgstr ""
+#~ "Si continueu, no podreu parlar amb els %d contactes amb els quals esteu "
+#~ "utilitzant aquest compte!"
+
+#~ msgid "Searching Local Services..."
+#~ msgstr "S'estan cercant els serveis locals..."
+
+#~ msgid "Searching Local Services (%d of %d)"
+#~ msgstr "S'estan cercant els serveis locals (%d de %d)"
+
+#~ msgid "Talking to available services..."
+#~ msgstr "S'està communicant amb els serveis disponibles..."
+
+#~ msgid "Searching 3rd Party Services..."
+#~ msgstr "S'estan cercant serveis de tercers..."
+
+#~ msgid "Searching 3rd Party Services (%d of %d)"
+#~ msgstr "S'estan cercant serveis de tercers (%d de %d)"
+
+#~ msgid "Sorry, no services found at this time."
+#~ msgstr "No s'ha trobat cap servei ara mateix."
+
+#~ msgid ""
+#~ "Currently no providers are available for the account type you are trying "
+#~ "to configure. Please try again later."
+#~ msgstr ""
+#~ "Actualment no hi ha proveïdors disponibles per al tipus de compte que "
+#~ "esteu intentant configurar. Intenteu-ho de nou més tard."
+
+#~ msgid "This will be used to configure your account details."
+#~ msgstr ""
+#~ "Això s'utilitzarà per a configurar els vostres paràmetres de compte."
+
+#~ msgid "Unable to Register"
+#~ msgstr "No s'ha pogut registrar"
+
+#~ msgid "The service confirmed the user '%s' is already registered."
+#~ msgstr "El servei ha confirmat que l'usuari «%s» ja està registrat."
+
+#~ msgid ""
+#~ "When registering a token is provided by the service to register with, in "
+#~ "this case, the token has not been sent."
+#~ msgstr ""
+#~ "Quan vos registreu, el servei amb qui us esteu registrent proporciona un "
+#~ "testimoni, però en aquest cas no s'ha enviat cap."
+
+#~ msgid "Please try again, or perhaps another service."
+#~ msgstr "Proveu-ho de nou, o potser un altre servei."
+
+#~ msgid "Configuring Roster"
+#~ msgstr "S'està configurant el roster"
+
+#~ msgid "Registration Successful!"
+#~ msgstr "El registre ha tingut èxit!"
+
+#~ msgid "You are now able to add contacts using this transport."
+#~ msgstr "Ara podeu afegir contactes utilitzant aquest transport."
+
+#~ msgid "Service"
+#~ msgstr "Servei"
+
+#~ msgid "Checking your local service first..."
+#~ msgstr "S'està comprovant el vostre servei local primer..."
+
+#~ msgid ""
+#~ "<b>Configuring your new service...</b>\n"
+#~ "This will take a few moments, please wait."
+#~ msgstr ""
+#~ "<b>S'està configurant el servei nou...</b>\n"
+#~ "Això trigarà uns moments, espereu."
+
+#~ msgid "Registering With Service"
+#~ msgstr "S'està registrant amb el servei"
+
+#~ msgid "Saving personal details, please wait..."
+#~ msgstr "S'estan desant els detalls personals, espereu..."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "De:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Gossip - Missatge rebut"
+
+#~ msgid "In reply to:"
+#~ msgstr "En resposta a:"
+
+#~ msgid "To:"
+#~ msgstr "A:"
+
+#~ msgid "_Reply..."
+#~ msgstr "_Respon..."
+
+#~ msgid "_Send"
+#~ msgstr "_Envia"
+
+#~ msgid "<b>Connect to server</b>"
+#~ msgstr "<b>Connecta a un servidor</b>"
+
+#~ msgid "C_onnect"
+#~ msgstr "C_onnecta"
+
+#~ msgid "Connect _Server:"
+#~ msgstr "_Servidor de connexió:"
+
+#~ msgid "_Resource:"
+#~ msgstr "_Recurs:"
+
+#~ msgid "Imendio Gossip - Group Chat"
+#~ msgstr "Imendio Gossip - Xat en grup"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Personal information</b>"
+#~ msgstr "<b>Informació personal</b>"
+
+#~ msgid "<b>Recommended Services</b>"
+#~ msgstr "<b>Serveis recomanats</b>"
+
+#~ msgid ""
+#~ "<b>Requested service requirements...</b>\n"
+#~ "This will take a few moments, please wait."
+#~ msgstr ""
+#~ "<b>S'han demanat els requeriments del servei...</b>\n"
+#~ "Això trigarà uns moments, espereu."
+
+#~ msgid "<b>Spell Checking</b>"
+#~ msgstr "<b>Correció ortogràfica</b>"
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Informació no disponible</i>"
+
+#~ msgid "Add Another Account"
+#~ msgstr "Afegeix un altre compte"
+
+#~ msgid "Choose a Server"
+#~ msgstr "Seleccioneu un servidor"
+
+#~ msgid "Choose from list:"
+#~ msgstr "Seleccioneu de la llista:"
+
+#~ msgid "Configure Transport"
+#~ msgstr "Configura el transport"
+
+#~ msgid "Configure Transports"
+#~ msgstr "Configura els transports"
+
+#~ msgid "Configuring Service"
+#~ msgstr "Configuració del servei"
+
+#~ msgid "If you prefer, you can specify your own service:"
+#~ msgstr "Si ho preferiu, podeu especificar el vostre propi servei:"
+
+#~ msgid "Information about ..."
+#~ msgstr "Informació sobre..."
+
+#~ msgid "Jabber Account"
+#~ msgstr "Compte Jabber"
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "Nick name:"
+#~ msgstr "Sobrenom:"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "A quin servidor teniu un compte Jabber?"
+
+#~ msgid "Please complete the details below to set up your account: "
+#~ msgstr "Introduïu els detalls a sota per a configurar el vostre compte:"
+
+#~ msgid "Populating services..."
+#~ msgstr "S'estan emplenant els serveis..."
+
+#~ msgid "Remove Account"
+#~ msgstr "Supimeix el compte"
+
+#~ msgid "Service Details"
+#~ msgstr "Detalls del servei"
+
+#~ msgid "Status Message"
+#~ msgstr "Missatge d'estat"
+
+#~ msgid ""
+#~ "This wizard will allow you to configure your account settings for another "
+#~ "protocol. "
+#~ msgstr ""
+#~ "Aquest auxiliar vos permetrà configurar els vostres paràmetres de compte "
+#~ "per a un altre protocol. "
+
+#~ msgid "Transport Accounts"
+#~ msgstr "Comptes de transports"
+
+#~ msgid "Use a different server"
+#~ msgstr "Utilitza un servidor diferent"
+
+#~ msgid "Which protocol would you like to set up? "
+#~ msgstr "Quin protocol voleu configurar? "
+
+#~ msgid ""
+#~ "You can set the status presets which appear in the presence menu on the "
+#~ "main window here."
+#~ msgstr ""
+#~ "Ací podeu establir els estats preestablerts que apareixen al menú de "
+#~ "presència de la finestra principal."
+
+#~ msgid "You currently have the following accounts set up:"
+#~ msgstr "Actualment teniu els comptes següents configurats:"
+
+#~ msgid "_Connect..."
+#~ msgstr "_Connecta..."
+
+#~ msgid "_Jabber ID of new contact:"
+#~ msgstr "_Jabber ID del nou contacte:"
+
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "Quin missatge de petició voleu enviar a %s?"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>Sales de xat disponibles</b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>Informació sobre la sala de xat</b>"
+
+#~ msgid "N_ickname:"
+#~ msgstr "Àl_ies:"
+
+#~ msgid "R_emove"
+#~ msgstr "_Elimina"
+
+#~ msgid "_Add"
+#~ msgstr "_Afegeix"
+
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>Missatges d'estat preestablerts</b>"
+
+#~ msgid "Add to your contact list"
+#~ msgstr "Afegeix a la llista de contactes"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Quin missatge de petició voleu enviar a ...?"
+
+#~ msgid "Sound"
+#~ msgstr "So"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Assegureu-vos que la informació del vostre compte és correcta."
+
+#~ msgid "%s wants to be notified of your status."
+#~ msgstr "%s vol ser notificat del vostre estat."
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Vos heu desconnectat del servidor. Voleu reconnectar?"
+
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr ""
+#~ "Assegureu-vos que la informació del vostre compte és correcta. El "
+#~ "servidor també pot no estar disponible en aquest moment."
+
+#~ msgid "Details:"
+#~ msgstr "Detalls:"
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "S'ha produït un error mentre es xatejava amb %s."
+
+#~ msgid "Discover Services"
+#~ msgstr "Descobreix serveix"
+
+#~ msgid "_AIM"
+#~ msgstr "_AIM"
+
+#~ msgid "_ICQ"
+#~ msgstr "_ICQ"
+
+#~ msgid "_MSN"
+#~ msgstr "_MSN"
+
+#~ msgid "_Yahoo!"
+#~ msgstr "_Yahoo!"
+
+#~ msgid "subscription_label"
+#~ msgstr "etiqueta de subscripció"
+
+#~ msgid "Gossip Website"
+#~ msgstr "Lloc web del Gossip"
+
+#~ msgid "Gossip, Jabber Client"
+#~ msgstr "Gossip, client de Jabber"
+
+#~ msgid "About to leave..."
+#~ msgstr "Estic a punt de sortir..."
+
+#~ msgid "Autoaway message"
+#~ msgstr "Missatge d'absència automàtica"
+
+#~ msgid "Busy messages"
+#~ msgstr "Missatge d'ocupat"
+
+#~ msgid "Message to show before going away"
+#~ msgstr "Missatge a mostrar abans de canviar a absent"
+
+#~ msgid "Not at the computer"
+#~ msgstr "No estic a l'ordinador"
+
+#~ msgid "Enter the new available message"
+#~ msgstr "Introduïu el nou missatge per «Disponible»"
+
+#~ msgid "Enter the new busy message"
+#~ msgstr "Introduïu el nou missatge per «Ocupat»"
+
+#~ msgid "Enter the new away message"
+#~ msgstr "Introduïu el nou missatge per «Absent»"
+
+#~ msgid "<b>Preset messages for quickly setting your status</b>"
+#~ msgstr ""
+#~ "<b>Preestableix missatges per a establir ràpidament el vostre estat</b>"
+
+#~ msgid "Enter the new message:"
+#~ msgstr "Introduïu el nou missatge:"
+
+#~ msgid "Leave"
+#~ msgstr "Surt"
+
+#~ msgid "New Status Message"
+#~ msgstr "Nou missatge d'estat"
+
+#~ msgid "Reason for being busy:"
+#~ msgstr "Raó per estar ocupat:"
+
+#~ msgid "Reason for leaving:"
+#~ msgstr "Raó per sortir:"
+
+#~ msgid "Just about to leave..."
+#~ msgstr "Estic a punt de sortir..."
+
+#~ msgid "Custom Busy Message..."
+#~ msgstr "Missatge «Ocupat» personalitzat..."
+
+#~ msgid "Leave..."
+#~ msgstr "Surt..."
+
+#~ msgid "New Busy Message"
+#~ msgstr "Nou missatge d'ocupat"
+
+#~ msgid "New Away Message"
+#~ msgstr "Nou missatge d'absència"
+
+#~ msgid "Working"
+#~ msgstr "Treballant"
+
+#~ msgid "Eating"
+#~ msgstr "Menjant"
+
+#~ msgid "Sleeping"
+#~ msgstr "Dormint"
+
+#~ msgid "Preset messages for quickly setting busy status."
+#~ msgstr "Preestableix missatges per a establir ràpidament estats d'ocupat."
+
+#~ msgid ""
+#~ "Note: contacts can belong to multiple groups or they can be in no group "
+#~ "at all."
+#~ msgstr ""
+#~ "Nota: els contactes poden estar en múltiples grups o poden no estar en "
+#~ "cap grup."
+
+#~ msgid "As _Windows"
+#~ msgstr "Com _finestres"
+
+#~ msgid "As a _List"
+#~ msgstr "Com una _llista"
+
+#~ msgid "_Go"
+#~ msgstr "_Vés"
+
+#~ msgid "Open conversations in single window with list view"
+#~ msgstr "Obre els xats a una sola finestra amb una vista de llista"
+
+#~ msgid "Timestamp all messages"
+#~ msgstr "Fica marques de temps a tots els missatges"
+
+#~ msgid "Whether or not to timestamp all messages in conversations."
+#~ msgstr ""
+#~ "Si s'ha de ficar marques de temps o no a tots els missatges als xats."
+
+#~ msgid "[Eating,Sleeping]"
+#~ msgstr "[Menjant,Dormint]"
+
+#~ msgid "[Working]"
+#~ msgstr "[Treballant]"
+
+#~ msgid "Custom Away Message..."
+#~ msgstr "Missatge d'absència personalitzat..."
+
+#~ msgid "Open conversations in a single window with _list view"
+#~ msgstr "Obre els xats en una sola finestra amb una vista de _llista"
+
+#~ msgid ""
+#~ "These messages are used to describe your status when you're about to "
+#~ "leave and when you're away."
+#~ msgstr ""
+#~ "Aquests missatges s'utilitzen per a descriure el vostre estat quan esteu "
+#~ "a punt de sortir i quan esteu absent."
+
+#~ msgid "Use com_pact conversation style"
+#~ msgstr "Utilitza l'estil de xat com_pacte"
+
+#~ msgid "Use sounds to _notify when new messages arrive"
+#~ msgstr "Utilitza sons per a _notificar quan arriben missatges nous"
+
+#~ msgid "_Timestamp all messages"
+#~ msgstr "Fica _marques de temps a tots els missatges"
+
+#~ msgid "%sChat"
+#~ msgstr "%sXat"
+
+#~ msgid "Offline "
+#~ msgstr "Desconnectat"
+
+#~ msgid "Others"
+#~ msgstr "Altres"
+
+#~ msgid "Get _Info"
+#~ msgstr "Obté _informació"
+
+#~ msgid "I'm here"
+#~ msgstr "Estic ací"
+
+#~ msgid "I'm not here right now"
+#~ msgstr "No estic ací ara mateix"
+
+#~ msgid "Available:"
+#~ msgstr "Disponible:"
+
+#~ msgid "Use ta_bs instead of windows for conversations"
+#~ msgstr "Utilitza pes_tanyes en comptes de finestres per als xats"
+
+#~ msgid "Auto away enabled"
+#~ msgstr "Absència automàtica habilitada"
+
+#~ msgid "Extended autoaway time"
+#~ msgstr "Temps per a canviar a absent fa estona automàticament"
+
+#~ msgid ""
+#~ "The number of minutes of idle time before automatically going into \"away"
+#~ "\" mode."
+#~ msgstr ""
+#~ "El nombre de minuts d'inactivitat abans de canviar automàticament al mode "
+#~ "«absent»."
+
+#~ msgid ""
+#~ "The number of minutes of idle time before automatically going into "
+#~ "\"extended away\" mode."
+#~ msgstr ""
+#~ "El nombre de minuts d'inactivitat abans de canviar automàticament al mode "
+#~ "«absent fa estona»."
+
+#~ msgid "Timestamp messages"
+#~ msgstr "Posa marques de temps als missatges"
+
+#~ msgid ""
+#~ "Whether or not to go into \"away\" mode automatically when a certain time "
+#~ "of idling has passed."
+#~ msgstr ""
+#~ "Si s'ha de canviar al mode «absent» automàticament quan ha passat una "
+#~ "certa quantitat de temps."
+
+#~ msgid "Free to chat"
+#~ msgstr "Disponible per xatejar"
+
+#~ msgid "Extended away"
+#~ msgstr "Absent fa estona"
+
+#~ msgid "<b>Additional information</b>"
+#~ msgstr "<b>Informació addicional</b>"
+
+#~ msgid "<b>Auto away</b>"
+#~ msgstr "<b>Absència automàtica</b>"
+
+#~ msgid "<b>Jabber ID:</b>"
+#~ msgstr "<b>Jabber ID:</b>"
+
+#~ msgid "<b>Setup Finished</b>"
+#~ msgstr "<b>Configuració finalitzada</b>"
+
+#~ msgid "Automatically enter away mode during inactivity"
+#~ msgstr "Entra en mode «Absent» automàticament quan s'està inactiu"
+
+#~ msgid "Enter away mode after"
+#~ msgstr "Entra en mode «Absent» després de"
+
+#~ msgid "I'm away eating dinner, bbiab..."
+#~ msgstr "Estic sopant, tornaré aviat..."
+
+#~ msgid "Set the status you want to use"
+#~ msgstr "Estableix l'estat que voleu utilitzar"
+
+#~ msgid "_Approve"
+#~ msgstr "_Aprova"
+
+#~ msgid "_Defer"
+#~ msgstr "Retar_da"
+
+#~ msgid "minutes"
+#~ msgstr "minuts"
+
+#~ msgid "Default Account"
+#~ msgstr "Compte predeterminat"
+
+#~ msgid "Could not open the address \"%s\": %s"
+#~ msgstr "No s'ha pogut obrir l'adreça «%s»: %s"
+
+#~ msgid "<b>Available accounts</b>"
+#~ msgstr "<b>Comptes disponibles</b>"
+
+#~ msgid "What request message do you want to send to <b>micke</b>?"
+#~ msgstr "Quin missatge de petició voleu enviar a <b>micke</b>?"
+
+#~ msgid "Operating system:"
+#~ msgstr "Sistema operatiu:"
diff --git a/trunk/po/cs.po b/trunk/po/cs.po
new file mode 100644
index 000000000..e1a763c26
--- /dev/null
+++ b/trunk/po/cs.po
@@ -0,0 +1,1924 @@
+# Czech translation of empathy.
+# Copyright (C) 2003, 2004, 2008 the author(s) of empathy.
+# Copyright (C) 2003, 2004 Miloslav Trmac <mitr@volny.cz>.
+# This file is distributed under the same license as the empathy package.
+# Miloslav Trmac <mitr@volny.cz>, 2003, 2004.
+# Lucas Lommer <llommer@svn.gnome.org>, 2008.
+# Petr Kovar <pknbe@volny.cz>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-07 01:47+0200\n"
+"PO-Revision-Date: 2008-05-07 01:44+0100\n"
+"Last-Translator: Petr Kovar <pknbe@volny.cz>\n"
+"Language-Team: Czech <gnome-cs-list@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Instant Messenger"
+
+#: ../data/empathy.desktop.in.in.h:2
+#, fuzzy
+msgid "Send and receive instant messages"
+msgstr "Přednastavené zprávy o stavu"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Checks if Empathy should auto-connect on startup"
+msgstr "Ke kterému účtu se připojit při startu"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+#, fuzzy
+msgid "Compact contact list"
+msgstr "Přidat do vašeho seznamu kontaktů"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:12
+#, fuzzy
+msgid "Enable sound when away"
+msgstr "Zakázat zvuky, když jsem _pryč"
+
+#: ../data/empathy.schemas.in.h:13
+#, fuzzy
+msgid "Enable sound when busy"
+msgstr "Zakázat zvuky, když jsem _zaneprázdněn"
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Gossip - Odeslat zprávu"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Skrýt hlavní okno"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Skrýt hlavní okno."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+#, fuzzy
+msgid "Show avatars"
+msgstr "_Zobrazit seznam kontaktů"
+
+#: ../data/empathy.schemas.in.h:20
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "Výška hlavního okna."
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Zobrazovat odpojené kontakty"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+#, fuzzy
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Toto jméno se bude používat pro vaši identifikaci v oknech diskusí."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Používat grafické smajlíky"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Používat zvuky upozornění"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically log in to your accounts on "
+"startup."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first Empathy run."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Jestli převádět smajlíky v konverzacích na grafické smajlíky."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Jestli přehrávat zvuk, když přijdou zprávy."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Jestli přehrávat zvuky, když jsem pryč."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Jestli přehrávat zvuky, když jsem zaneprázdněn."
+
+#: ../data/empathy.schemas.in.h:36
+#, fuzzy
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Jestli přehrávat zvuk, když přijdou zprávy."
+
+#: ../data/empathy.schemas.in.h:37
+#, fuzzy
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Jestli zobrazovat odpojené kontakty v seznamu kontaktů."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Jestli zobrazovat odpojené kontakty v seznamu kontaktů."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:40
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Jestli zobrazovat odpojené kontakty v seznamu kontaktů."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/empathy-tp-contact-list.c:665 ../src/empathy.c:188
+msgid "People nearby"
+msgstr ""
+
+#: ../libempathy/empathy-utils.c:466
+msgid "Available"
+msgstr "K dispozici"
+
+#: ../libempathy/empathy-utils.c:468
+msgid "Busy"
+msgstr "Zaneprázdněn"
+
+#: ../libempathy/empathy-utils.c:471
+msgid "Away"
+msgstr "Pryč"
+
+#: ../libempathy/empathy-utils.c:473
+msgid "Hidden"
+msgstr ""
+
+#: ../libempathy/empathy-utils.c:476
+msgid "Offline"
+msgstr "Odpojen"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:335
+msgid "All"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget.c:284
+#: ../libempathy-gtk/empathy-account-widget.c:329
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+#, fuzzy
+msgid "<b>Advanced</b>"
+msgstr "Vzhled"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+#, fuzzy
+msgid "Pass_word:"
+msgstr "Heslo:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+#, fuzzy
+msgid "Screen _Name:"
+msgstr "Jméno:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+#, fuzzy
+msgid "_Port:"
+msgstr "_Port:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+#: ../src/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Server:"
+
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+#, fuzzy
+msgid "_Charset:"
+msgstr "_Diskuse"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:245
+msgid "New Network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+#, fuzzy
+msgid "<b>Network</b>"
+msgstr "Stav"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+#, fuzzy
+msgid "<b>Servers</b>"
+msgstr "<b>Nastavení účtu</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+#, fuzzy
+msgid "Charset:"
+msgstr "Diskuse"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+#, fuzzy
+msgid "Network:"
+msgstr "Grafika od:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Přezdívka:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+#, fuzzy
+msgid "Password:"
+msgstr "Heslo:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+#, fuzzy
+msgid "Quit message:"
+msgstr "_Zprávy o stavu"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+#, fuzzy
+msgid "Real name:"
+msgstr "Jméno uživatele:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+#, fuzzy
+msgid "<b>Override server settings</b>"
+msgstr "<b>Nastavení účtu</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Pri_ority:"
+msgstr "_Port:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "Reso_urce:"
+msgstr "Z_droj:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+#, fuzzy
+msgid "Use old SS_L"
+msgstr "Použít staré šifrování (SS_L)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+#, fuzzy
+msgid "_Email:"
+msgstr "E-mail"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+#, fuzzy
+msgid "_First Name: "
+msgstr "Jméno:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "ID _Jabberu:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+#, fuzzy
+msgid "_Last Name:"
+msgstr "Jméno:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../src/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Přezdívka:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+#, fuzzy
+msgid "_Published Name:"
+msgstr "Jméno:"
+
+#. look up the DNS SRV record at the service's domain for the host name of a STUN server.
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+#, fuzzy
+msgid "Discover STUN"
+msgstr "Vyhledat služby"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+#, fuzzy
+msgid "Stun Server:"
+msgstr "Server:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+msgid "Stun port:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+#, fuzzy
+msgid "_Username:"
+msgstr "Jméno:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+#, fuzzy
+msgid "J_apan server:"
+msgstr "_Server:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Ignore conference and chatroom invitations"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Room List locale:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:226
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:230
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Nastavení účtu</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:238
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:244
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Nastavení účtu</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:424
+msgid "Enabled"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:434
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "Accounts"
+msgstr "Účet Jabberu"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:916
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:922
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Oblíbené:</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>Nastavení účtu</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Diskuse"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+#, fuzzy
+msgid "Type:"
+msgstr "_Téma:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:457
+msgid "Select Your Avatar Image"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:460
+msgid "No Image"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:520
+msgid "Images"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:524
+msgid "All Files"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-avatar-image.c:294
+msgid "Click to enlarge"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:522
+#, fuzzy
+msgid "offline"
+msgstr "Odpojen"
+
+#: ../libempathy-gtk/empathy-chat.c:525
+#, fuzzy
+msgid "invalid contact"
+msgstr "Přidat kontakt"
+
+#: ../libempathy-gtk/empathy-chat.c:528
+msgid "permission denied"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:531
+#, fuzzy
+msgid "too long message"
+msgstr "_Nová zpráva..."
+
+#: ../libempathy-gtk/empathy-chat.c:534
+msgid "not implemented"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:537
+#, fuzzy
+msgid "unknown"
+msgstr "Neznámá chyba"
+
+#: ../libempathy-gtk/empathy-chat.c:541
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:571
+#, fuzzy, c-format
+msgid "Topic set to: %s"
+msgstr "_Téma:"
+
+#: ../libempathy-gtk/empathy-chat.c:573
+msgid "No topic defined"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:979
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:1026
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:1127
+#, c-format
+msgid "%s has joined the room"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:1130
+#, c-format
+msgid "%s has left the room"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:1244 ../src/empathy.c:70
+#: ../src/empathy-call-window.c:389
+msgid "Disconnected"
+msgstr "Odpojen"
+
+#: ../libempathy-gtk/empathy-chat.c:1619
+msgid "Connected"
+msgstr "Připojen"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+#, fuzzy
+msgid "<b>Topic:</b>"
+msgstr "<b>Oblíbené:</b>"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+#, fuzzy
+msgid "Group Chat"
+msgstr "Gossip - Diskuse"
+
+#: ../libempathy-gtk/empathy-chat-view.c:430
+msgid "_Copy Link Address"
+msgstr "_Kopírovat adresu odkazu"
+
+#: ../libempathy-gtk/empathy-chat-view.c:438
+msgid "_Open Link"
+msgstr "_Otevřít odkaz"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:180
+#, fuzzy
+msgid "Personal Information"
+msgstr "Osobní informace"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+#, fuzzy
+msgid "Edit Contact Information"
+msgstr "_Informace o kontaktu"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:186
+#, fuzzy
+msgid "Contact Information"
+msgstr "_Informace o kontaktu"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:281
+msgid "I would like to add you to my contact list."
+msgstr "Rád bych vás přidal do svého seznamu kontaktů."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:305
+#, fuzzy
+msgid "New Contact"
+msgstr "_Přidat kontakt..."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "_Rozhodnout se později"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+#, fuzzy
+msgid "Subscription Request"
+msgstr "Požadavek na přihlášení"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1164
+#, fuzzy, c-format
+msgid "Do you really want to remove the group '%s'?"
+msgstr ""
+"Chcete odstranit kontakt\n"
+"%s\n"
+"ze svého seznamu kontaktů?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1166
+msgid "Removing group"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1213
+#: ../libempathy-gtk/empathy-contact-list-view.c:1293
+msgid "_Remove"
+msgstr "_Odstranit"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1243
+#, fuzzy, c-format
+msgid "Do you really want to remove the contact '%s'?"
+msgstr ""
+"Chcete odstranit kontakt\n"
+"%s\n"
+"ze svého seznamu kontaktů?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1245
+#, fuzzy
+msgid "Removing contact"
+msgstr "/_Odstranit kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1250
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-menu.c:108
+#: ../src/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_Diskuse"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:129
+#, fuzzy
+msgid "_Call"
+msgstr "_Diskuse"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:168
+#: ../src/empathy-main-window.glade.h:17
+#, fuzzy
+msgid "_View Previous Conversations"
+msgstr "_Konverzace"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:196
+#, fuzzy
+msgid "Infor_mation"
+msgstr "_Informace o kontaktu"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:223
+#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.c:694
+msgid "Select"
+msgstr "Vybrat"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:704
+#: ../src/empathy-main-window.c:628
+msgid "Group"
+msgstr "Skupina"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+#, fuzzy
+msgid "<b>Client Information</b>"
+msgstr "Informace o klientovi"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+#, fuzzy
+msgid "<b>Contact Details</b>"
+msgstr "Stav"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+#, fuzzy
+msgid "<b>Contact</b>"
+msgstr "Stav"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+#, fuzzy
+msgid "<b>Groups</b>"
+msgstr "<b>Oblíbené:</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+#: ../src/empathy-chatrooms-window.glade.h:1
+#: ../src/empathy-new-chatroom-dialog.glade.h:1
+#, fuzzy
+msgid "Account:"
+msgstr "Účet Jabberu"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Klient:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+#, fuzzy
+msgid "Contact information"
+msgstr "_Informace o kontaktu"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "E-mail"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+#, fuzzy
+msgid "Fullname:"
+msgstr "Jméno:"
+
+#. Identifier to connect to Instant Messaging network
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Identifier:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+#, fuzzy
+msgid "Information requested..."
+msgstr "<b>Požádal jsem o informace, čekejte prosím...</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid "OS:"
+msgstr "OS:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Version:"
+msgstr "Verze:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
+msgid "Web site:"
+msgstr "WWW stránka:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:284
+#, fuzzy
+msgid "new server"
+msgstr "Připojit se k _serveru:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:513
+#, fuzzy
+msgid "Server"
+msgstr "Server:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:528
+#, fuzzy
+msgid "Port"
+msgstr "_Port:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:541
+msgid "SSL"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+#, fuzzy
+msgid "Account"
+msgstr "Účet Jabberu"
+
+#: ../libempathy-gtk/empathy-log-window.c:504 ../src/empathy-chat-window.c:275
+#, fuzzy
+msgid "Conversation"
+msgstr "_Konverzace"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+#, fuzzy
+msgid "Date"
+msgstr "Diskuse"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+#, fuzzy
+msgid "Conversations"
+msgstr "_Konverzace"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+#, fuzzy
+msgid "Previous Conversations"
+msgstr "_Konverzace"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:5
+#, fuzzy
+msgid "Search"
+msgstr "_Hledat..."
+
+#. Searching *for* something
+#: ../libempathy-gtk/empathy-log-window.glade.h:7
+#, fuzzy
+msgid "_For:"
+msgstr "_Port:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+#: ../src/empathy-chat-window.glade.h:2
+msgid "Chat"
+msgstr "Diskuse"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+#, fuzzy
+msgid "Contact ID:"
+msgstr "_Přidat kontakt..."
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+#, fuzzy
+msgid "New Conversation"
+msgstr "_Konverzace"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:685
+#, fuzzy
+msgid "Custom messages..."
+msgstr "Zpráva požadavku"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+#, fuzzy
+msgid "Custom message"
+msgstr "Zpráva požadavku"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Message:"
+msgstr "_Nová zpráva..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+#, fuzzy
+msgid "Save message"
+msgstr "Zpráva o stavu"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+#, fuzzy
+msgid "Status:"
+msgstr "Stav"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:88
+msgid "Word"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:265
+msgid "Suggestions for the word"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+#, fuzzy
+msgid "Spell Checker"
+msgstr "Gossip - Odeslat zprávu"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:745
+#: ../libempathy-gtk/empathy-theme-irc.c:293
+msgid "%A %d %B %Y"
+msgstr "%A %d. %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:73
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-theme-manager.c:74
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-theme-manager.c:75
+#, fuzzy
+msgid "Clean"
+msgstr "_Vymazat"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:76
+msgid "Blue"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1326
+msgid "Unable to open URI"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+#, fuzzy
+msgid "Croatian"
+msgstr "_Konverzace"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+#, fuzzy
+msgid "Georgian"
+msgstr "Verze:"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+#, fuzzy
+msgid "Persian"
+msgstr "Verze:"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+#, fuzzy
+msgid "Western"
+msgstr "WWW stránka:"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+#, fuzzy
+msgid "Vietnamese"
+msgstr "Jméno uživatele:"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr ""
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr ""
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr ""
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+#, fuzzy
+msgid "_About"
+msgstr "_Přijmout"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+#, fuzzy
+msgid "_Information"
+msgstr "_Informace o kontaktu"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+#: ../src/empathy-main-window.glade.h:15
+msgid "_Preferences"
+msgstr "_Nastavení"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+#, fuzzy
+msgid "Presence"
+msgstr "_Nastavení"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:106
+msgid "Set your own presence"
+msgstr ""
+
+#: ../src/empathy.c:73
+msgid "Invalid handle"
+msgstr ""
+
+#: ../src/empathy.c:76
+#, fuzzy
+msgid "No matching connection"
+msgstr "Nemohu se připojit"
+
+#: ../src/empathy.c:79
+#, fuzzy
+msgid "Invalid account"
+msgstr "Účet Jabberu"
+
+#: ../src/empathy.c:82
+msgid "Presence failure"
+msgstr ""
+
+#: ../src/empathy.c:85
+#, fuzzy
+msgid "No accounts"
+msgstr "Účet Jabberu"
+
+#: ../src/empathy.c:88 ../src/empathy-main-window.c:896
+msgid "Network error"
+msgstr ""
+
+#: ../src/empathy.c:91
+#, fuzzy
+msgid "Contact does not support voice"
+msgstr "%s se odpojil"
+
+#: ../src/empathy.c:94
+#, fuzzy
+msgid "Lowmem"
+msgstr "Domů"
+
+#: ../src/empathy.c:97
+msgid "Channel request generic error"
+msgstr ""
+
+#: ../src/empathy.c:100
+msgid "Channel banned"
+msgstr ""
+
+#: ../src/empathy.c:103
+msgid "Channel full"
+msgstr ""
+
+#: ../src/empathy.c:106
+msgid "Channel invite only"
+msgstr ""
+
+#: ../src/empathy.c:109
+#, fuzzy
+msgid "Unknown error code"
+msgstr "Neznámá chyba"
+
+#: ../src/empathy.c:312
+msgid "Don't connect on startup"
+msgstr "Nepřipojovat se při startu"
+
+#: ../src/empathy.c:324
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "Instant Messenger"
+
+#: ../src/empathy-about-dialog.c:64
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../src/empathy-about-dialog.c:68
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../src/empathy-about-dialog.c:72
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../src/empathy-about-dialog.c:100
+#, fuzzy
+msgid "An Instant Messaging client for GNOME"
+msgstr "Gossip, Klient Instant Messaging"
+
+#: ../src/empathy-about-dialog.c:106
+#, fuzzy
+msgid "translator-credits"
+msgstr "Miloslav Trmač"
+
+#: ../src/empathy-call-window.c:139
+msgid "Closed"
+msgstr ""
+
+#: ../src/empathy-call-window.c:251
+msgid "End this call?"
+msgstr ""
+
+#: ../src/empathy-call-window.c:253
+msgid "Closing this window will end the call in progress."
+msgstr ""
+
+#: ../src/empathy-call-window.c:254
+msgid "_End Call"
+msgstr ""
+
+#: ../src/empathy-call-window.c:305
+msgid "Incoming call"
+msgstr ""
+
+#: ../src/empathy-call-window.c:307
+#, fuzzy, c-format
+msgid "%s is calling you, do you want to answer?"
+msgstr "Jaké jméno uživatele chcete používat?"
+
+#: ../src/empathy-call-window.c:313
+#, fuzzy
+msgid "_Reject"
+msgstr "Vybrat"
+
+#: ../src/empathy-call-window.c:318
+msgid "_Answer"
+msgstr ""
+
+#: ../src/empathy-call-window.c:364
+msgid "Empathy Call"
+msgstr ""
+
+#: ../src/empathy-call-window.c:365
+msgid "Readying"
+msgstr ""
+
+#: ../src/empathy-call-window.c:374
+#, c-format
+msgid "%s - Empathy Call"
+msgstr ""
+
+#: ../src/empathy-call-window.c:378
+#, fuzzy
+msgid "Ringing"
+msgstr "_Připojit"
+
+#: ../src/empathy-call-window.c:391
+#, fuzzy
+msgid "Connecting"
+msgstr "Připojit"
+
+#: ../src/empathy-call-window.glade.h:1
+msgid "#"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:2
+msgid "*"
+msgstr "*"
+
+#: ../src/empathy-call-window.glade.h:3
+msgid "0"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:4
+msgid "1"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:5
+msgid "2"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:6
+msgid "3"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:7
+msgid "4"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:8
+msgid "5"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:9
+msgid "6"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:10
+msgid "7"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:11
+msgid "8"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:12
+msgid "9"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:13
+#, fuzzy
+msgid "<b>Keypad</b>"
+msgstr "Stav"
+
+#: ../src/empathy-call-window.glade.h:14
+#, fuzzy
+msgid "<b>Volume</b>"
+msgstr "Stav"
+
+#: ../src/empathy-call-window.glade.h:15
+msgid "Hang Up"
+msgstr ""
+
+#: ../src/empathy-call-window.glade.h:16
+#, fuzzy
+msgid "Send Video"
+msgstr "Vybrat"
+
+#: ../src/empathy-chat-window.c:315
+#, fuzzy, c-format
+msgid "Conversations (%d)"
+msgstr "_Konverzace"
+
+#: ../src/empathy-chat-window.c:382
+#, fuzzy
+msgid "Topic:"
+msgstr "_Téma:"
+
+#: ../src/empathy-chat-window.c:385
+msgid "Typing a message."
+msgstr "Píše zprávu."
+
+#: ../src/empathy-chat-window.glade.h:1
+msgid "C_lear"
+msgstr "_Vymazat"
+
+#: ../src/empathy-chat-window.glade.h:3
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../src/empathy-chat-window.glade.h:4
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Zadejte zprávu o stavu:"
+
+#: ../src/empathy-chat-window.glade.h:5
+msgid "Invite"
+msgstr ""
+
+#: ../src/empathy-chat-window.glade.h:6
+msgid "Move Tab _Left"
+msgstr "Přesunout záložku do_leva"
+
+#: ../src/empathy-chat-window.glade.h:7
+msgid "Move Tab _Right"
+msgstr "Přesunout záložku do_prava"
+
+#: ../src/empathy-chat-window.glade.h:8
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../src/empathy-chat-window.glade.h:9
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../src/empathy-chat-window.glade.h:10
+#, fuzzy
+msgid "_Contact"
+msgstr "_Přidat kontakt..."
+
+#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10
+#, fuzzy
+msgid "_Contents"
+msgstr "Připojit"
+
+#: ../src/empathy-chat-window.glade.h:12
+msgid "_Conversation"
+msgstr "_Konverzace"
+
+#: ../src/empathy-chat-window.glade.h:13
+msgid "_Detach Tab"
+msgstr "_Odpojit záložku"
+
+#: ../src/empathy-chat-window.glade.h:15 ../src/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr ""
+
+#: ../src/empathy-chat-window.glade.h:16
+msgid "_Next Tab"
+msgstr "_Následující záložka"
+
+#: ../src/empathy-chat-window.glade.h:17
+msgid "_Previous Tab"
+msgstr "_Předchozí záložka"
+
+#: ../src/empathy-chat-window.glade.h:18
+msgid "_Tabs"
+msgstr "_Záložky"
+
+#: ../src/empathy-chatrooms-window.c:262
+#, fuzzy
+msgid "Name"
+msgstr "Jméno:"
+
+#: ../src/empathy-chatrooms-window.c:280
+#, fuzzy
+msgid "Room"
+msgstr "_Místnost:"
+
+#: ../src/empathy-chatrooms-window.c:289
+#, fuzzy
+msgid "Auto-Connect"
+msgstr "Připojit"
+
+#: ../src/empathy-chatrooms-window.glade.h:2
+#, fuzzy
+msgid "Edit Favorite Room"
+msgstr "Gossip - Upravit skupinové diskuse"
+
+#: ../src/empathy-chatrooms-window.glade.h:3
+#, fuzzy
+msgid "Join room on start_up"
+msgstr "Nepřipojovat se při startu"
+
+#: ../src/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr ""
+
+#: ../src/empathy-chatrooms-window.glade.h:5
+#, fuzzy
+msgid "Manage Favorite Rooms"
+msgstr "Gossip - Upravit skupinové diskuse"
+
+#: ../src/empathy-chatrooms-window.glade.h:6
+#, fuzzy
+msgid "N_ame:"
+msgstr "Jméno:"
+
+#: ../src/empathy-chatrooms-window.glade.h:7
+#, fuzzy
+msgid "S_erver:"
+msgstr "Server:"
+
+#: ../src/empathy-chatrooms-window.glade.h:9
+#: ../src/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Místnost:"
+
+#: ../src/empathy-filter.c:223
+#, fuzzy, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr "Nová zpráva od %s"
+
+#: ../src/empathy-filter.c:280
+#, c-format
+msgid "Incoming call from %s"
+msgstr ""
+
+#: ../src/empathy-filter.c:336
+#, fuzzy, c-format
+msgid "Subscription requested by %s"
+msgstr "Požadavek na přihlášení"
+
+#: ../src/empathy-filter.c:339
+#, fuzzy, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr "_Zprávy o stavu"
+
+#. Tell the user that the tube can't be handled
+#: ../src/empathy-filter.c:447
+#, c-format
+msgid ""
+"%s offered you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+
+#: ../src/empathy-filter.c:456
+#, fuzzy
+msgid "Invitation Error"
+msgstr "Zadejte zprávu o stavu:"
+
+#: ../src/empathy-filter.c:564
+#, c-format
+msgid ""
+"%s is offering you an invitation. An external application will be started to "
+"handle it."
+msgstr ""
+
+#: ../src/empathy-filter.c:569
+#, c-format
+msgid ""
+"%s is offering you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+
+#: ../src/empathy-main-window.c:271
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Zobrazit seznam kontaktů"
+
+#: ../src/empathy-main-window.c:611
+#, fuzzy
+msgid "Contact"
+msgstr "_Přidat kontakt..."
+
+#: ../src/empathy-main-window.c:813
+#, fuzzy
+msgid "_Edit account"
+msgstr "Účet Jabberu"
+
+#: ../src/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr ""
+
+#: ../src/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr ""
+
+#: ../src/empathy-main-window.c:905
+msgid "Name in use"
+msgstr ""
+
+#: ../src/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr ""
+
+#: ../src/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr ""
+
+#: ../src/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr ""
+
+#: ../src/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr ""
+
+#: ../src/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr ""
+
+#: ../src/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr ""
+
+#: ../src/empathy-main-window.c:926
+msgid "Certificate self-signed"
+msgstr ""
+
+#: ../src/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr ""
+
+#: ../src/empathy-main-window.c:932
+#, fuzzy
+msgid "Unknown error"
+msgstr "Neznámá chyba"
+
+#: ../src/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List"
+msgstr "_Zobrazit seznam kontaktů"
+
+#: ../src/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "Připojit"
+
+#: ../src/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "_Upravit oblíbené..."
+
+#: ../src/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr ""
+
+#: ../src/empathy-main-window.glade.h:5
+#, fuzzy
+msgid "Manage Favorites"
+msgstr "_Upravit oblíbené..."
+
+#: ../src/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Zobrazovat _odpojené kontakty"
+
+#: ../src/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_Accounts"
+msgstr "_Přijmout"
+
+#: ../src/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "_Přidat kontakt..."
+
+#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2
+#, fuzzy
+msgid "_New Conversation..."
+msgstr "_Konverzace"
+
+#: ../src/empathy-main-window.glade.h:14
+#, fuzzy
+msgid "_Personal Information"
+msgstr "Osobní informace"
+
+#: ../src/empathy-main-window.glade.h:16
+#, fuzzy
+msgid "_Room"
+msgstr "_Místnost:"
+
+#: ../src/empathy-new-chatroom-dialog.c:290
+#, fuzzy
+msgid "Chat Rooms"
+msgstr "Gossip - Diskuse"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:5
+#, fuzzy
+msgid "Join"
+msgstr "_Připojit"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:6
+#, fuzzy
+msgid "Join New"
+msgstr "_Připojit"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+
+#: ../src/empathy-preferences.c:264
+msgid "Language"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "Vzhled"
+
+#: ../src/empathy-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>Oblíbené:</b>"
+
+#: ../src/empathy-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Oblíbené:</b>"
+
+#: ../src/empathy-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "Stav"
+
+#: ../src/empathy-preferences.glade.h:5
+#, fuzzy
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "Gossip - Odeslat zprávu"
+
+#: ../src/empathy-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>Popis</b>"
+
+#: ../src/empathy-preferences.glade.h:7
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:8
+#, fuzzy
+msgid "Automatically _connect on startup "
+msgstr "Nepřipojovat se při startu"
+
+#: ../src/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:10
+#, fuzzy
+msgid "Chat Th_eme:"
+msgstr "_Název diskuse:"
+
+#: ../src/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:12
+#, fuzzy
+msgid "Enable sounds when _away"
+msgstr "Zakázat zvuky, když jsem _pryč"
+
+#: ../src/empathy-preferences.glade.h:13
+#, fuzzy
+msgid "Enable sounds when _busy"
+msgstr "Zakázat zvuky, když jsem _zaneprázdněn"
+
+#: ../src/empathy-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "Používat zvuky upozornění"
+
+#: ../src/empathy-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "_Nastavení"
+
+#: ../src/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:18
+#, fuzzy
+msgid "Show _smileys as images"
+msgstr "Převádět _smajlíky na grafické obrázky"
+
+#: ../src/empathy-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "_Zobrazit seznam kontaktů"
+
+#: ../src/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:25
+#, fuzzy
+msgid "_Play sound when messages arrive"
+msgstr "Přehrávat zvuk, když přijdou zprávy"
+
+#: ../src/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Stav"
+
+#: ../src/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr ""
+
+#: ../src/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Zobrazit seznam kontaktů"
diff --git a/trunk/po/cy.po b/trunk/po/cy.po
new file mode 100644
index 000000000..047756960
--- /dev/null
+++ b/trunk/po/cy.po
@@ -0,0 +1,2235 @@
+# Gossip yn Gymraeg.
+# This file is distributed under the same license as the gossip package.
+# Dafydd Harries <daf@muse.19inch.net>, 2003 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2004-07-05 16:41+0100\n"
+"Last-Translator: Dafydd Harries <daf@muse.19inch.net>\n"
+"Language-Team: Cymraeg <gnome-cy@www.linux.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Negesydd Parod"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Negesydd Parod"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "Ychwanegu i'ch rhestr cysylltion"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+#, fuzzy
+msgid "Enable sound when away"
+msgstr "Analluogi synau wrth fod _ymaith"
+
+#: ../data/empathy.schemas.in.h:9
+#, fuzzy
+msgid "Enable sound when busy"
+msgstr "Analluogi synau wrth fod yn _brysur"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Gossip - Danfon Neges"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Cuddio'r prif ffenest"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Cuddio'r prif ffenest"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "_Dangos y Rhestr Cysylltion"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "Safle X y prif ffenest."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Dangos cysylltion all-lein"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+#, fuzzy
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Defnyddir yr enw hwn i'ch adnabod chi mewn ffenestri sgwrs."
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Defnyddio gwynebau graffigol"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Defnyddio synau hysbysu"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "A ddylid trosi gwynebau i ddelweddau graffigol mewn sgyrsiau."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "A ddylid chwarae cain pan mae negeseuon yn cyrraedd."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "A ddylid chwarae synau wrth fod ymaith."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "A ddylid chwarae synau wrth fod yn brysur."
+
+#: ../data/empathy.schemas.in.h:28
+#, fuzzy
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "A ddylid chwarae cain pan mae negeseuon yn cyrraedd."
+
+#: ../data/empathy.schemas.in.h:29
+#, fuzzy
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "A ddylid dangos cysylltion sydd all-lein yn y rhestr cysylltion."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "A ddylid dangos cysylltion sydd all-lein yn y rhestr cysylltion."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "A ddylid dangos cysylltion sydd all-lein yn y rhestr cysylltion."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "All-lein"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Ar Gael"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Prysur"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Ymaith"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Dangos y Rhestr Cysylltion"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Grŵp"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "Ychwanegu cyswllt"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "_Cuddio y Rhestr Cysylltion"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "_Cysylltu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "_Golygu ffefrynnau..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Dangos Cysylltion All-lein"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Gweithredion"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+#, fuzzy
+msgid "_Accounts"
+msgstr "_Gweithredion"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "_Ychwanegu Cyswllt..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Sgwrs"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "_Cysylltu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "_Gadael"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "Neges _Newydd..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+#, fuzzy
+msgid "_Personal Information"
+msgstr "Manylion personol"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Hoffterau"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Gadael"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+#, fuzzy
+msgid "_Room"
+msgstr "_Ystafell:"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "_View Previous Conversations"
+msgstr "_Sgwrs"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Cyflwr"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Dangos y Rhestr Cysylltion"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+#, fuzzy
+msgid "An Instant Messaging client for GNOME"
+msgstr "Gossip, Cleient Negeseuo Cyflym"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr "Dafydd Harries"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Ar Gael"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Gosodiadau Cyfrif</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Gosodiadau Cyfrif</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+#, fuzzy
+msgid "Accounts"
+msgstr "_Enw cyfrif:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "<b>C_yfrif:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>C_yfrif:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>Gosodiadau Cyfrif</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Sgwrs"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "Enw:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "_Testun:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">Enghraifft: cyfrif@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "_Cyfrinair:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+#, fuzzy
+msgid "Reso_urce:"
+msgstr "_Adnodd:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "Defnyddio _amgryptio (SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "_Porth:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Gweinydd:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+#, fuzzy
+msgid "jabber account settings"
+msgstr "<b>Gosodiadau Cyfrif</b>"
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Wedi Datgysylltu"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "Wedi Cysylltu"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "C_lirio"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Sgwrs"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+#, fuzzy
+msgid "Contact Infor_mation"
+msgstr "/_Gwybodaeth Cyswllt"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "Sgwrs"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "_Cofrestri..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Rhowch neges cyflwr:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Symud y Tab i'r _Chwith"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Symud y Tab i'r _Dde"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+#, fuzzy
+msgid "_Add To Favorites"
+msgstr "_Golygu ffefrynnau..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Sgwrs"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Datgysylltu'r Tab"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "Tab _Nesaf"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "Tab _Cynt"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+#, fuzzy
+msgid "_Show Contacts"
+msgstr "_Dangos y Rhestr Cysylltion"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Tabiau"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Copïo Cyfeiriad y Cyswllt"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Agor y Cyswllt"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "Neges _Newydd..."
+msgstr[1] "Neges _Newydd..."
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Gossip - Sgwrs"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "_Sgwrs"
+msgstr[1] "_Sgwrs"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "Yn teipio neges."
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "Ychwanegu cyswllt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "Grŵp"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "Ychwanegu cyswllt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "/_Gwybodaeth Cyswllt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "Manylion cyswllt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/_Ailenwi'r grŵp"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "Enw _defnyddiwr:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr ""
+"Os gwelwch yn dda, rhowch llysenw newydd ar gyfer y cyswllt\n"
+"%s"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "_Tynnu"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/_Tynnu'r cyswllt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "Gossip - Golygu Sgyrsiau Grŵp"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "Dewis"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "_Sgwrs"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "Ymddangosiad"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>C_yfrif:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Ffefryn:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "_Cysylltu"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+#, fuzzy
+msgid "<b>Languages</b>"
+msgstr "<b>Enw:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "<b>Disgrifiad</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>Ebost:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+#, fuzzy
+msgid "Chat Th_eme:"
+msgstr "Enw _sgwrs:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+#, fuzzy
+msgid "Enable sounds when _away"
+msgstr "Analluogi synau wrth fod _ymaith"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+#, fuzzy
+msgid "Enable sounds when _busy"
+msgstr "Analluogi synau wrth fod yn _brysur"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "Hysbysu"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "_Hoffterau"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+#, fuzzy
+msgid "Show _smileys as images"
+msgstr "Trosi _gwynebau i ddelweddau graffigol"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "_Dangos y Rhestr Cysylltion"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+#, fuzzy
+msgid "Sort by s_tate"
+msgstr "Gosodwch eich cyflwr:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+#, fuzzy
+msgid "_Play sound when messages arrive"
+msgstr "Chwarae sain pan mae negeseuon yn cyrraedd"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "Gossip - Golygu Sgyrsiau Grŵp"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+#, fuzzy
+msgid "Custom message..."
+msgstr "Neges Addasiedig..."
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "C_lirio"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "Ydych chi eisiau derbyn yr ymgais?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+#, fuzzy
+msgid "Clear List"
+msgstr "C_lirio"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Rhowch neges cyflwr:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "Negeseuon Cyflwr"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "Negeseuon cyflwr rhagosod"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "Aeth %s all-lein"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, fuzzy, c-format
+msgid "%s has come online"
+msgstr "Mae %s yn dod arlein"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "C_lirio"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Peidio a chysylltu wrth gychwyn"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "Negesydd Parod"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Negesydd Parod"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "_Ymuno"
+
+#, fuzzy
+#~ msgid "Active"
+#~ msgstr "_Gweithredion"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "Gwall anhysbys"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Hysbysu"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Gwall anhysbys"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Ar Gael"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Gwall anhysbys"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "Wedi Cysylltu"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "Wedi Cysylltu"
+
+#, fuzzy
+#~ msgid "This feature is unavailable."
+#~ msgstr "Efallai nid yw'r gweinydd ar gael ar hyn o bryd."
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Cyfrif newydd"
+
+#~ msgid "Home"
+#~ msgstr "Adref"
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Efallai nid yw'r gweinydd ar gael ar hyn o bryd."
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Yn cofrestru cyfrif"
+
+#, fuzzy
+#~ msgid "This feature is not implemented"
+#~ msgstr "Efallai nid yw'r gweinydd ar gael ar hyn o bryd."
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "_Datgysylltu"
+
+#~ msgid "Connect"
+#~ msgstr "_Cysylltu"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Cofrestrwyd cyfrif yn llwyddianus"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Methwyd cofrestru cyfrif"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Rhowch eich cyfrinair os gwelwch yn dda:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Rhowch eich cyfrinair os gwelwch yn dda:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Os gwelwch yn dda, rhowch enw newydd ar gyfer y grŵp\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "No information is available for this contact."
+#~ msgstr "Cyrchu gwybodaeth ynghylch y cyswllt hwn"
+
+#, fuzzy
+#~ msgid "Information requested, please wait..."
+#~ msgstr "<b>Gofynnwyd gwybodaeth, arhoswch os gwelwch yn dda...</b>"
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Hoffwn eich ychwanegu at fy rhestr cysylltion."
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "Neges _Newydd..."
+#~ msgstr[1] "Neges _Newydd..."
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "Cais Tanysgrifiad"
+#~ msgstr[1] "Cais Tanysgrifiad"
+
+#, fuzzy
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "Neges cais"
+#~ msgstr[1] "Neges cais"
+
+#, fuzzy
+#~ msgid "Edit Account _Details"
+#~ msgstr "Golygu Manylion Cyfrif"
+
+#~ msgid "New message from %s"
+#~ msgstr "Neges newydd o %s"
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "_Derbyn"
+
+#, fuzzy
+#~ msgid "Decline"
+#~ msgstr "Swper"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Enw:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Ystafell:"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "Gossip - Cysylltu"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "<b>Gofynnwyd gwybodaeth, arhoswch os gwelwch yn dda...</b>"
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "Ydych chi eisiau tynnu'r cyswllt\n"
+#~ "%s\n"
+#~ "o'ch rhestr cyswllt?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Os gwelwch yn dda, rhowch enw newydd ar gyfer y grŵp\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Dewis"
+
+#~ msgid "Unsorted"
+#~ msgstr "Heb eu trefnu"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Gwall anhysbys"
+
+#, fuzzy
+#~ msgid "%s would like to send you a file."
+#~ msgstr "Hoffwn eich ychwanegu at fy rhestr cysylltion."
+
+#, fuzzy
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Hoffwn eich ychwanegu at fy rhestr cysylltion."
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "Dewis"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "_Cysylltu..."
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Gossip - Cysylltu"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Pa llysenw hoffwch ddefnyddio ar gyfer y cyswllt hwn?"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "_Testun:"
+
+#, fuzzy
+#~ msgid "Account"
+#~ msgstr "_Enw cyfrif:"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "_Sgwrs"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Rhestru'r cyfrifon sydd ar gael"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Pa gyfrif i gysylltu iddo wrth gychwyn"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "ENW-CYFRIF"
+
+#~ msgid "Available accounts:"
+#~ msgstr "Cyfrifon sydd ar gael:"
+
+#~ msgid "[default]"
+#~ msgstr "[rhagosodiad]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Does dim cyfrif gyda'r enw '%s'."
+
+#, fuzzy
+#~ msgid "Join"
+#~ msgstr "_Ymuno"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Sgwrs"
+
+#, fuzzy
+#~ msgid "Chat Rooms"
+#~ msgstr "Gossip - Sgwrs"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "Arbed manylion personol..."
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "[rhagosodiad]"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "Sgwrs"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "Caiff %s ei ychwanegu i'ch restr cyswllt."
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Caiff y cyswllt ei ychwanegu i'ch rhestr cyswllt"
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "Cais Tanysgrifiad"
+
+#, fuzzy
+#~ msgid "Contact Information"
+#~ msgstr "/_Gwybodaeth Cyswllt"
+
+#, fuzzy
+#~ msgid "New subscription request from %s"
+#~ msgstr "Cais Tanysgrifiad"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr ""
+#~ "Ydych chi eisiau tynnu'r cyswllt\n"
+#~ "%s\n"
+#~ "o'ch rhestr cyswllt?"
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr ""
+#~ "Ydych chi eisiau tynnu'r cyswllt\n"
+#~ "%s\n"
+#~ "o'ch rhestr cyswllt?"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Rhowch eich cyfrinair os gwelwch yn dda:"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Cofio'r Cyfrinair?"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Sgwrs"
+
+#, fuzzy
+#~ msgid "Contact goes online"
+#~ msgstr "Mae %s yn dod arlein"
+
+#, fuzzy
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Ydych chi eisiau derbyn yr ymgais?"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "Enw _defnyddiwr:"
+
+#, fuzzy
+#~ msgid "File size:"
+#~ msgstr "Safle gwe:"
+
+#~ msgid "Web site:"
+#~ msgstr "Safle gwe:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Derbyn"
+
+#~ msgid "_Deny"
+#~ msgstr "_Gwrthod"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Disgrifiad</b>"
+
+#, fuzzy
+#~ msgid "Account:"
+#~ msgstr "_Enw cyfrif:"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Gossip - Golygu Sgyrsiau Grŵp"
+
+#, fuzzy
+#~ msgid "Group Chat"
+#~ msgstr "Gossip - Sgwrs"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "_Ymuno"
+
+#, fuzzy
+#~ msgid "Join room on start_up"
+#~ msgstr "Peidio a chysylltu wrth gychwyn"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "Enw:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "Gweinydd:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "_Llysenw:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Ystafell:"
+
+#, fuzzy
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>C_yfrif:</b>"
+
+#, fuzzy
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "Manylion cleient"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>C_yfrif:</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>Enw:</b>"
+
+#, fuzzy
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "Manylion Personol"
+
+#, fuzzy
+#~ msgid "<b>Status</b>"
+#~ msgstr "<b>Sain</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "Tanysgrifiad"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Enghraifft: cyfrif@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "_Enw cyfrif:"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "Ychwanegu cyswllt"
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "Sgwrs"
+
+#~ msgid "Client:"
+#~ msgstr "Cleient:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "Ychwanegu cyswllt"
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Peidio a chysylltu wrth gychwyn"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "Ychwanegu cyswllt"
+
+#~ msgid "Country:"
+#~ msgstr "Gwlad:"
+
+#~ msgid "Decide _Later"
+#~ msgstr "Penderfynu _Wedyn"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "Ychwanegu cyswllt"
+
+#~ msgid "Edit Groups"
+#~ msgstr "Golygu Grŵpiau"
+
+#~ msgid "Email:"
+#~ msgstr "Ebost:"
+
+#, fuzzy
+#~ msgid "ID:"
+#~ msgstr "JID"
+
+#~ msgid "Name:"
+#~ msgstr "Enw:"
+
+#~ msgid "OS:"
+#~ msgstr "System Weithredu:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "Manylion _Personol"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "_Cofrestri..."
+
+#, fuzzy
+#~ msgid "Search"
+#~ msgstr "_Chwilio..."
+
+#, fuzzy
+#~ msgid "Spell Checker"
+#~ msgstr "Gossip - Danfon Neges"
+
+#, fuzzy
+#~ msgid "Subscription Request"
+#~ msgstr "Cais Tanysgrifiad"
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Pa llysenw hoffwch ddefnyddio ar gyfer y cyswllt hwn?"
+
+#, fuzzy
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "Defnyddir yr enw hwn i'ch adnabod chi mewn ffenestri sgwrs."
+
+#, fuzzy
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr "Defnyddir yr enw hwn i'ch adnabod chi mewn ffenestri sgwrs."
+
+#~ msgid "Version:"
+#~ msgstr "Fersiwn:"
+
+#, fuzzy
+#~ msgid "View Previous Conversations"
+#~ msgstr "_Sgwrs"
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Pa enw cyfrif hoffech chi ddefnyddio?"
+
+#, fuzzy
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr ""
+#~ "Nid ydych wedi tanysgrifio at gyflwr y cyswllt hwn. Gwasgwch Tanysgrifio "
+#~ "er mwyn derbyn eu cyflwr."
+
+#, fuzzy
+#~ msgid "_Birthday:"
+#~ msgstr "_Blaenoriaeth:"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "_Cysylltu"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Disgrifiad"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Datgysylltu"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "Ebost:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr "Rhowch ID defnyddiwr y person hoffwch anfon neges sgwrs atynt."
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "_Porth:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "Enw:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Grŵp"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Llysenw:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Cyfrinair:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "Negeseuon _Cyflwr"
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "_Tynnu"
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Tanysgrifio"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Safle gwe:"
+
+#, fuzzy
+#~ msgid "irc account settings"
+#~ msgstr "<b>Gosodiadau Cyfrif</b>"
+
+#, fuzzy
+#~ msgid "msn account settings"
+#~ msgstr "<b>Gosodiadau Cyfrif</b>"
+
+#~ msgid "Preset status messages"
+#~ msgstr "Negeseuon cyflwr rhagosod"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Negeseuon cyflwr rhagosod."
+
+#, fuzzy
+#~ msgid "Connecting"
+#~ msgstr "_Cysylltu"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "Caiff %s ei ychwanegu i'ch restr cyswllt."
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "ID _Jabber y cyswllt newydd:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "Rhowch eich cyfrinair os gwelwch yn dda:"
+
+#, fuzzy
+#~ msgid "Favourite"
+#~ msgstr "<b>Ffefryn:</b>"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Gwybodaeth Cyswllt ar gyfer %s"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/_Gwybodaeth Cyswllt"
+
+#, fuzzy
+#~ msgid "/Re_name Contact"
+#~ msgstr "/_Ailenwi'r cyswllt"
+
+#, fuzzy
+#~ msgid "/_Edit Groups"
+#~ msgstr "/_Golygu grŵpiau"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "_Sgwrs"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Os gwelwch yn dda, rhowch llysenw newydd ar gyfer y cyswllt\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Golygu grŵpiau ar gyfer %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Cofnod Sgwrs"
+
+#~ msgid "Registering account"
+#~ msgstr "Yn cofrestru cyfrif"
+
+#, fuzzy
+#~ msgid "Respond"
+#~ msgstr "Rheswm:"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "_Golygu ffefrynnau..."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Enw:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Gossip - Sgwrs"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Gofynnwyd gwybodaeth, arhoswch os gwelwch yn dda...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Enghraifft: cyfrif@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Account Name"
+#~ msgstr "_Enw cyfrif:"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Gossip - Sgwrs"
+
+#, fuzzy
+#~ msgid "Connection Details"
+#~ msgstr "Manylion Personol"
+
+#, fuzzy
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "A oes cyfrif ar weinydd Jabber gennych eisioes?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr ""
+#~ "Os gwelwch yn dda, rhowch llysenw newydd ar gyfer y cyswllt\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "Os gwelwch yn dda, rhowch llysenw newydd ar gyfer y cyswllt\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the user's contact ID:"
+#~ msgstr "Cliciwch er mwyn gweld manylion cyswllt y defnyddiwr"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Gorffenwyd Cyflunio"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Mae Gossip yn gleient modern ar gyfer y system Negeseuo Cyflym Jabber.\n"
+#~ "\n"
+#~ "Fe fydd y cynorthwywr yma yn eich arwain drwy'r broses o gyflunio Gossip "
+#~ "a'ch cysylltu i'ch hoff weinydd Jabber.\n"
+#~ "\n"
+#~ "Er mwyn cychwyn, cliciwch \"Ymlaen\"."
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "Er mwyn tanysgrifio at hysbysiadau presenolder o'r defnyddiwr, rhaid i "
+#~ "chi anfon cais. Tan i'r cais yma gael ei dderbyn, fe gaiff y defnyddiwr "
+#~ "ei ddangos fel \"All-lein\" wastad yn eich rhestr cysylltion."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "Ym mha grŵp hoffech roi'r cyswllt hwn?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "ID Jabber:"
+
+#~ msgid "Nickname:"
+#~ msgstr "Llysenw:"
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "_Porth:"
+
+#, fuzzy
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr ""
+#~ "Nid ydych wedi tanysgrifio at gyflwr y cyswllt hwn. Gwasgwch Tanysgrifio "
+#~ "er mwyn derbyn eu cyflwr."
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "Yn cofrestru cyfrif"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "_Adnodd:"
+
+#~ msgid "Sending request"
+#~ msgstr "Yn anfon cais"
+
+#~ msgid "Server:"
+#~ msgstr "Gweinydd:"
+
+#, fuzzy
+#~ msgid "Web Site:"
+#~ msgstr "Safle gwe:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Croeso i Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Pa system negeseuo parod yw'r cyswllt yn ei ddefnyddio?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Beth yw eich enw?"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "Pa weinydd hoffech ddefnyddio?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Pa enw cyfrif ydych chi'n ei ddefnyddio?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Pa enw cyfrif hoffech chi ddefnyddio?"
+
+#, fuzzy
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "Ym mha grŵp hoffech roi'r cyswllt hwn?"
+
+#, fuzzy
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Mae Gossip yn awr wedi ei gyflunio yn gywir ar gyfer eich system.\n"
+#~ "Fe allwch newid eich gosodiadau cyfrif yn hwyrach, gan ddewis yr eitem "
+#~ "dewislen Sgwrs->Cysylltu..."
+
+#, fuzzy
+#~ msgid "Your Account"
+#~ msgstr "Cyfrif Jabber"
+
+#~ msgid "Your Identity"
+#~ msgstr "Eich Hunaniaeth"
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "Gossip - Sgwrs"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Na"
+
+#~ msgid "_Search..."
+#~ msgstr "_Chwilio..."
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Ie"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Bod yn dawel wrth fod ymaith"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Bod yn dawel wrth fod yn brysur"
+
+#~ msgid "Height of main window"
+#~ msgstr "Uchder y prif ffenest"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "Safle X y prif ffenest."
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "Safle Y y prif ffenest."
+
+#~ msgid "The width of the main window."
+#~ msgstr "Lled y prif ffenest."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Lled y prif ffenest"
+
+#~ msgid "X position of main window"
+#~ msgstr "Safle X y prif ffenest"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Safle Y y prif ffenest"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip, Cleient Negeseuo Cyflym"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "Cuddio'r prif ffenest"
+
+#, fuzzy
+#~ msgid "Requested Information"
+#~ msgstr "Manylion _Cyfrif"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "Danfon Neges _Sgwrs..."
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "Aeth %s all-lein"
+
+#~ msgid "Available..."
+#~ msgstr "Ar Gael..."
+
+#~ msgid "Busy..."
+#~ msgstr "Prysur..."
+
+#~ msgid "Away..."
+#~ msgstr "Ymaith..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "/_Gwybodaeth Cyswllt"
+
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>Sain</b>"
+
+#, fuzzy
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - Golygu Cyfrifon"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "_Ymuno â Sgwrs Grŵp..."
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "_Porth:"
+
+#, fuzzy
+#~ msgid "Requested information."
+#~ msgstr "Manylion cleient"
+
+#, fuzzy
+#~ msgid "Requesting contact information, please wait..."
+#~ msgstr "Gofyn am fanylion personol..."
+
+#, fuzzy
+#~ msgid "Could not open connection"
+#~ msgstr "Methwyd cysylltu"
+
+#, fuzzy
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "Pa weinydd hoffech ddefnyddio?"
+
+#, fuzzy
+#~ msgid "Connection to the server failed."
+#~ msgstr "<b>Cysylltu i'r gweinydd</b>"
+
+#~ msgid "Written by:"
+#~ msgstr "Ysgrifennwyd gan:"
+
+#~ msgid "Artwork by:"
+#~ msgstr "Arlunio gan:"
+
+#~ msgid "Translated by:"
+#~ msgstr "Cyfieithwyd gan:"
+
+#, fuzzy
+#~ msgid "Account ID"
+#~ msgstr "_Enw cyfrif:"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sSgwrs - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Dangos _Cofnod"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "Fersiwn:"
+
+#, fuzzy
+#~ msgid "Latvian"
+#~ msgstr "Yn gadael:"
+
+#~ msgid "View Lo_g"
+#~ msgstr "Gweld y _Cofnod"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - Sgwrs Grŵp"
+
+#, fuzzy
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Gossip - Cysylltu"
+
+#, fuzzy
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "/_Gwybodaeth Cyswllt"
+
+#, fuzzy
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - Golygu Sgyrsiau Grŵp"
+
+#, fuzzy
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - Golygu Cyfrifon"
+
+#, fuzzy
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - Danfon Neges"
+
+#, fuzzy
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Manylion Personol"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Hoffterau"
+
+#, fuzzy
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - Danfon Neges"
+
+#, fuzzy
+#~ msgid "Personal Details Saved!"
+#~ msgstr "Manylion Personol"
+
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "Pa neges cais hoffwch chi anfon at %s?"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Sicrhewch fod eich manylion cyfrif yn gywir."
+
+#~ msgid "%s wants to be notified of your status."
+#~ msgstr "Mae %s eisiau cael eu hysbysu o'ch cyflwr."
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Fe gafoch eich datgysylltu o'r gweinydd. A hoffech ailgysylltu?"
+
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr ""
+#~ "Sicrhewch fod eich manylion cyfrif yn gywir. Hefyd, efallai nid yw'r "
+#~ "gweinydd ar gael."
+
+#~ msgid "Edit List..."
+#~ msgstr "Golygu'r Rhestr..."
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "Digwyddod gwall wrth sgwrsio efo %s."
+
+#~ msgid "Details:"
+#~ msgstr "Manylion:"
+
+#~ msgid "An error occurred when chatting in the group chat %s."
+#~ msgstr "Digwyddod gwall wrth sgwrsio yn y sgwrs grŵp %s."
+
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "Ni ellir cyrchu'r sgwrs grŵp %s."
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Fe fydd Gossip yn awr yn ceisio defnyddio eich cyfrif:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Fe fydd Gossip yn awr yn ceisio cofrestru'r cyfrif:"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "O:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Gossip - Derbyniwyd Neges"
+
+#~ msgid "In reply to:"
+#~ msgstr "Yn ateb i:"
+
+#~ msgid "To:"
+#~ msgstr "I:"
+
+#~ msgid "_Reply..."
+#~ msgstr "_Ateb..."
+
+#~ msgid "_Send"
+#~ msgstr "_Anfon"
+
+#~ msgid "C_onnect"
+#~ msgstr "_Cysylltu"
+
+#~ msgid "_Resource:"
+#~ msgstr "_Adnodd:"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>Ystafelloedd sgwrs ar gael</b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>Manylion ystafell sgwrs</b>"
+
+#~ msgid "Gossip - Join Group Chat"
+#~ msgstr "Gossip - Ymuno a Sgwrs Grŵp"
+
+#~ msgid "N_ickname:"
+#~ msgstr "Llysenw:"
+
+#~ msgid ""
+#~ "Pick a favorite, or enter nickname, server name, and the name of the chat "
+#~ "room to enter."
+#~ msgstr ""
+#~ "Dewiswch ffefryn, neu rhowch llysenw, enw gweinydd, a enw yr ystafell "
+#~ "sgwrsio i'w ymuno ag ef."
+
+#~ msgid "R_emove"
+#~ msgstr "_Tynnu"
+
+#~ msgid "_Add"
+#~ msgstr "_Ychwanegu"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Personal information</b>"
+#~ msgstr "<b>Manylion personol</b>"
+
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>Negeseuon cyflwr rhagosod</b>"
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Nid yw'r gwybodaeth ar gael</i>"
+
+#~ msgid "Choose a Server"
+#~ msgstr "Dewiswch Weinydd"
+
+#~ msgid "Choose from list:"
+#~ msgstr "Dewiswch o'r rhestr:"
+
+#~ msgid "Information about ..."
+#~ msgstr "Gwybodaeth ynghylch ..."
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "Ar ba weinydd oes cyfrif Jabber gennych?"
+
+#~ msgid "Sound"
+#~ msgstr "Sain"
+
+#~ msgid "Status Message"
+#~ msgstr "Neges Cyflwr"
+
+#~ msgid "Use a different server"
+#~ msgstr "Defnyddio gweinydd arall"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Pa neges cais hoffwch chi anfon at ...?"
+
+#~ msgid "Gossip Website"
+#~ msgstr "Safle Gwe Gossip"
+
+#~ msgid "Gossip, Jabber Client"
+#~ msgstr "Gossip, Cleient Jabber"
+
+#~ msgid "Just about to leave..."
+#~ msgstr "Rydw I ar fin gadael..."
+
+#~ msgid "Custom Busy Message..."
+#~ msgstr "Neges Prysur Addasiedig..."
+
+#~ msgid "Leave"
+#~ msgstr "Gadael"
+
+#~ msgid "I'm here"
+#~ msgstr "Rydw I yma"
+
+#~ msgid "I'm not here right now"
+#~ msgstr "Dydw I ddim yma ar hyn o bryd"
+
+#~ msgid "Timestamp all messages"
+#~ msgstr "Amseru pob neges"
+
+#~ msgid "Whether or not to timestamp all messages in conversations."
+#~ msgstr "A ddylid rhoi amser ar bob neges mewn sgyrsiau."
+
+#~ msgid "%sChat"
+#~ msgstr "%sSgwrs"
+
+#~ msgid "Offline "
+#~ msgstr "All-lein "
+
+#~ msgid "Others"
+#~ msgstr "Eraill"
+
+#~ msgid "<b>Chat with:</b>"
+#~ msgstr "<b>Sgwrs efo:</b>"
+
+#~ msgid "Available:"
+#~ msgstr "Ar gael:"
+
+#~ msgid ""
+#~ "These messages are used to describe your status when you're available, "
+#~ "about to leave and away."
+#~ msgstr ""
+#~ "Defnyddir y negeseuon hyn er mwyn disgrifio eich cyflwr pan rydych chi o "
+#~ "gwmpas, ar fin gadael, ac ymaith."
+
+#~ msgid "Use com_pact conversation style"
+#~ msgstr "Defnyddio arddull sgwrsio _cryno"
+
+#~ msgid "Use sounds to _notify when new messages arrive"
+#~ msgstr ""
+#~ "Defnyddio synau er mwyn hysbysu pan mae negeseuon _newydd yn cyrraedd"
+
+#~ msgid "Use ta_bs instead of windows for conversations"
+#~ msgstr "Defnyddio ta_biau yn hytrach na ffenestri ar gyfer sgyrsdiau"
+
+#~ msgid "_Timestamp all messages"
+#~ msgstr "_Amseru pob neges"
+
+#~ msgid "Auto away enabled"
+#~ msgstr "Galluogwyd ymaith awtomatig"
+
+#~ msgid "Extended autoaway time"
+#~ msgstr "Amser ymaith estynedig awtomatig"
+
+#~ msgid ""
+#~ "The number of minutes of idle time before automatically going into \"away"
+#~ "\" mode."
+#~ msgstr ""
+#~ "Y nifer o funudau o amser segur cyn mynd i'r modd \"ymaith\" yn awtomtig."
+
+#~ msgid ""
+#~ "The number of minutes of idle time before automatically going into "
+#~ "\"extended away\" mode."
+#~ msgstr ""
+#~ "Y nifer o funudau o amser segur cyn mynd i'r modd \"ymaith estynedig\" yn "
+#~ "awtomtig."
+
+#~ msgid "Timestamp messages"
+#~ msgstr "Amseru negeseuon"
+
+#~ msgid ""
+#~ "Whether or not to go into \"away\" mode automatically when a certain time "
+#~ "of idling has passed."
+#~ msgstr ""
+#~ "A ddylid mynd i'r modd \"ymaith\" yn awtomatig ar ôl i gyfnod panodedig o "
+#~ "fod yn segur fynd heibio."
+
+#~ msgid "Free to chat"
+#~ msgstr "Yn rhydd i sgwrsio"
+
+#~ msgid "Extended away"
+#~ msgstr "Ymaith estynedig"
+
+#~ msgid "_Edit Account..."
+#~ msgstr "_Golygu'e Cyfrif..."
+
+#~ msgid ""
+#~ "<b>Welcome to Gossip</b>\n"
+#~ "\n"
+#~ "Gossip is a modern client for the Jabber Instant Message system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server."
+#~ msgstr ""
+#~ "<b>Croeso i Gossip</b>\n"
+#~ "\n"
+#~ "Mae Gossip yn gleient modern ar gyfer y system Negeseuo Parod Jabber.\n"
+#~ "\n"
+#~ "Fe fydd y cynorthwywr yma yn eich arwain drwy'r broses o gyflunio Gossip "
+#~ "a'ch cysylltu i'ch hoff weinydd Jabber."
+
+#~ msgid "<b>Additional information</b>"
+#~ msgstr "<b>Gwybodaeth ychwanegol</b>"
+
+#~ msgid "<b>Address</b>"
+#~ msgstr "<b>Cyfeiriad</b>"
+
+#~ msgid "<b>Auto away</b>"
+#~ msgstr "<b>Ymaith awtomatig</b>"
+
+#~ msgid "Automatically enter away mode during inactivity"
+#~ msgstr "Mynd i'r cyflwr ymaith yn awtomatig tra'n segur"
+
+#~ msgid "Enter away mode after"
+#~ msgstr "Mynd i'r modd ymaith ar ôl "
+
+#~ msgid "I'm away eating dinner, bbiab..."
+#~ msgstr "Rydw i i fwrdd yn byta fy swper, yn ôl cyn hir..."
+
+#~ msgid "Presence:"
+#~ msgstr "Presenoldeb:"
+
+#~ msgid "Priority:"
+#~ msgstr "Blaenoriaeth:"
+
+#~ msgid "Set the status you want to use"
+#~ msgstr "Gosod y cyflwr hoffech ddefnyddio"
+
+#~ msgid "minutes"
+#~ msgstr "munudau"
+
+#~ msgid "<b>Jabber ID:</b>"
+#~ msgstr "<b>ID Jabber:</b>"
+
+#~ msgid "<b>Setup Finished</b>"
+#~ msgstr "<b>Gorffenwyd Gosod</b>"
+
+#~ msgid ""
+#~ "This user wants to subscribe to your presence.\n"
+#~ "Do you approve?"
+#~ msgstr ""
+#~ "Ma'r defnyddiwr eisiau tanysgrifio i'ch presenoldeb.\n"
+#~ "Ydych chi'n cymeradwyo?"
+
+#~ msgid "_Approve"
+#~ msgstr "_Derbyn"
+
+#~ msgid "_Defer"
+#~ msgstr "_Gohirio"
+
+#~ msgid "Default Account"
+#~ msgstr "Cyfrif Rhaogosodedig"
+
+#~ msgid "Could not open the address \"%s\": %s"
+#~ msgstr "Methwyd agor y cyfeiriad \"%s\": %s"
+
+#~ msgid "<b>Available accounts</b>"
+#~ msgstr "<b>Cyfrifon ar gael</b>"
+
+#~ msgid "<b>What account do you want to use for this connection?</b>"
+#~ msgstr "<b>Pa gyfrif hoffech ddefnyddio ar gyfer y cysylltiad hwn?</b>"
+
+#~ msgid "Use SS_L"
+#~ msgstr "Defnyddio SS_L"
+
+#~ msgid "_User:"
+#~ msgstr "_Defnyddiwr:"
+
+#~ msgid "What request message do you want to send to <b>micke</b>?"
+#~ msgstr "Pa neges cais hoffwch chi anfon i <b>micke</b>?"
diff --git a/trunk/po/da.po b/trunk/po/da.po
new file mode 100644
index 000000000..16767c67d
--- /dev/null
+++ b/trunk/po/da.po
@@ -0,0 +1,2578 @@
+# Danish translation of Gossip.
+# Copyright (C) 2003, 04, 06 Free Software Foundation, Inc.
+# Ole Laursen <olau@hardworking.dk>, 2003, 04, 06.
+# David Nielsen <dnielsen@breakmygentoo.net>, 2002, 06.
+#
+# Konventioner:
+#
+# instant messaging client -> samtaleklient
+# join -> deltag (om gruppesamtaler)
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2006-04-23 17:32+0200\n"
+"Last-Translator: Ole Laursen <olau@hardworking.dk>\n"
+"Language-Team: Danish <dansk@klid.dk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Samtaleklient"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Samtaleklient"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Åbn altid et særskilt samtalevindue for nye samtaler."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "Tema for samtalevindue"
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Komma-adskilt liste af sprog der skal bruges ved stavekontrol (f.eks. \"en, "
+"fr, nl\")."
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "Tilføj til din kontaktliste"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+#, fuzzy
+msgid "Enable sound when away"
+msgstr "Deaktivér lyde når brugeren er _fraværende"
+
+#: ../data/empathy.schemas.in.h:9
+#, fuzzy
+msgid "Enable sound when busy"
+msgstr "Deaktivér lyde når brugeren er _optaget"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Slå stavekontrol til"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Skjul hovedvindue"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Skjul hovedvinduet."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr "Åbn nye samtaler i adskilte vinduer"
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "_Vis kontaktliste"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "Hovedvinduets højde."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Vis frakoblede kontakter"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr "Stavekontrolleringssprog"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Det tema der bruges ved visning af samtalen i samtalevinduer."
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Benyt grafiske tekstansigter"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Benyt påmindelseslyde"
+
+#: ../data/empathy.schemas.in.h:22
+#, fuzzy
+msgid "Use theme for chat rooms"
+msgstr "Deltag i samtalerummet"
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Om tekstansigter skal konverteres til grafiske billeder i samtaler."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Om der skal afspilles en lyd når en besked ankommer."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Om der skal afspilles lyde når brugeren er fraværende."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Om der skal afspilles lyde når brugeren er optaget."
+
+#: ../data/empathy.schemas.in.h:28
+#, fuzzy
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Om der skal afspilles en lyd når en besked ankommer."
+
+#: ../data/empathy.schemas.in.h:29
+#, fuzzy
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Om kontakter der ikke er tilsluttet, skal vises i kontaktlisten."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Om kontakter der ikke er tilsluttet, skal vises i kontaktlisten."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Om kontakter der ikke er tilsluttet, skal vises i kontaktlisten."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Frakoblet"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Tilgængelig"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Optaget"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Fraværende"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Vis kontaktliste"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Gruppe"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "Kon_takt:"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "_Skjul kontaktliste"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "_Indhold"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "_Tilføj til favoritter"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+#, fuzzy
+msgid "Manage Favorites..."
+msgstr "_Tilføj til favoritter"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Vis _frakoblede kontakter"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Konti"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Konti"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "_Tilføj kontakt..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Samtale"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Indhold"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "Redigér"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Ny besked..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "_Personlige oplysninger"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Indstillinger"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Afslut"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr "_Rum"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr "_Vis foregående samtaler"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Status"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Vis kontaktliste"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+#, fuzzy
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Gossip er frit programmel. Du kan redistribuere og/eller ændre programmet "
+"under betingelserne givet i GNU General Public License som udgives af Free "
+"Software Foundation; enten version 2 af licensen, eller (hvis du ønsker det) "
+"enhver senere version."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+#, fuzzy
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Gossip distribueres i håb om at programmet er nyttigt, men uden NOGEN "
+"GARANTI, ikke engang underforstået garanti om at det er SALGBART eller "
+"PASSER TIL ET BESTEMT FORMÅL. Se GNU General Public License for detaljer."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Du burde have modtaget en kopi af GNU General Public License sammen med "
+"Gossip. Hvis du ikke har det, kan du skrive til Free Software Foundation, "
+"Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "En samtaleklient til GNOME."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Ole Laursen\n"
+"David Nielsen\n"
+"\n"
+"Dansk-gruppen <dansk@dansk-gruppen.dk>\n"
+"Mere info: http://www.dansk-gruppen.dk"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Tilgængelig"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Kontoindstillinger</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Kontoindstillinger</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr "Konti"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "<b>Om</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Om</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>Kontoindstillinger</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Samtale!"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+msgid "_Name:"
+msgstr "_Navn:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "_Emne:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">Eksempel: bruger@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr "Login i_d"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "Adgangskode:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+#, fuzzy
+msgid "Reso_urce:"
+msgstr "Resurse:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "Anvend _kryptering (SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "Port:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Server:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+#, fuzzy
+msgid "jabber account settings"
+msgstr "<b>Kontoindstillinger</b>"
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Frakoblet"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr "Indsæt tekstansigt"
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr "_Kontrollér stavning af ord..."
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "Tilsluttet"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Ryd"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Samtale"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+#, fuzzy
+msgid "Contact Infor_mation"
+msgstr "Kontaktoplysninger"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "S_amtale"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "_Invitér"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "Indsæt tekst_ansigt"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Indtast statusbesked:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+#, fuzzy
+msgid "Invite"
+msgstr "_Invitér"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Flyt til _venstre"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Flyt til _højre"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "Du er blevet inviteret til at deltage i en konferencesamtale."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "_Tilføj til favoritter"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Samtale"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Frigør faneblad"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "_Næste faneblad"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+#, fuzzy
+msgid "_Paste"
+msgstr "Dato"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "_Forrige faneblad"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr "_Vis kontaktliste"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Faneblade"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Kopiér adresse"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Åbn adresse"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "Ny besked"
+msgstr[1] "Ny besked"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Samtalerum"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "_Samtale"
+msgstr[1] "_Samtale"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "Skriver en besked."
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "Kon_takt:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "Gruppe"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "Tilføj en kontakt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "Kontaktoplysninger"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "Kontaktoplysninger"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/Om_døb gruppe"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "Filnavn:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr "Indtast et navn for konto."
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "_Fjern"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/_Fjern kontakt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "/_Invitér til samtalerum"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "_Send File..."
+msgstr "/Send _fil..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "Vælg en fil"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "Vis foregående samtaler"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr "Sprog"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "Udseende"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>Om</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Favorit:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "Tilslutning"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr "<b>Sprog</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Indstillinger</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>E-post:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+#, fuzzy
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"Denne liste af sprog reflekterer kun de sprog som du har en ordbog "
+"installeret for."
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+#, fuzzy
+msgid "Chat Th_eme:"
+msgstr "Samtale_tema:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+#, fuzzy
+msgid "Enable sounds when _away"
+msgstr "Deaktivér lyde når brugeren er _fraværende"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+#, fuzzy
+msgid "Enable sounds when _busy"
+msgstr "Deaktivér lyde når brugeren er _optaget"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr "Generelt"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "Bekendtgørelse"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Indstillinger"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+#, fuzzy
+msgid "Show _smileys as images"
+msgstr "Konvertér _tekstansigter til små billeder"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "_Vis kontaktliste"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+#, fuzzy
+msgid "Sort by s_tate"
+msgstr "Sæt din status:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Stavekontrol"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+#, fuzzy
+msgid "_Enable spell checking"
+msgstr "Slå stavekontrol til"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Åbn nye samtaler i særskilte vinduer"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "_Afspil lyd når beskeder ankommer"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "Gem _dette samtalerum"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+#, fuzzy
+msgid "Custom message..."
+msgstr "Egen besked..."
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "Ryd liste"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "Ønsker du at acceptere denne fil?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr "Ryd liste"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Indtast statusbesked:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+msgid "Status Message Presets"
+msgstr "Foruddefinerede statusbeskeder"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "Tilføj til statusbeskedliste"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s frakoblede sig"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr "%s har tilsluttet sig"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr "Klassisk"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+#, fuzzy
+msgid "Simple"
+msgstr "Eksempel"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "_Ryd"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr "Blå"
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Tilslut ikke ved start"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "- Gossip - samtaleklient"
+
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Gossip - samtaleklient"
+
+#~ msgid "Normal"
+#~ msgstr "Normal"
+
+#~ msgid "Joining"
+#~ msgstr "Tilslutter"
+
+#~ msgid "Active"
+#~ msgstr "Aktiv"
+
+#~ msgid "Inactive"
+#~ msgstr "Inaktiv"
+
+#~ msgid "Unknown"
+#~ msgstr "Ukendt"
+
+#~ msgid "Error"
+#~ msgstr "Fejl"
+
+#, fuzzy
+#~ msgid "No role"
+#~ msgstr "Normal"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Bekendtgørelse"
+
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "Kælenavnet du har valgt, er allerede i brug."
+
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr ""
+#~ "Samtalerummet du forsøgte at tilslutte dig til, kræver en adgangskode."
+
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr ""
+#~ "Fjernkonferenceserveren svarede ikke inden for en rimelig tidsfrist."
+
+#~ msgid "The conference server you tried to join could not be found."
+#~ msgstr "Konferenceserveren du forsøgte at tilslutte dig kunne ikke findes."
+
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr ""
+#~ "En ukendt fejl opstod, kontrollér at dine indstillinger er korrekte."
+
+#, fuzzy
+#~ msgid "Joining the chatroom was canceled."
+#~ msgstr "Deltag i samtalerummet"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Tilgængelig"
+
+#~ msgid "An unknown error occurred."
+#~ msgstr "Der opstod en ukendt fejl."
+
+#~ msgid "Connection refused."
+#~ msgstr "Tilslutning afvist"
+
+#~ msgid "Server address could not be resolved."
+#~ msgstr "Serveradressen kunne ikke findes."
+
+#~ msgid "Connection timed out."
+#~ msgstr "Tidsfrist for forbindelsen løb ud."
+
+#~ msgid "Authentication failed."
+#~ msgstr "Godkendelse mislykkedes."
+
+#~ msgid "The username you are trying already exists."
+#~ msgstr "Brugernavnet du forsøger at bruge, eksisterer allerede."
+
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "Brugernavnet du forsøger at bruge, er ugyldigt."
+
+#~ msgid "This feature is unavailable."
+#~ msgstr "Denne funktion er ikke tilgængelig."
+
+#~ msgid "This feature is unauthorized."
+#~ msgstr "Denne funktion er ikke godkendt."
+
+#~ msgid "A specific protocol error occurred that was unexpected."
+#~ msgstr "En specifik protokolfejl opstod uventet."
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Ny konto"
+
+#~ msgid "Home"
+#~ msgstr "Hjemme"
+
+#~ msgid "Couldn't send message!"
+#~ msgstr "Kunne ikke sende besked!"
+
+#~ msgid "Connection could not be opened"
+#~ msgstr "Forbindelsen kunne ikke åbnes"
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Denne funktion er ikke tilgængelig."
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Registrering"
+
+#, fuzzy
+#~ msgid "This feature is not implemented"
+#~ msgstr "Denne funktion er ikke godkendt."
+
+#~ msgid "Disconnect"
+#~ msgstr "Frakobl"
+
+#~ msgid "Connect"
+#~ msgstr "Tilslut"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Det lykkedes at registrere kontoen"
+
+#, fuzzy
+#~ msgid "You should now be able to connect to your new account."
+#~ msgstr "Du kan ikke bruge --no-connect sammen med --account"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Det mislykkedes at registrere de nye kontoindstillinger"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Indtast din konto-adgangskode:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Indtast din konto-adgangskode:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Indtast et nyt navn til gruppen\n"
+#~ "%s"
+
+#~ msgid "No information is available for this contact."
+#~ msgstr "Ingen oplysninger tilgængelige om denne kontakt."
+
+#~ msgid "Information requested, please wait..."
+#~ msgstr "Oplysninger forespurgt, vent venligst..."
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Jeg vil gerne tilføje dig til min kontaktliste."
+
+#~ msgid "To summarize:"
+#~ msgstr "For at opsummere:"
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "Ny besked"
+#~ msgstr[1] "Ny besked"
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "Abonneringsanmodning"
+#~ msgstr[1] "Abonneringsanmodning"
+
+#, fuzzy
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "Anmodning om filoverførsel"
+#~ msgstr[1] "Anmodning om filoverførsel"
+
+#, fuzzy
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "Anmodningsbesked"
+#~ msgstr[1] "Anmodningsbesked"
+
+#, fuzzy
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "Fejl"
+#~ msgstr[1] "Fejl"
+
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "Hvis du afslutter, vil alt ulæst information gå tabt."
+
+#, fuzzy
+#~ msgid "Edit Account _Details"
+#~ msgstr "Redigér kontooplysninger"
+
+#~ msgid "Word"
+#~ msgstr "Ord"
+
+#~ msgid "New message from %s"
+#~ msgstr "Ny besked fra %s"
+
+#, fuzzy
+#~ msgid "Your invitation has been declined"
+#~ msgstr "Dit filoverførselstilbud blev afvist."
+
+#~ msgid "Accept"
+#~ msgstr "Acceptér"
+
+#, fuzzy
+#~ msgid "Decline"
+#~ msgstr "Middag"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Navn:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Rum"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "Stop tilslutning"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "Oplysninger forespurgt, vent venligst..."
+
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr "Ønsker du at fjerne denne kontakt fra din kontaktliste?"
+
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Indtast et nyt navn til gruppen\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Vælg"
+
+#~ msgid "Unsorted"
+#~ msgstr "Usorteret"
+
+#~ msgid "New file transfer request from %s"
+#~ msgstr "Ny filoverførselsanmodning fra %s"
+
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "Filoverførsel er ikke understøttet af begge parter."
+
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "Dit filoverførselstilbud blev afvist."
+
+#~ msgid "The other user decided not to continue."
+#~ msgstr "Den anden bruger besluttede ikke at forsætte."
+
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Ukendt fejl opstod under filoverførsel."
+
+#~ msgid "%s would like to send you a file."
+#~ msgstr "%s vil gerne sende dig en fil."
+
+#
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Nogen vil gerne sende dig en fil."
+
+#~ msgid "Select a file"
+#~ msgstr "Vælg en fil"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "Tilslutter"
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Stop tilslutning"
+
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "Inviterede %s til at deltage i denne konferencesamtale."
+
+#, fuzzy
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "%s har sat emnet"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Hvilket kælenavn ønsker du at bruge til denne kontakt?"
+
+#, fuzzy
+#~ msgid "%s has joined the room"
+#~ msgstr "%s har sat emnet"
+
+#, fuzzy
+#~ msgid "%s has left the room"
+#~ msgstr "%s har sat emnet"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "_Emne:"
+
+#~ msgid "Account"
+#~ msgstr "Konto"
+
+#~ msgid "Conversation With"
+#~ msgstr "Samtale med"
+
+#~ msgid "Date"
+#~ msgstr "Dato"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Vis de tilgængelige konti"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Hvilken konto skal benyttes ved start"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "KONTONAVN"
+
+#~ msgid "You can not use --no-connect together with --account"
+#~ msgstr "Du kan ikke bruge --no-connect sammen med --account"
+
+#~ msgid "No accounts available."
+#~ msgstr "Ingen konti tilgængelige."
+
+#~ msgid "Available accounts:"
+#~ msgstr "Tilgængelige konti:"
+
+#~ msgid "[default]"
+#~ msgstr "[forvalgt]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Der er ingen konto med navnet \"%s\"."
+
+#~ msgid "Join"
+#~ msgstr "Deltag"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Dato"
+
+#~ msgid "Chat Rooms"
+#~ msgstr "Samtalerum"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "Oplysninger forespurgt, vent venligst..."
+
+#~ msgid "Default"
+#~ msgstr "Forvalgt"
+
+#~ msgid "Chat!"
+#~ msgstr "Samtale!"
+
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s ønsker at blive tilføjet til din kontaktliste."
+
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Nogen ønsker at blive tilføjet til din kontaktliste."
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "Abonneringsanmodning"
+
+#~ msgid "Contact Information"
+#~ msgstr "Kontaktoplysninger"
+
+#~ msgid "Subject: %s"
+#~ msgstr "Emne: %s"
+
+#~ msgid "Suggestions for the word"
+#~ msgstr "Forslag for ordet"
+
+#~ msgid "New subscription request from %s"
+#~ msgstr "Ny abonneringsanmodning fra %s"
+
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "Ønsker du at tilføje denne person til din kontaktliste?"
+
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "Ønsker du at tilføje %s til din kontaktliste?"
+
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Indtast din adgangskode for kontoen %s"
+
+#, fuzzy
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "Logger på med: %s"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Husk adgangskode?"
+
+#~ msgid "Could not display the help contents."
+#~ msgstr "Kunne ikke vise hjælp."
+
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "Serveren ser ikke ud til at svare."
+
+#~ msgid "Try again later."
+#~ msgstr "Prøv igen senere."
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Samtale"
+
+#~ msgid "Contact goes offline"
+#~ msgstr "Kontakten frakobler sig"
+
+#~ msgid "Contact goes online"
+#~ msgstr "Kontakten tilslutter sig"
+
+#~ msgid "Contact ID:"
+#~ msgstr "Kontakt-id:"
+
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Ønsker du at acceptere denne fil?"
+
+#~ msgid "File Transfer Request"
+#~ msgstr "Anmodning om filoverførsel"
+
+#~ msgid "File name:"
+#~ msgstr "Filnavn:"
+
+#~ msgid "File size:"
+#~ msgstr "Filstørrelse:"
+
+#, fuzzy
+#~ msgid "Not supported yet"
+#~ msgstr "Ikke understøttet på nuværende tidspunkt."
+
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "Denne person ønsker at sende dig denne fil:"
+
+#~ msgid "Web site:"
+#~ msgstr "Hjemmeside:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Acceptér"
+
+#~ msgid "_Deny"
+#~ msgstr "_Afvis"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Indstillinger</b>"
+
+#~ msgid "Account:"
+#~ msgstr "Konto:"
+
+#, fuzzy
+#~ msgid "Browse:"
+#~ msgstr "Gennemse"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Redigér samtalerum"
+
+#~ msgid "Group Chat"
+#~ msgstr "Gruppesamtale"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "Deltag"
+
+#~ msgid "Join room on start_up"
+#~ msgstr "Deltag i rum ved _start"
+
+#, fuzzy
+#~ msgid "Join this chat room when Gossip starts and you are connected"
+#~ msgstr "Deltag i dette samtalerum når Gossip starter og du er tilsluttet."
+
+#~ msgid "N_ame:"
+#~ msgstr "N_avn:"
+
+#~ msgid "S_erver:"
+#~ msgstr "S_erver:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "Kæle_navn:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Rum:"
+
+#~ msgid "-"
+#~ msgstr "-"
+
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Om</b>"
+
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "<b>Klientoplysninger</b>"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Om</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>Sprog</b>"
+
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Personlige detaljer</b>"
+
+#~ msgid "<b>Status</b>"
+#~ msgstr "<b>Status</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "Abonnering"
+
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr ""
+#~ "<span size=\"smaller\">Eksempel: Mikael eller bruger@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Konto:"
+
+#~ msgid "Add Contact"
+#~ msgstr "Tilføj kontakt"
+
+#, fuzzy
+#~ msgid "Alia_s:"
+#~ msgstr "Alias"
+
+#~ msgid "Ch_at"
+#~ msgstr "S_amtale"
+
+#~ msgid "Client:"
+#~ msgstr "Klient:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "Kon_takt:"
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Tilslut ved _start"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "Kon_takt:"
+
+#~ msgid "Country:"
+#~ msgstr "Land:"
+
+#~ msgid "Decide _Later"
+#~ msgstr "Beslut _senere"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "Tilføj kontakt"
+
+#~ msgid "Edit Groups"
+#~ msgstr "Redigér grupper"
+
+#~ msgid "Email:"
+#~ msgstr "E-post:"
+
+#~ msgid "ID:"
+#~ msgstr "Id:"
+
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr ""
+#~ "Hvis du vælger at beslutte senere, vil du blive spurgt næste gang du "
+#~ "logger på."
+
+#~ msgid "Name:"
+#~ msgstr "Navn:"
+
+#~ msgid "OS:"
+#~ msgstr "Styresystem:"
+
+#~ msgid "Personal Details"
+#~ msgstr "Personlige detaljer"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "Re_gistrér..."
+
+#~ msgid "Search"
+#~ msgstr "Søg"
+
+#~ msgid "Spell Checker"
+#~ msgstr "Stavekontrol"
+
+#~ msgid "Subscription Request"
+#~ msgstr "Abonneringsanmodning"
+
+#~ msgid "Suggestions for the word:"
+#~ msgstr "Forslag for ordet:"
+
+#, fuzzy
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "Dette agerer som et filter for kontaktlisten nedenfor. Du kan bruge dele "
+#~ "af kontaktens navn eller id, f.eks. vil \"jabber.org\" liste alle der "
+#~ "bruger den server."
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Dette navn bliver brugt i din kontaktliste for denne kontakt"
+
+#, fuzzy
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "Dette navn bliver brugt til at identificere dig i samtalevinduer."
+
+#, fuzzy
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr ""
+#~ "Dette navn bliver brugt til at identificere dig når nye kontakter laver "
+#~ "et opslag efter dine detaljer."
+
+#~ msgid "Use system pro_xy"
+#~ msgstr "Benyt systemets _mellemvært"
+
+#~ msgid "Version:"
+#~ msgstr "Version:"
+
+#~ msgid "View Previous Conversations"
+#~ msgstr "Vis foregående samtaler"
+
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Hvilken konto ønsker du at benytte?"
+
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "Du abonnerer ikke på denne kontakt."
+
+#, fuzzy
+#~ msgid "_Birthday:"
+#~ msgstr "_Prioritet:"
+
+#~ msgid "_Connect"
+#~ msgstr "_Tilslut"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Beskrivelse:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Frakobl"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "E-post:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Indtast navn eller kontakt-id på den person du ønsker at samtale med "
+#~ "nedenfor."
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "Port:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "_Navn:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Gruppe:"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "Kæle_navn:"
+
+#~ msgid "_Password:"
+#~ msgstr "_Adgangskode:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "_Statusbeskeder"
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "_Fjern"
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Abonnér"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Hjemmeside:"
+
+#, fuzzy
+#~ msgid "irc account settings"
+#~ msgstr "<b>Kontoindstillinger</b>"
+
+#, fuzzy
+#~ msgid "msn account settings"
+#~ msgstr "<b>Kontoindstillinger</b>"
+
+#~ msgid "Preset status messages"
+#~ msgstr "Forvalgte statusbeskeder"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Forvalgte statusbeskeder."
+
+#~ msgid "Perhaps you are trying to connect to the wrong port?"
+#~ msgstr "Måske forsøger du at tilslutte til den forkerte port?"
+
+#~ msgid "Perhaps the service is not currently running?"
+#~ msgstr "Måske kører tjenesten ikke på nuværende tidspunkt?"
+
+#~ msgid "Check your connection details."
+#~ msgstr "Kontrollér dine forbindelsesindstillinger."
+
+#~ msgid "Perhaps the server is not running this service."
+#~ msgstr "Måske kører serveren ikke denne tjeneste."
+
+#~ msgid "Check your username and password are correct."
+#~ msgstr "Kontrollér at brugernavn og adgangskode er korrekte."
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s vil blive tilføjet til din kontaktliste."
+
+#~ msgid "%s ID of new contact:"
+#~ msgstr "%s-id for ny kontakt:"
+
+#~ msgid "Example: %s"
+#~ msgstr "Eksempel: %s"
+
+#~ msgid "You have no Instant Messaging accounts configured!"
+#~ msgstr "Du har ingen samtalekonti konfiguret!"
+
+#~ msgid ""
+#~ "Next you will be presented with the Account Information dialog to set "
+#~ "your details up."
+#~ msgstr ""
+#~ "Som det næste bliver du præsenteret for kontooplysningsvinduet for at "
+#~ "konfigurere dine detaljer."
+
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Indtast venligst din invitationsbesked to:\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Favourite"
+#~ msgstr "<b>Favorit:</b>"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Kontaktoplysninger for %s"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/_Kontaktoplysninger"
+
+#~ msgid "/Re_name Contact"
+#~ msgstr "/Om_døb kontakt"
+
+#~ msgid "/_Edit Groups"
+#~ msgstr "/_Redigér grupper"
+
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "/_Vis foregående samtaler"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Indtast et nyt kælenavn til kontakten\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Redigér grupper for %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Samtalelog"
+
+#~ msgid "Registering account"
+#~ msgstr "Registrering af konto"
+
+#~ msgid "Respond"
+#~ msgstr "Svar"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "_Tilføj til favoritter"
+
+#~ msgid ""
+#~ "Customize your own nickname, the server and chatroom which you wish to "
+#~ "join."
+#~ msgstr ""
+#~ "Tilpas dit kælenavn, den server og det samtalerum du ønsker at deltage i."
+
+#~ msgid "Edit your chat room details:"
+#~ msgstr "Redigér dine indstillinger for samtalerum:"
+
+#~ msgid "Na_me:"
+#~ msgstr "Na_vn:"
+
+#~ msgid "New Chat Room"
+#~ msgstr "Nyt samtalerum"
+
+#~ msgid ""
+#~ "Pick a saved chat room from the presets available below and click Join to "
+#~ "start chatting."
+#~ msgstr ""
+#~ "Vælg a gemt samtalerum fra de nedenstående forvalgte og klik på \"Deltag"
+#~ "\" for at påbegynde samtale."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Information forespurgt, vent venligst...</b>"
+
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Eksempel:</span>"
+
+#~ msgid "Account Name"
+#~ msgstr "Kontonavn"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Samtalerum"
+
+#~ msgid "Connection Details"
+#~ msgstr "Forbindelsesdetaljer"
+
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Har du allerede en konto på en server?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr "Indtast den port der bliver brugt ved tilslutning for denne konto."
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "Indtast den server der bliver brugt ved tilslutning for denne konto."
+
+#~ msgid "Enter the user's contact ID:"
+#~ msgstr "Indtast brugerens kontakt-ID:"
+
+#, fuzzy
+#~ msgid "Enter your real name here"
+#~ msgstr "Indtast dit rigtige navn her."
+
+#~ msgid "Finished"
+#~ msgstr "Afsluttet"
+
+#, fuzzy
+#~ msgid "For increased security, enable this option"
+#~ msgstr "Slå denne indstilling til for øget sikkerhed."
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip er en moderne klient til samtalesystemet Jabber\n"
+#~ "\n"
+#~ "Denne assistent sætter dig i gang med at konfigurere Gossip og tilslutte "
+#~ "dig til din favorit Jabber-server.\n"
+#~ "\n"
+#~ "Klik på \"Fremad\" for at komme i gang."
+
+#, fuzzy
+#~ msgid ""
+#~ "If you have another machine on your network which 'proxies' the "
+#~ "connection to the internet and you want to use it, enable this option"
+#~ msgstr ""
+#~ "Hvis du har en anden maskine på dit netværk som fungerer som mellemvært "
+#~ "for forbindelsen til internettet og du ønsker at bruge den, så slå denne "
+#~ "indstilling til"
+
+#~ msgid ""
+#~ "If you need to set specific connection details, like a different server "
+#~ "or port, you can configure that here:"
+#~ msgstr ""
+#~ "Hvis du har brug for at angive specifikke forbindelsesdetaljer, såsom en "
+#~ "anden server eller port, kan du konfigurere det her:"
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "For at kunne få at vide når brugeren kommer og går, vil en "
+#~ "tilstedeværelses-anmodning blive sendt. Før denne anmodning er "
+#~ "accepteret, vil brugeren altid blive vist som frakoblet i din "
+#~ "kontaktliste."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "Hvilken gruppe ønsker du at placere denne kontakt i?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "Jabber-id:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Leave this blank if you don't want your password stored on a public "
+#~ "machine. If you decide to do this, you will be prompted each time you "
+#~ "connect for a password"
+#~ msgstr ""
+#~ "Du kan lade dette være tomt hvis du ikke ønsker at din adgangskode skal "
+#~ "være gemt på en offentlig maskine. Hvis du gør dette, vil du blive spurgt "
+#~ "efter adgangskoden hver gang du tilslutter."
+
+#~ msgid "Nickname:"
+#~ msgstr "Kælenavn:"
+
+#~ msgid "Port:"
+#~ msgstr "Port:"
+
+#, fuzzy
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr "Tryk på \"Abonnér\" for at modtage deres status."
+
+#~ msgid "Registering Account"
+#~ msgstr "Registrering af konto"
+
+#~ msgid "Resource:"
+#~ msgstr "Resurse:"
+
+#~ msgid "Sending request"
+#~ msgstr "Sender forespørgsel"
+
+#~ msgid "Server:"
+#~ msgstr "Server:"
+
+#~ msgid "Web Site:"
+#~ msgstr "Hjemmeside:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Velkommen til Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Hvilket samtalesystem anvender kontakten?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Hvad er dit navn?"
+
+#~ msgid ""
+#~ "What name do you want to use to identify this account?\n"
+#~ "\n"
+#~ "This name could be something associated with the service provider, for "
+#~ "example, <b>Google</b>."
+#~ msgstr ""
+#~ "Hvilket navn ønsker du at bruge til at identificere denne konto?\n"
+#~ "\n"
+#~ "Dette navn kunne være noget der er associeret med tjenesteudbyderen, f."
+#~ "eks. <b>Google</b>."
+
+#~ msgid "What password do you want to use?"
+#~ msgstr "Hvilken adgangskode ønsker du at anvende?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Hvilket brugernavn benytter du?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Hvilket brugernavn ønsker du at benytte?"
+
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "Hvilken konto ønsker du at tilføje denne kontakt til?"
+
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Du kan ændre dine kontoindstillinger senere ved at vælge menupunktet "
+#~ "Redigér->Konti."
+
+#~ msgid ""
+#~ "You need to set a name for the connection, for example, <b>Home</b> or "
+#~ "<b>Laptop</b>."
+#~ msgstr ""
+#~ "Du skal give forbindelsen et navn, f.eks. <b>Hjemme</b> eller <b>Bærbar</"
+#~ "b>."
+
+#~ msgid "Your Account"
+#~ msgstr "Din konto"
+
+#~ msgid "Your Identity"
+#~ msgstr "Din identitet"
+
+#~ msgid "Your new account has now been set up."
+#~ msgstr "Din nye konto er nu konfigureret."
+
+#~ msgid "_Forget"
+#~ msgstr "_Glem"
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "Gruppesamtale"
+
+#~ msgid "_No"
+#~ msgstr "_Nej"
+
+#~ msgid "_Search..."
+#~ msgstr "_Søg..."
+
+#~ msgid "_Yes"
+#~ msgstr "_Ja"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Vær stille når brugeren er fraværende"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Vær stille når brugeren er optaget"
+
+#~ msgid "Height of main window"
+#~ msgstr "Hovedvinduets højde"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "Vandret placering af hovedvinduet."
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "Lodret placering af hovedvinduet."
+
+#~ msgid "The width of the main window."
+#~ msgstr "Bredden af hovedvinduet."
+
+#~ msgid "Whether spell checking should be turned on."
+#~ msgstr "Om stavekontrol skal være slået til."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Hovedvinduets bredde"
+
+#~ msgid "X position of main window"
+#~ msgstr "Vandret placering af hovedvindue"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Lodret placering af hovedvindue"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip, samtaleklient"
+
+#~ msgid "Close this chat window"
+#~ msgstr "Luk dette samtalerum"
+
+#~ msgid "Requested Information"
+#~ msgstr "Anmodede oplysninger"
+
+#~ msgid "Available..."
+#~ msgstr "Tilgængelig..."
+
+#~ msgid "Busy..."
+#~ msgstr "Optaget..."
+
+#~ msgid "Away..."
+#~ msgstr "Væk..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "Kontakt_oplysninger"
+
+#~ msgid "<b>Appearance and Behavior</b>"
+#~ msgstr "<b>Udseende og opførsel</b>"
+
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>Lyd</b>"
+
+#~ msgid "Check spelling while I _type"
+#~ msgstr "Kontrollér stavning mens jeg _skriver"
+
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - konti"
+
+#~ msgid "Join _Group Chat..."
+#~ msgstr "Deltag i _gruppesamtale..."
+
+#~ msgid "Por_t:"
+#~ msgstr "Por_t:"
+
+#~ msgid "Requested information."
+#~ msgstr "Forespurgte oplysninger."
+
+#~ msgid "Requesting contact information, please wait..."
+#~ msgstr "Forespørger kontaktoplysninger, vent venligst..."
+
+#~ msgid "%s has gone offline"
+#~ msgstr "%s frakoblede sig"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sSamtale - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Vis _log"
+
+#~ msgid "View Lo_g"
+#~ msgstr "Vis lo_g"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - gruppesamtale"
+
+#~ msgid "Gossip - New Chatroom"
+#~ msgstr "Gossip - nyt samtalerum"
+
+#~ msgid "Status:"
+#~ msgstr "Status:"
+
+#~ msgid "Conversation Hi_story"
+#~ msgstr "Samtale_historik"
+
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Gossip - tilføj kontakt"
+
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "Gossip - kontaktoplysninger"
+
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - redigér grupper"
+
+#~ msgid "Gossip - Logs"
+#~ msgstr "Gossip - log"
+
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - ny konto"
+
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - ny besked"
+
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Gossip - personlige detaljer"
+
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Gossip - indstillinger"
+
+#~ msgid "Gossip - Spell Checker"
+#~ msgstr "Gossip - stavekontrol"
+
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - statusbesked"
+
+#~ msgid "_Find:"
+#~ msgstr "_Find:"
+
+#~ msgid "_Highlight"
+#~ msgstr "_Fremhæv"
+
+#~ msgid "Artwork by:"
+#~ msgstr "Grafik af:"
+
+#~ msgid "Translated by:"
+#~ msgstr "Oversat af:"
+
+#~ msgid "Danish"
+#~ msgstr "Dansk"
+
+#~ msgid "German"
+#~ msgstr "Tysk"
+
+#~ msgid "German (Germany)"
+#~ msgstr "Tysk (Tyskland)"
+
+#~ msgid "Greek"
+#~ msgstr "Græsk"
+
+#~ msgid "English"
+#~ msgstr "Engelsk"
+
+#~ msgid "English (Canadian)"
+#~ msgstr "Engelsk (Canadisk)"
+
+#~ msgid "English (British)"
+#~ msgstr "Engelsk (Britisk)"
+
+#~ msgid "English (American)"
+#~ msgstr "Engelsk (Amerikansk)"
+
+#~ msgid "Esperanto"
+#~ msgstr "Esperanto"
+
+#~ msgid "Spanish"
+#~ msgstr "Spansk"
+
+#~ msgid "Persian"
+#~ msgstr "Persisk"
+
+#~ msgid "Finnish"
+#~ msgstr "Finsk"
+
+#~ msgid "French"
+#~ msgstr "Fransk"
+
+#~ msgid "French (France)"
+#~ msgstr "Fransk (Frankrig)"
+
+#~ msgid "Hungarian"
+#~ msgstr "Hungarsk"
+
+#~ msgid "Icelandic"
+#~ msgstr "Islandsk"
+
+#~ msgid "Italian"
+#~ msgstr "Italiansk"
+
+#~ msgid "Japanese"
+#~ msgstr "Japansk"
+
+#~ msgid "Norwegian (Bokmal)"
+#~ msgstr "Norsk (Bokmål)"
+
+#~ msgid "Norwegian"
+#~ msgstr "Norsk"
+
+#~ msgid "Norwegian (Nynorsk)"
+#~ msgstr "Norsk (Nynorsk)"
+
+#~ msgid "Norwegian (Nyorsk)"
+#~ msgstr "Norsk (Nynorsk)"
+
+#~ msgid "Polish"
+#~ msgstr "Polsk"
+
+#~ msgid "Russian"
+#~ msgstr "Russisk"
+
+#~ msgid "Swedish"
+#~ msgstr "Svensk"
+
+#~ msgid "Idle"
+#~ msgstr "Inaktiv"
+
+#~ msgid "Progress:"
+#~ msgstr "Fremgang"
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Du blev koblet fra serveren. Ønsker du at tilslutte igen?"
+
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr ""
+#~ "Sikr dig at dine kontooplysninger er korrekte. Det kan dog også være at "
+#~ "serveren ikke er tilgængelig i øjeblikket."
+
+#~ msgid "Edit List..."
+#~ msgstr "Redigér liste..."
+
+#~ msgid "An error occurred when chatting in the group chat %s."
+#~ msgstr "En fejl opstod i gruppesamtalen %s."
+
+#~ msgid "Details:"
+#~ msgstr "Detaljer:"
+
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "Kunne ikke deltage i gruppesamtalen %s."
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "En fejl opstod under samtale med %s."
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip vil nu forsøge at anvende din konto:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Gossip vil nu forsøge at registrere kontoen:"
+
+#~ msgid "Saving personal details, please wait..."
+#~ msgstr "Gemmer personlige detaljer, vent venligst..."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "Fra:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Gossip - modtaget besked"
+
+#~ msgid "In reply to:"
+#~ msgstr "Svar på:"
+
+#~ msgid "To:"
+#~ msgstr "Til:"
+
+#~ msgid "_Reply..."
+#~ msgstr "_Besvar..."
+
+#~ msgid "_Send"
+#~ msgstr "_Send"
+
+#~ msgid "C_onnect"
+#~ msgstr "_Tilslut"
+
+#~ msgid "Connect _Server:"
+#~ msgstr "Tilslut til _server:"
+
+#~ msgid "_Jabber ID:"
+#~ msgstr "_Jabber-id:"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>Tilgængelige samtalerum</b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>Oplysninger om samtalerum</b>"
+
+#~ msgid "Imendio Gossip - Group Chat"
+#~ msgstr "Gossip - gruppesamtale"
+
+#~ msgid "N_ickname:"
+#~ msgstr "_Kælenavn:"
+
+#~ msgid ""
+#~ "Pick a favorite, or enter nickname, server name, and the name of the chat "
+#~ "room to enter."
+#~ msgstr ""
+#~ "Vælg en favorit eller indtast kælenavn, servernavn og navnet på det "
+#~ "samtalerum der skal indtrædes i."
+
+#~ msgid "R_emove"
+#~ msgstr "_Fjern"
+
+#~ msgid "_Add"
+#~ msgstr "_Tilføj"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid ""
+#~ "<b>Finding the best server...</b>\n"
+#~ "This will take a few moments, please wait."
+#~ msgstr ""
+#~ "<b>Finder den bedste server...</b>\n"
+#~ "Dette vil tage et øjeblik, vent venligst."
+
+#~ msgid "<b>Personal information</b>"
+#~ msgstr "<b>Personlige oplysninger</b>"
+
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>Forvalgte statusbeskeder</b>"
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Information ikke tilgængelig</i>"
+
+#~ msgid "Add Another Account"
+#~ msgstr "Tilføj en anden konto"
+
+#~ msgid "Choose a Server"
+#~ msgstr "Vælg en server"
+
+#~ msgid "Choose from list:"
+#~ msgstr "Vælg fra liste:"
+
+#~ msgid "Configuring Service"
+#~ msgstr "Registeringstjeneste"
+
+#~ msgid "Discover Services"
+#~ msgstr "Opdagelsestjenester"
+
+#~ msgid "Information about ..."
+#~ msgstr "Information om..."
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "Nick name:"
+#~ msgstr "Kælenavn:"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "På hvilken server har du en Jabber-konto?"
+
+#~ msgid ""
+#~ "Please enter your user name, password and all other required details "
+#~ "below to set up your account. "
+#~ msgstr ""
+#~ "Indtast venligst dit brugernavn, adgangskode og andre påkrævede detaljer "
+#~ "nedenforfor at opsætte din konto"
+
+#~ msgid "Server Details"
+#~ msgstr "Serverdetaljer"
+
+#~ msgid "Sound"
+#~ msgstr "Lyd"
+
+#~ msgid "Status Message"
+#~ msgstr "Statusbesked"
+
+#~ msgid ""
+#~ "This wizard will allow you to configure your account settings for another "
+#~ "protocol. "
+#~ msgstr ""
+#~ "Denne hjælper tillader dig at konfigurere dine kontoindstillinger til en "
+#~ "anden protokol."
+
+#~ msgid "Use a different server"
+#~ msgstr "Benyt en anden server"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Hvilken forespørgselsbesked ønsker du at sende til ...?"
+
+#~ msgid "Which protocol would you like to set up? "
+#~ msgstr "Hvilken protokol ønsker du at opsætte? "
+
+#~ msgid "_AIM"
+#~ msgstr "_AIM"
+
+#~ msgid "_ICQ"
+#~ msgstr "_ICQ"
+
+#~ msgid "_MSN"
+#~ msgstr "_MSN"
+
+#~ msgid "_Yahoo!"
+#~ msgstr "_Yahoo!"
+
+#~ msgid "subscription_label"
+#~ msgstr "abonnerings_etiket"
+
+#~ msgid "Gossip Website"
+#~ msgstr "Gossips hjemmeside"
+
+#~ msgid "Gossip, Jabber Client"
+#~ msgstr "Gossip, Jabberklient"
+
+#~ msgid "About to leave..."
+#~ msgstr "Skal til at gå..."
+
+#~ msgid "Autoaway message"
+#~ msgstr "Automatisk fraværsbesked"
+
+#~ msgid "Away messages"
+#~ msgstr "Fraværsbeskeder"
+
+#~ msgid "Busy messages"
+#~ msgstr "Optaget-beskeder"
+
+#~ msgid "Message to show before going away"
+#~ msgstr "Besked som skal vises før maskinen forlades"
+
+#~ msgid "Not at the computer"
+#~ msgstr "Ikke ved maskinen"
+
+#~ msgid "Just about to leave..."
+#~ msgstr "Skal lige til at gå..."
+
+#~ msgid "Custom Busy Message..."
+#~ msgstr "Egen optaget-besked..."
+
+#~ msgid "Leave..."
+#~ msgstr "Forlad..."
+
+#~ msgid "New Busy Message"
+#~ msgstr "Ny optaget-besked"
+
+#~ msgid "New Away Message"
+#~ msgstr "Ny fraværsbesked"
+
+#~ msgid "Working"
+#~ msgstr "Arbejder"
+
+#~ msgid "Eating"
+#~ msgstr "Spiser"
+
+#~ msgid "Sleeping"
+#~ msgstr "Sover"
+
+#~ msgid "Enter the new message:"
+#~ msgstr "Indtast den nye besked:"
+
+#~ msgid "Leave"
+#~ msgstr "Forlad"
+
+#~ msgid "Preset messages for quickly setting away status."
+#~ msgstr "Foruddefinerede beskeder til hurtigt at sætte fraværs-status."
+
+#~ msgid "Preset messages for quickly setting busy status."
+#~ msgstr "Foruddefinerede beskeder til hurtigt at sætte optaget-status."
+
+#~ msgid "Reason for being busy:"
+#~ msgstr "Grund til at være optaget:"
+
+#~ msgid "Reason for leaving:"
+#~ msgstr "Grund til at forlade:"
+
+#~ msgid "As _Windows"
+#~ msgstr "Som _vinduer"
+
+#~ msgid "As a _List"
+#~ msgstr "Som en _liste"
+
+#~ msgid "_Go"
+#~ msgstr "_Navigér"
+
+#~ msgid "Open conversations in single window with list view"
+#~ msgstr "Åbn samtaler i et enkelt vindue med listevisning"
+
+#~ msgid "Whether or not to timestamp all messages in conversations."
+#~ msgstr "Om alle beskeder i samtaler skal tidsstemples."
+
+#~ msgid "[Eating,Sleeping]"
+#~ msgstr "[Spiser,Sover]"
+
+#~ msgid "[Working]"
+#~ msgstr "[Arbejder]"
+
+#~ msgid "Custom Away Message..."
+#~ msgstr "Egen fraværsbesked..."
+
+#~ msgid "Messages"
+#~ msgstr "Beskeder"
+
+#~ msgid "Open conversations in a single window with _list view"
+#~ msgstr "Åbn samtaler i et enkelt vindue med _listevisning"
+
+#~ msgid ""
+#~ "These messages are used to describe your status when you're about to "
+#~ "leave and when you're away."
+#~ msgstr ""
+#~ "Disse beskeder bruges til at beskrive din status når du skal til at gå og "
+#~ "når du er fraværende."
+
+#~ msgid "Use com_pact conversation style"
+#~ msgstr "Benyt _kompakt samtalestil"
+
+#~ msgid "Use sounds to _notify when new messages arrive"
+#~ msgstr "Udsend lyd for at _annoncere når nye beskeder ankommer"
+
+#~ msgid "_Timestamp all messages"
+#~ msgstr "_Tidsstempl alle beskeder"
+
+#~ msgid "Auto away enabled"
+#~ msgstr "Auto-fravær aktiveret"
+
+#~ msgid "Extended autoaway time"
+#~ msgstr "Udvidet-fraværstid"
+
+#~ msgid ""
+#~ "The number of minutes of idle time before automatically going into \"away"
+#~ "\" mode."
+#~ msgstr ""
+#~ "Antal minutters inaktivitet før der automatisk skiftes til \"fraværende\"."
+
+#~ msgid ""
+#~ "The number of minutes of idle time before automatically going into "
+#~ "\"extended away\" mode."
+#~ msgstr ""
+#~ "Antal minutters inaktivitet før der automatisk skiftes til \"udvidet "
+#~ "fravær\"."
+
+#~ msgid ""
+#~ "Whether or not to go into \"away\" mode automatically when a certain time "
+#~ "of idling has passed."
+#~ msgstr ""
+#~ "Om der skal skiftes til \"fraværende\" automatisk når et bestemt tidsrum "
+#~ "af inaktivitet er forløbet."
+
+#~ msgid "%sChat"
+#~ msgstr "%sSamtale"
+
+#~ msgid "Offline "
+#~ msgstr "Ikke tilkoblet"
+
+#~ msgid "Others"
+#~ msgstr "Andre"
+
+#~ msgid "Use ta_bs instead of windows for conversations"
+#~ msgstr "Benyt _faneblade i stedet for vinduer til samtaler"
+
+#~ msgid "Free to chat"
+#~ msgstr "Ledig til snak"
+
+#~ msgid "Extended away"
+#~ msgstr "Udvidet fravær"
+
+#~ msgid "_Edit Account..."
+#~ msgstr "_Redigér kontoen..."
+
+#~ msgid "<b>Additional information</b>"
+#~ msgstr "<b>Yderligere information</b>"
+
+#~ msgid "<b>Address</b>"
+#~ msgstr "<b>Adresse</b>"
+
+#~ msgid "<b>Auto away</b>"
+#~ msgstr "<b>Auto-forvær</b>"
+
+#~ msgid "<b>Jabber ID:</b>"
+#~ msgstr "<b>Jabber-id:</b>"
+
+#~ msgid "<b>Setup Finished</b>"
+#~ msgstr "<b>Konfiguration afsluttet</b>"
+
+#~ msgid "Automatically enter away mode during inactivity"
+#~ msgstr "Skift automatisk til \"fraværende\" hvis inaktiv"
+
+#~ msgid "Enter away mode after"
+#~ msgstr "Skift til \"fraværende\" efter"
+
+#~ msgid "I'm away eating dinner, bbiab..."
+#~ msgstr "Jeg spiser middag, kommer snart..."
+
+#~ msgid "Presence:"
+#~ msgstr "Tilstedeværelse:"
+
+#~ msgid "Priority:"
+#~ msgstr "Prioritet:"
+
+#~ msgid "Set the status you want to use"
+#~ msgstr "Sæt den status du ønsker at bruge"
+
+#~ msgid "_Approve"
+#~ msgstr "_Godkend"
+
+#~ msgid "_Defer"
+#~ msgstr "_Udskyd"
+
+#~ msgid "minutes"
+#~ msgstr "minutter"
diff --git a/trunk/po/de.po b/trunk/po/de.po
new file mode 100644
index 000000000..8b0e86e13
--- /dev/null
+++ b/trunk/po/de.po
@@ -0,0 +1,1371 @@
+# German translation of Empathy.
+# Copyright (C) 2003-2005, 2007 Free Software Foundation, Inc.
+# Hendrik Richter <naggeldak@gnome-de.org>, 2003.
+# Frank Arnold <frank@scirocco-5v-turbo.de>, 2005.
+# Andre Klapper <ak-47@gmx.net>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Gossip\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-11-13 00:56+0100\n"
+"PO-Revision-Date: 2007-11-13 01:53+0100\n"
+"Last-Translator: Andre Klapper <ak-47@gmx.net>\n"
+"Language-Team: German <gnome-de@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Instant-Messenger"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Instant-Nachrichten senden und empfangen"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Immer ein neues Chat-Fenster für neue Chats öffnen."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "Chat-Fenster-Thema"
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Checks if Salut account is created"
+msgstr "Prüft, ob ein Salut-Konto erzeugt wird"
+
+#: ../data/empathy.schemas.in.h:4
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Kommagetrennte Liste der Sprachen, für die die Rechtschreibprüfung genutzt "
+"wird (z.B. en, fr, nl)."
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Compact contact list"
+msgstr "Kompakte Kontaktliste"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Contact list sort criterium"
+msgstr "Kontaktlisten-Sortierkriterium"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Default directory to select an avatar image from"
+msgstr "Vorgabeverzeichnis zum Auswählen eines Benutzerbildes"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable popup when contact is available"
+msgstr "Popup aktivieren, falls Kontakt verfügbar ist"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when away"
+msgstr "Klänge bei Abwesenheit deaktivieren"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable sound when busy"
+msgstr "Klänge bei Beschäftigung aktivieren"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable spell checker"
+msgstr "Rechtschreibprüfung aktivieren"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide main window"
+msgstr "Hauptfenster verstecken"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Hide the main window."
+msgstr "Das Hauptfenster verstecken."
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Open new chats in separate windows"
+msgstr "Neue Chats in eigenen Fenstern öffnen"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show avatars"
+msgstr "Benutzerbilder anzeigen"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show hint about closing the main window"
+msgstr "Hinweis über das Schließen des Hauptfensters anzeigen"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Show offline contacts"
+msgstr "Abgemeldete Kontakte anzeigen"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Spell checking languages"
+msgstr "Rechtschreibprüfungssprachen"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Das letzte Verzeichnis, aus welchem ein Benutzerbild gewählt wurde."
+
+#: ../data/empathy.schemas.in.h:20
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+"Das Thema, das für das Anzeigen von Unterhaltungen in Chat-Fenstern benutzt "
+"wird."
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use graphical smileys"
+msgstr "Grafische Smilies verwenden"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use notification sounds"
+msgstr "Benachrichtigen mit Klängen"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "Use theme for chat rooms"
+msgstr "Thema für Chaträume benutzen"
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not the Salut account has been created on the first empathy run."
+msgstr ""
+"Stellt fest, ob ein Salut-Konto beim ersten Start von Empathy erzeugt wurde."
+
+#: ../data/empathy.schemas.in.h:25
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Legt fest, ob für eingegebene Wörter die Rechtschreibung geprüft werden soll."
+
+#: ../data/empathy.schemas.in.h:26
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Legt fest, ob bei Unterhaltungen Smilies in grafische Bilder umgewandelt "
+"werden sollen."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play a sound when messages arrive."
+msgstr ""
+"Legt fest, ob bei eingehenden Nachrichten ein Klang abgespielt werden soll."
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to play sounds when away."
+msgstr "Bei Abwesenheit Klänge abspielen."
+
+#: ../data/empathy.schemas.in.h:29
+msgid "Whether or not to play sounds when busy."
+msgstr "Bei Beschäftigung Klänge abspielen."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+"Legt fest, ob ein Popup angezeigt werden soll, wenn ein Kontakt verfügbar "
+"wird."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Legt fest, ob Benutzerbilder für Kontakte in der Kontaktliste und den "
+"Chat-Fenstern angezeigt werden sollen."
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Abgemeldete Kontakte in der Kontaktliste anzeigen."
+
+#: ../data/empathy.schemas.in.h:33
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Legt fest, ob der Dialog über das Schließen des Hauptfensters durch den »x«-"
+"Knopf in der Titelleiste angezeigt werden soll."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Legt fest, ob die Kontaktliste im Kompaktmodus angezeigt werden soll."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Legt fest, ob das Thema für Chaträume genutzt werden soll."
+
+#: ../data/empathy.schemas.in.h:36
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Legt fest, welches Kriterium für das Sortieren der Kontaktliste genutzt "
+"werden soll. Standardmäßig wird bei »name« nach den Namen der Kontakte "
+"sortiert, bei »state« wird die Kontaktliste nach dem Status der Kontakte "
+"sortiert."
+
+#: ../libempathy/empathy-presence.c:185 ../libempathy/empathy-presence.c:285
+msgid "Offline"
+msgstr "Abgemeldet"
+
+#: ../libempathy/empathy-presence.c:275
+msgid "Available"
+msgstr "Verfügbar"
+
+#: ../libempathy/empathy-presence.c:277
+msgid "Busy"
+msgstr "Beschäftigt"
+
+#: ../libempathy/empathy-presence.c:280
+msgid "Away"
+msgstr "Abwesend"
+
+#: ../libempathy/empathy-presence.c:282
+msgid "Hidden"
+msgstr "Versteckt"
+
+#: ../libempathy/empathy-tp-contact-list.c:729 ../src/empathy.c:151
+msgid "People nearby"
+msgstr "Personen in der Nähe"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Ein Instant-Messaging-Programm für GNOME"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Hendrik Richter\n"
+"Frank Arnold\n"
+"Andre Klapper"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "Alle"
+
+#: ../libempathy-gtk/empathy-account-widget-generic.c:146
+#: ../libempathy-gtk/empathy-account-widget-generic.c:208
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Fortgeschritten</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+msgid "Pass_word:"
+msgstr "Pass_wort:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+msgid "Priority:"
+msgstr "P_riorität:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Reso_urce:"
+msgstr "_Ressource:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Use encryption (SS_L)"
+msgstr "Verschlüsselung verwenden (_SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+msgid "_Port:"
+msgstr "P_ort:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Server:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "jabber account settings"
+msgstr "Jabber-Kontoeinstellungen"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "MSN-Kontoeinstellungen"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "_E-Mail:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Vorname:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_Jabber-Kennung:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "_Nachname:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "Spit_zname:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "_Veröffentlichter Name:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "Salut-Kontoeinstellungen"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:218
+msgid "Disable"
+msgstr "Deaktivieren"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:221
+msgid "Enable"
+msgstr "Aktivieren"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:256
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:260
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:267
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Kein Konto ausgewählt</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:268
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:274
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Keine Konten konfiguriert</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:401
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Konten"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:898
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Sie sind dabei, Ihr %s-Konto zu entfernen!\n"
+"Möchten Sie fortfahren?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:904
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Neues Konto</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Einstellungen</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "Er_stellen"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "_Typ:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:448
+msgid "Select Your Avatar Image"
+msgstr "Benutzerbild auswählen"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:451
+msgid "No Image"
+msgstr "Kein Bild"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:511
+msgid "Images"
+msgstr "Bilder"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:515
+msgid "All Files"
+msgstr "Alle Dateien"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Zum Vergrößern klicken"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+msgid "Call"
+msgstr "Anrufen"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "Eingang"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "Stummschalten"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "Ausgang"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "Videobild senden"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Volume"
+msgstr "Lautstärke"
+
+#: ../libempathy-gtk/empathy-chat.c:329
+msgid "Disconnected"
+msgstr "Getrennt"
+
+#: ../libempathy-gtk/empathy-chat.c:449
+msgid "offline"
+msgstr "Abgemeldet"
+
+#: ../libempathy-gtk/empathy-chat.c:452
+msgid "invalid contact"
+msgstr "Ungültiger Kontakt"
+
+#: ../libempathy-gtk/empathy-chat.c:455
+msgid "permission denied"
+msgstr "Erlaubnis verweigert"
+
+#: ../libempathy-gtk/empathy-chat.c:458
+msgid "too long message"
+msgstr "Zu lange Nachricht"
+
+#: ../libempathy-gtk/empathy-chat.c:461
+msgid "not implemented"
+msgstr "Nicht implementiert"
+
+#: ../libempathy-gtk/empathy-chat.c:464
+msgid "unknown"
+msgstr "Unbekannt"
+
+#: ../libempathy-gtk/empathy-chat.c:468
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Fehler beim Senden der Nachricht »%s«: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:923
+msgid "Insert Smiley"
+msgstr "Emoticon einfügen"
+
+#: ../libempathy-gtk/empathy-chat.c:970
+msgid "_Check Word Spelling..."
+msgstr "_Rechtschreibung prüfen …"
+
+#: ../libempathy-gtk/empathy-chat.c:1395
+msgid "Connected"
+msgstr "Verbunden"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Leeren"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "Anr_ufen"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "Thema _ändern …"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+msgid "Chat"
+msgstr "Chat"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "Kontakt_informationen"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "Cu_t"
+msgstr "_Ausschneiden"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "In_vite..."
+msgstr "Einla_den …"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Insert _Smiley"
+msgstr "Emoticon einf_ügen"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invitation _message:"
+msgstr "Einladungs_nachricht:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+msgid "Invite"
+msgstr "Einladen"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Left"
+msgstr "Reiter nach _links verschieben"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Move Tab _Right"
+msgstr "Reiter nach _rechts verschieben"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "Select who would you like to invite:"
+msgstr "Auswählen, wen Sie einladen möchten:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+msgid "You have been invited to join a chat conference."
+msgstr "Sie wurden eingeladen, einer Chat-Konferenz beizutreten."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "Kontakt _hinzufügen …"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Add To Favorites"
+msgstr "Zu Favoriten hinzu_fügen"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Close"
+msgstr "S_chließen"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+msgid "_Conversation"
+msgstr "_Unterhaltung"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Copy"
+msgstr "_Kopieren"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+msgid "_Detach Tab"
+msgstr "Reiter ab_trennen"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "_Bearbeiten"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+msgid "_Next Tab"
+msgstr "_Nächster Reiter"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+msgid "_Paste"
+msgstr "E_infügen"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Previous Tab"
+msgstr "_Vorheriger Reiter"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "_Raum"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Show Contacts"
+msgstr "Kontakte an_zeigen"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+msgid "_Tabs"
+msgstr "_Reiter"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr "_Vorherige Unterhaltungen anschauen"
+
+#: ../libempathy-gtk/empathy-chat-view.c:468
+msgid "_Copy Link Address"
+msgstr "Link-Adresse _kopieren"
+
+#: ../libempathy-gtk/empathy-chat-view.c:476
+msgid "_Open Link"
+msgstr "Link _öffnen"
+
+#: ../libempathy-gtk/empathy-chat-view.c:754
+msgid "%A %d %B %Y"
+msgstr "%A, %d. %B %Y"
+
+#: ../libempathy-gtk/empathy-chat-window.c:695
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Unterhaltungen (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1281
+msgid "Typing a message."
+msgstr "Schreibt eine Nachricht."
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "Name"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "Raum"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr "Auto-Verbinden"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Konto:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Raumfavoriten bearbeiten"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Raum beim Start betreten"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Beim Start von Empathy und einer Verbindung diesen Chatraum betreten"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Raumfavoriten verwalten"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Name:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "S_erver:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Raum:"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:176
+msgid "Personal Information"
+msgstr "Persönliche Informationen"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+msgid "Edit Contact Information"
+msgstr "Kontaktinformationen bearbeiten"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:182
+msgid "Contact Information"
+msgstr "Kontaktinformationen"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:277
+msgid "I would like to add you to my contact list."
+msgstr "Ich möchte Sie/Dich gerne zu meiner Kontaktliste hinzufügen."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:301
+msgid "New Contact"
+msgstr "Neuer Kontakt"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "_Später entscheiden"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+#, fuzzy
+msgid "Subscription Request"
+msgstr "Anfrage nach Benachrichtigung"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:198
+msgid "_Contact"
+msgstr "_Kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:202
+msgid "_Group"
+msgstr "_Gruppe"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr "_Chat"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+msgid "Chat with contact"
+msgstr "Chat mit Kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "Infor_mation"
+msgstr "Infor_mationen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "View contact information"
+msgstr "Kontaktinformationen anschauen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Re_name"
+msgstr "Umbe_nennen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Rename"
+msgstr "Umbenennen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+msgid "Edit the groups and name for this contact"
+msgstr "Gruppen und Namen für diesen Kontakt bearbeiten"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "_Remove"
+msgstr "_Entfernen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "Remove contact"
+msgstr "Kontakt entfernen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "_Invite to Chat Room"
+msgstr "In Chatraum einla_den"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "Invite to a currently open chat room"
+msgstr "In einen momentan geöffneten Chatraum einladen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "_Send File..."
+msgstr "_Datei senden …"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "Send a file"
+msgstr "Eine Datei senden"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+msgid "View previous conversations with this contact"
+msgstr "Vorherige Unterhaltungen mit diesem Kontakt anschauen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "_Call"
+msgstr "An_rufen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "Start a voice or video conversation with this contact"
+msgstr "Eine Sprach- oder Videobildunterhaltung mit diesem Kontakt beginnen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1423
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Sorry, ich möchte Sie/Dich nicht mehr in meiner Kontaktliste."
+
+#: ../libempathy-gtk/empathy-contact-widget.c:662
+msgid "Select"
+msgstr "Wählen"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:672
+#: ../libempathy-gtk/empathy-main-window.c:608
+msgid "Group"
+msgstr "Gruppe"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Client-Informationen</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Kontakt-Details</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Kontakt</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Gruppen</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Alias:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Geburtstag:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Client:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Kontaktinformationen"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "E-Mail:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Voller Name:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "Informationen angefordert …"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "Betriebssystem:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Version::"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "Webseite:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:253
+msgid "Enter the new topic you want to set for this room:"
+msgstr "Geben Sie das neue Thema ein, dass Sie für diesen Raum setzen möchten:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:366
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s hat den Raum betreten"
+
+#: ../libempathy-gtk/empathy-group-chat.c:369
+#, c-format
+msgid "%s has left the room"
+msgstr "%s hat den Raum verlassen"
+
+#: ../libempathy-gtk/empathy-group-chat.c:449
+#, c-format
+msgid "Topic: %s"
+msgstr "Thema: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:571
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Thema wurde gesetzt auf: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:573
+msgid "No topic defined"
+msgstr "Kein Thema gesetzt"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Thema:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Gruppen-Chat"
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+msgid "Account"
+msgstr "Konto"
+
+#: ../libempathy-gtk/empathy-log-window.c:504
+msgid "Conversation"
+msgstr "Unterhaltung"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+msgid "Date"
+msgstr "Datum"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "Unterhaltungen"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr "Vorherige Unterhaltungen"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "Suchen"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+#, fuzzy
+msgid "_For:"
+msgstr "_Für:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "Chaträume"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Geben Sie den Namen des Raumes hier ein oder klicken Sie auf einen oder "
+"mehrere Räume in der Liste."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Betreten"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+#, fuzzy
+msgid "Join New"
+msgstr "Betreten"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "Auf_frischen"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"Diese Liste zeigt alle Chaträume an, die auf dem von Ihnen betretenen Server "
+"vorhanden sind."
+
+#: ../libempathy-gtk/empathy-main-window.c:265
+msgid "Show and edit accounts"
+msgstr "Kontakte anzeigen und bearbeiten"
+
+#: ../libempathy-gtk/empathy-main-window.c:629
+msgid "Contact"
+msgstr "Kontakt"
+
+#: ../libempathy-gtk/empathy-main-window.c:812
+msgid "Edit Account _Details"
+msgstr "Konto_details bearbeiten"
+
+#: ../libempathy-gtk/empathy-main-window.c:895
+msgid "Network error"
+msgstr "Netzwerk-Fehler"
+
+#: ../libempathy-gtk/empathy-main-window.c:898
+msgid "Authentication failed"
+msgstr "Authentifizierung fehlgeschlagen"
+
+#: ../libempathy-gtk/empathy-main-window.c:901
+msgid "Encryption error"
+msgstr "Verschlüsselungsfehler"
+
+#: ../libempathy-gtk/empathy-main-window.c:904
+msgid "Name in use"
+msgstr "Name bereits in Benutzung"
+
+#: ../libempathy-gtk/empathy-main-window.c:907
+msgid "Certificate not provided"
+msgstr "Zertifikat wurde nicht bereitgestellt"
+
+#: ../libempathy-gtk/empathy-main-window.c:910
+msgid "Certificate untrusted"
+msgstr "Zertifikat nicht vertrauenswürdig"
+
+#: ../libempathy-gtk/empathy-main-window.c:913
+msgid "Certificate expired"
+msgstr "Zertifikat ausgelaufen"
+
+#: ../libempathy-gtk/empathy-main-window.c:916
+msgid "Certificate not activated"
+msgstr "Zertifikat nicht aktiviert"
+
+#: ../libempathy-gtk/empathy-main-window.c:919
+msgid "Certificate hostname mismatch"
+msgstr "Zertifikat und Hostname unterschiedlich"
+
+#: ../libempathy-gtk/empathy-main-window.c:922
+msgid "Certificate fingerprint mismatch"
+msgstr "Zertifikat und Fingerprint unterschiedlich"
+
+#: ../libempathy-gtk/empathy-main-window.c:925
+msgid "Certificate self signed"
+msgstr "Zertifikat selbst signiert"
+
+#: ../libempathy-gtk/empathy-main-window.c:928
+msgid "Certificate error"
+msgstr "Zertifikat-Fehler"
+
+#: ../libempathy-gtk/empathy-main-window.c:931
+msgid "Unknown error"
+msgstr "Unbekannter Fehler"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Kontaktliste"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Kontext"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "Zu Favoriten hinzu_fügen"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Favoriten verwalten"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Zeige _abgemeldete Kontakte"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_Info"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Konten"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "I_nhalt"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "_Hilfe"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Neue Nachricht …"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "_Persönliche Informationen"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "_Einstellungen"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Beenden"
+
+#: ../libempathy-gtk/empathy-preferences.c:243
+msgid "Language"
+msgstr "Sprache"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Erscheinungsbild</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Klang</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Verhalten</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Kontaktliste</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Rechtschreibprüfung für Sprachen aktivieren:</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Optionen</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>Beschreibung</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>Die Liste der Sprachen zeigt nur die Sprachen an, für die "
+"Wörterbücher installiert sind.</small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Benutzerbilder sind von den Benutzern ausgesuchte Bilder, die in der "
+"Kontaktliste angezeigt werden"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "Chat-_Thema:"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Benachrichtigungen anzeigen, wenn Kontakte _online gehen"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Klänge bei _Abwesenheit aktivieren"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Klänge bei _Beschäftigung aktivieren"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "Allgemein"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Benachrichtigen"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "_Benutzerbilder anzeigen"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "_Emoticons in grafische Bilder umwandeln"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "Ko_mpakte Kontaktliste anzeigen"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "Nach _Name sortieren"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "Nach _Status sortieren"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Rechtschreibprüfung"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "Themen"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr "_Neue Chats in eigenen Fenstern öffnen"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Play sound when messages arrive"
+msgstr "Bei neuen Nachrichten _Klang abspielen"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Use for chat rooms"
+msgstr "Für Chaträume _benutzen"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Benutzerdefinierte Nachrichten …"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Benutzerdefinierte Nachricht"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Nachricht:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Nachricht speichern"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Status:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:188
+#, c-format
+msgid "%s went offline"
+msgstr "%s hat sich abgemeldet"
+
+#: ../libempathy-gtk/empathy-private-chat.c:202
+#, c-format
+msgid "%s has come online"
+msgstr "%s hat sich angemeldet"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "Wort"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "Vorschläge für das Wort"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Rechtschreibprüfung"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Vorschläge für das Wort:"
+
+#: ../libempathy-gtk/empathy-status-icon.c:310
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Neue Nachricht von %s\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:579
+#, fuzzy, c-format
+msgid "Subscription requested by %s"
+msgstr "Anfrage nach Benachrichtigung"
+
+#: ../libempathy-gtk/empathy-status-icon.c:582
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Nachricht: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Status"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "Kontaktliste an_zeigen"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:87
+msgid "Classic"
+msgstr "Klassisch"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:88
+msgid "Simple"
+msgstr "Einfach"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:89
+msgid "Clean"
+msgstr "Sauber"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:90
+msgid "Blue"
+msgstr "Blau"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr ""
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megafon"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Sprich!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Information"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Anwesenheit"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "Setzen Sie Ihre Anwesenheit"
+
+#: ../src/empathy.c:210
+msgid "Don't connect on startup"
+msgstr "Nicht automatisch beim Start verbinden"
+
+#: ../src/empathy.c:222
+msgid "- Empathy Instant Messenger"
+msgstr "- Empathy Instant-Messenger"
diff --git a/trunk/po/dz.po b/trunk/po/dz.po
new file mode 100644
index 000000000..2e7690d9b
--- /dev/null
+++ b/trunk/po/dz.po
@@ -0,0 +1,1419 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip.HEAD.pot\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 19:33+0100\n"
+"PO-Revision-Date: 2007-06-14 16:43+0530\n"
+"Last-Translator: Dawa pemo <daws_403@hotmail.com>\n"
+"Language-Team: Dzongkha <pgeyleg@dit.gov.bt>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+"X-Poedit-Language: Dzongkha\n"
+"X-Poedit-Country: BHUTAN\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "ཁ་སླབ་གསརཔ་གི་དོན་ལུ་ ཁ་སླབ་སྒོ་སྒྲིག་སོ་སོ་ཅིག་ཨ་རྟག་རང་ཁ་ཕྱེ།"
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "ཁ་སླབ་སྒོ་སྒྲིག་བརྗོད་དོན་"
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr "ལག་ལེན་འཐབ་ནིའི་དོན་ལས་ སྡེབ་དཔྱོདཔ་སྐད་ཡིག་ཚུ་གི་ ལྷད་རྟགས་ཀྱིས་སོ་སོ་འཕྱལ་འཕྱལ་བའི་ཐོ་ཡིག་ (དཔེར་ན་ ཨི་ཨེན་ ཨེཕ་ཨར་ ཨེན་ཨེལ་)"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Compact contact list"
+msgstr "སྲབ་ཆུང་འབྲེལ་བ་འཐབ་ནིའི་ཐོ་ཡིག་"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr "འབྲེལ་སའི་ཐོ་ཡིག་གིས་ ཀརའི་ཊི་རི་ཡམ་ དབྱེ་སེལ་འབད་འོང་"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr "ལས་ ཨེ་ཝ་ཊར་གཟུགས་བརྙན་ཅིག་སེལ་འཐུ་འབད་ནིའི་དོན་ལས་ སྔོན་སྒྲིག་སྣོད་ཐོ་"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr "འབྲེལ་བ་འཐབ་ས་འདི་འཐོབ་ཚུགསཔ་ཡོད་པའི་སྐབས་ པོཔ་ཨཔ་ལྕོགས་ཅན་བཟོ་"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr "ཕྱི་ཁར་ཨིན་པའི་སྐབས་ སྒྲ་སྐད་ལྕོགས་ཅན་བཟོ་"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr "ཁོམ་མེད་ཨིན་པའི་སྐབས་ སྒྲ་སྐད་ལྕོགས་ཅན་བཟོ་"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable spell checker"
+msgstr "སྡེབ་དཔྱོདཔ་ལྕོགས་ཅན་བཟོ་"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "སྒོ་སྒྲིག་གཙོ་བོ་སྦ་བཞག་"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "སྒོ་སྒྲིག་གཙོ་བོ་འདི་སྦ་བཞག་"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr "ཁ་སླབ་གསརཔ་ཚུ་ སྒོ་སྒྲིག་སོ་སོ་ཚུ་ནང་ཁ་ཕྱེ་"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr "ཨེ་ཝ་ཊར་ཚུ་སྟོན་"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show hint about closing the main window"
+msgstr "སྒོ་སྒྲིག་གཙོ་བོ་འདི་ཁ་བསྡམ་ནིའི་སྐོར་ལས་ བརྡ་མཚོན་ནི་སྟོན་"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "གློག་ལམ་མེད་པའི་འབྲེལ་བ་འཐབ་ཚུ་ས་སྟོན་"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr "སྡེབ་དཔྱད་འབད་ནིའི་སྐད་ཡིག་ཚུ་"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr "ལས་གདམ་ཁ་རྐྱབས་ཡོད་མི་ ཨེ་ཝ་ཊར་གཟུགས་བརྙན་ཅིག་གི་ མཇུག་གི་སྣོད་ཐོ།"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "ཁ་སླབ་སྒོ་སྒྲིག་ཚུ་ནང་ གྲོས་གླེང་འདི་བཀྲམ་སྟོན་འབད་ནིའི་དོན་ལས་ ལག་ལེན་འཐབ་ཡོད་མི་བརྗོད་དོན་འདི།"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "ཚད་རིས་ཅན་གྱི་སི་མའི་ལི་ཚུ་ལག་ལེན་འཐབ་"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "བརྡ་བསྐུལ་སྒྲ་སྐད་ཚུ་ལག་ལེན་འཐབ་"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr "ཁ་སླབ་ཁང་མིག་ཚུ་གི་དོན་ལུ་བརྗོད་དོན་ལག་ལེན་འཐབ་"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "Whether or not to check words typed against the languages you want to check with."
+msgstr "ཁྱོད་ཀྱིས་ཞིབ་དཔྱད་འབད་ནི་ཨིན་མི་ སྐད་ཡིག་ཚུ་གི་རྒྱབ་འགལ་དུ་ཡིག་དཔར་རྐྱབས་ཡོད་པའི་མིང་ཚིག་ཚུ་ ཞིབ་དཔྱད་འབད་ནི་ཨིན་ན་མེན་ན།"
+
+#: ../data/empathy.schemas.in.h:24
+msgid "Whether or not to convert smileys into graphical images in conversations."
+msgstr "སི་མའི་ལི་ཚུ་ གྲོས་གླེང་ནང་ ཚད་རིས་ཅན་གྱི་གཟུགས་བརྙན་ནང་ལུ་གཞི་བསྒྱུར་འབད་ནི་ཨིན་ན་མེན་ན།"
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "འཕྲིན་དོན་ཚུ་འབྱོར་བའི་སྐབས་ སྒྲ་སྐད་གཏང་ནི་ཨིན་ན་མེན་ན།"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "ཕྱི་ཁར་ཨིན་པའི་སྐབས་ སྒྲ་སྐད་ཚུ་གཏང་ནི་ཨིན་ན་མེན་ན།"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "ཁོམ་མེད་པའི་སྐབས་ སྒྲ་སྐད་གཏང་ནི་ཨིན་ན་མེན་ན།"
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "འབྲེལ་བ་འཐབ་ས་ཅིག་འཐོབ་ཚུགསཔ་འགྱོཝ་ད་ པོཔ་ཨཔ་ཅིག་སྟོན་ནི་ཨིན་ན་མེན་ན།"
+
+#: ../data/empathy.schemas.in.h:29
+msgid "Whether or not to show avatars for contacts in the contact list and chat windows."
+msgstr "འབྲེལ་བ་འཐབ་སའི་ཐོ་ཡིག་དང་ཁ་སླབ་སྒོ་སྒྲིག་ཚུ་ནང་གི་ འབྲེལ་བ་འཐབ་ས་ཚུ་གི་དོན་ལུ་ ཨེ་ཝ་ཊར་ཚུ་སྟོན་ནི་ཨིན་ན་མེན་ན།"
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "འབྲེལ་བ་འཐབ་སའི་ཐོ་ཡིག་ནང་ལུ་ གློག་ལམ་མེད་པའི་འབྲེལ་བ་འཐབ་ས་ཚུ་ སྟོན་ནི་ཨིན་ན་མེན་ན།"
+
+#: ../data/empathy.schemas.in.h:31
+msgid "Whether or not to show the message dialog about closing the main window with the 'x' button in the title bar."
+msgstr "མགོ་མིང་ཕྲ་རིང་ནང་ལུ་ 'x' ཨེབ་རྟ་དང་གཅིག་ཁར་ སྒོ་སྒྲིག་གཙོ་བོ་འདི་གི་ཁ་བསྡམ་ཐངས་ཀྱི་སྐོར་ལས་ འཕྲིན་དོན་ཌའི་ལོག་འདི་ སྟོན་ནི་ཨིན་ན་མེན་ན།"
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "སྲབ་ཆུང་ཐབས་ལམ་ནང་འབྲེལ་བ་འཐབ་སའི་ཐོ་ཡིག་འདི་སྟོན་ནི་ཨིན་ན་མེན་ན།"
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "ཁ་སླབ་ཁང་མིག་ཚུ་གི་དོན་ལུ་ བརྗོད་དོན་འདི་ལག་ལེན་འཐབ་ནི་ཨིན་ན་མེན།"
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Which criterium to use when sorting the contact list. Default is to use sort by the contact's name with the value \"name\". A value of \"state\" will sort the contact list by state."
+msgstr "འབྲེལ་སའི་ཐོ་བཀོད་ དབྱེ་སེལ་འབད་བའི་སྐབས་ ཀརའི་ཊི་རི་ཡམ་ ག་དེ་ལག་ལེན་འཐབ་ནི? སྔོན་སྒྲིག་འདི་ value \"name\" དང་བཅས་ འབྲེལ་སའི་མིང་དང་བཅས་དབྱེ་སེལ་འབད་ནིའི་དོན་ལུ་ཨིན། \"state\" གི་བེ་ལུ་དེ་གིས་ འབྲེལ་སའི་ཐོ་ཡིག་ དེ་མངའ་སྡེའི་ཐོག་ལས་དབྱེ་སེལ་འབད་འོང་།"
+
+#: ../libempathy/gossip-contact.c:654
+#: ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "གློག་ལམ་མེད་པ་"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "འཐོབ་ཚུགསཔ་"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "ཁོམ་མེདཔ་"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "ཕྱི་ཁར་"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+msgid "Show and edit accounts"
+msgstr "རྩིས་ཐོ་ཚུ་སྟོན་ཞིནམ་ལས་ཟུན་དག་འབད་"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "སྡེ་ཚན་"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+msgid "Contact"
+msgstr "འབྲེལ་ས་"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List - Empathy"
+msgstr "འབྲེལ་སའི་ཐོ་ཡིག་-ཨིམ་པེ་ཐི་"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "སྐབས་དོན་"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "དགའ་མི་ཚུ་མཐུད་(_F)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr "གསརཔ་མཐུད་(_N)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr "དགའ་མི་ཚུ་འཛིན་སྐྱོང་འཐབ་"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "གློག་ལམ་མེད་པའི་འབྲེལ་ས་ཚུ་སྟོན་(_O)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+msgid "_About"
+msgstr "སྐོར་ལས་(_A)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "རྩིས་ཐོ་ཚུ་(_A)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "འབྲེལ་ས་ཁ་སྐོང་རྐྱབས་(_A)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "ཁ་སླབ་(_C)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "ནང་དོན་ཚུ་(_C)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "_Edit"
+msgstr "ཞུན་དག་(_E)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "གྲོགས་རམ་(_H)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "འཕྲིན་དོན་གསརཔ་(_N)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "རང་དོན་བརྡ་དོན་(_P)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "དགའ་གདམ་ཚུ་(_P)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "སྤང་(_Q)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr "ཁང་མིག་(_R)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr "ཧེ་མའི་གྲོས་གླེང་ཚུ་སྟོན་(_V)"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "གནས་ཚད་"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "འབྲེལ་སའི་ཐོ་ཡིག་སྟོན་(_S)"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid "Empathy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version."
+msgstr "ཨིམ་པེ་ཐི་དེ་ ་རང་དབང་མཉེན་ཆས་ཅིག་ཨིན་ ཁྱོད་ཀྱིས་འདི་ལོག་བགོ་བཀྲམ་འབད་ཚུགས་ དེ་ལས་/ཡང་ན་ འདི་ རང་དབང་མཉེན་ཆས་གཞི་ཚོགས་གིས་ དཔེ་བསྐྲུན་འབད་དོ་བཟུམ་སྦེ་ ཇི་ཨེན་ཡུ་ ཡོངས་ཁྱབ་མི་མང་ཆོག་ཐམ་འདི་གི་ ཐ་སྙད་འོག་ལུ་ལེགས་བཅོས་འབད་ཚུགས་ ཡང་ཅིན་ཆོག་ཐམ་འདི་གི་ཐོན་རིམ་ ༢ ཡང་ན་ (ཁྱོད་རའི་གདམ་ཁ་ཐོག་) ཤུལ་ལས་ཀྱི་ཐོན་རིམ་ག་འབད་རུང་།"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details."
+msgstr "ཨིམ་པེ་ཐི་དེ་ ཕན་ཐོག་ཅན་ཅིག་འོང་མནོ་བའི་ རེ་བ་བསྐྱེད་དེ་ བགོ་བཀྲམ་འབད་འབདཝ་ཨིན་ དེ་འབདཝ་ད་ ཉེན་ལེན་ག་ནི་ཡང་མེད་པར་ ཡང་ན་ཚོང་འབྲེལ་ཡང་ན་དམིགས་བསལ་དགོས་དོན་ཅིག་གི་དོན་ལུ་ཚུད་སྒྲིག་གི་ བསྟར་སྤྱོད་འབད་འབད་བའི་ཉེན་ལེན་ག་ནི་ཡང་མེད་པར། རྒྱས་བཤད་ཧེང་བཀལ་གྱི་དོན་ལུ་ ཇི་ཨེན་ཡུ་ཡོངས་ཁྱབ་མི་མང་ཆོག་ཐམ་བལྟ།"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid "You should have received a copy of the GNU General Public License along with Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr "ཁྱོད་ཀྱིས་ ཨིམ་པེ་ཐི་དང་གཅིག་ཁར་ ཇི་ཨེན་ཡུ་ཡོངས་ཁྱབ་མི་མང་ཆོག་ཐམ་འདི་གི་ འདྲ་བཤུས་ཅིག་འཐོབ་འཐོབ་འོང་ མ་འཐོབ་པ་ཅིན་ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA ལུ་ཡི་གུ་གཏང་"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "ཇི་ནོམ་གི་དོན་ལུ་ འཕྲལ་མྱུར་འཕྲིན་གཏོང་ཞབས་ཏོག་སྤྱོད་མི་"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+msgid "translator-credits"
+msgstr "ཨའི་ཌི་ཨར་སི་གི་མ་དངུལ་རྒྱབ་སྐྱོར་ཐོག་ལས་་བརྡ་དོན་འཕྲུལ་རིག་ལས་ཁུངས་ནང་ སྐད་བསྒྱུར་འབད་ཡི། ཁ་གསལ་གྱི་དོན་ལུ་ འབྲེལ་བ་འཐབ་ས་: <pema_geyleg@druknet.bt>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+msgid "Disable"
+msgstr "ལྕོགས་མིན་བཟོ་"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr "ལྕོགས་ཅན་བཟོ་"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+msgid "<b>No Account Selected</b>"
+msgstr "<b>རྩིས་ཐོ་གཅིག་ཡང་སེལ་འཐུ་མ་འབད་བས་</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want to configure in the list on the left."
+msgstr ""
+"རྩིས་ཐོ་གསརཔ་ཅིག་ཁ་སྐོང་རྐྱབས་ནིའི་དོན་ལས་ ཁྱོད་ཀྱིས་ 'ཁ་སྐོང་' ཨེབ་གཏང་འབད་བཏུབ་ དེ་ལས་ ཁྱོད་ཀྱི་དོན་ལུ་ ཐོ་བཀོད་གསརཔ་ཅིག་ རིམ་སྲིག་འགོ་བཙུགས་ནིའི་དོན་ལས་ གསར་བསྐྲུན་འབད་འོང་།\n"
+"\n"
+"ཁྱོད་ཀྱིས་རྩིས་ཐོ་ཅིག་ཁ་སྐོང་མི་རྐྱབས་ནི་ཨིན་པ་ཅིན་ གཡོན་ཁ་ཐུག་ལུ་ ཐོ་ཡིག་ནང་ ཁྱོད་ཀྱིས་རིམ་སྒྲིག་འབད་དགོ་མནོ་མི་ རྩིས་ཐོ་འདི་གུ་ཨེབ་གཏང་འབད།"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>རྩིས་ཐོ་གཅིག་ཡང་རིམ་སྒྲིག་མ་འབད་བས་</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid "To add a new account, you can click on the 'Add' button and a new entry will be created for you to start configuring."
+msgstr "རྩིས་ཐོ་གསརཔ་ཅིག་ཁ་རྐྱབས་ནིའི་དཅན་ལས་ ཁྱོད་ཀྱིས་ 'ཁ་སྐོང་' ཨེབ་རྟ་འདི་གུ་ཨེབ་གཏང་འབད་བཏུབ་ དེ་ལས་ ཐོ་བཀོད་གསརཔ་ཅིག་ཁྱོད་ཀྱི་དོན་ལུ་ རིམ་སྒྲིག་འགོ་བཙུགས་ནིའི་དོན་ལས་ གསར་བསྐྲུན་འབད་འོང་།"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr "རྩིས་ཐོ་"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"ཁྱོད་ཀྱིས་ཁྱོད་རའི་ %s རྩིས་ཐོ་རྩ་བསྐྲད་གཏང་ནི་འབད་དེས་!\n"
+"ཁྱོད་ཀྱིས་འཕྲོ་མཐུད་དེ་འབད་ནི་ངེས་ཐིག་ཨིན་ན?"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still be available."
+msgstr ""
+"འབྲེལ་ཡོད་གྲོས་གླེང་དང་ ཁ་སླབ་ཁང་མིག་ཚུ་ ཁྱོད་ཀྱིས་འཕྲོ་མཐུད་ནི་གི་གྲོས་ཐག་བཅད་པ་ཅིན་ རྩ་བསྐད་མི་གཏང་།\n"
+"\n"
+"ཁྱོད་ཀྱིས་ ཤུལ་ལས་ཀྱི་དུས་ཚོད་ཅིག་ལུ་ རྩིས་ཐོ་འདི་ལོག་ཁ་སྐོང་རྐྱབས་ནིའི་གྲོས་ཐག་བཅད་ནི་ཨིན་ན་ འདི་འཐོབ་ཚུགསཔ་འོང་།"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+msgid "<b>Account</b>"
+msgstr "<b>རྩིས་ཐོ་</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+msgid "<b>New Account</b>"
+msgstr "<b>རྩིས་ཐོ་གསརཔ་</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+msgid "<b>Settings</b>"
+msgstr "<b>སྒྲིག་སྟངས་</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr "ཁྱོད་ལུ་འདི་མི་ངོམ་ངོས་འཛིན་འབད་ནི་ལུ་རྩིས་ཐོ་འདིའི་དོན་ལུ་མཐུན་མོང་མ་ཡིན་པའི་མིང་ཅིག་"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+msgid "Cr_eate"
+msgstr "གསར་བསྐྲུན་འབད་ (_E)"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr "ཨའི་མིན་ཌིའོ།"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "ཇེབ་བར།"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want to configure in the list on the left."
+msgstr ""
+"རྩིས་ཐོ་གསརཔ་ཁ་སྐོང་རྐྱབས་ནིའི་དོན་ལས་ ཁྱོད་ཀྱིས་ 'ཁ་སྐོང་' ཨེབ་རྟ་འདི་གུ་ཨེབ་གཏང་འབད་བཏུབ་ དེ་ལས་ ཐོ་བཀོད་གསརཔ་ཅིག་ ཁྱོད་ལུ་རིམ་སྒྲིག་འགོ་བཙུགས་ནིའི་དོན་ལུ་ གསར་བསྐྲུན་འབད་འོང་།\n"
+"\n"
+"ཁྱོད་ཀྱིས་རྩིས་ཐོ་ཅིག་ཁ་སྐོང་མི་རྐྱབས་ནི་ཨིན་པ་ཅིན་ གཡོན་ཁ་ཐུག་གི་ཐོ་ཡིག་འདི་ནང་ཁྱོད་ཀྱིས་རིམ་སྒྲིག་འབད་ནི་ཨིན་མི་ རྩིས་ཐོ་འདི་གུ་ཨེབ་གཏང་འབད།"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+msgid "_Name:"
+msgstr "མིང་:(_N)"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+msgid "_Type:"
+msgstr "དབྱེ་བ།(_T)"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+msgid "<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></small>"
+msgstr "<small><b><span foreground=\"#555\">དཔེར་ན་: user@jabber.org</span></b></small>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "ཆོག་ཡིག་བརྗེད་བཞག་ནི་དང་ཐོ་བཀོད་འདི་བསལ།"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr "ནང་བསྐྱོད་ཨའི་ཌི་:(_D)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+msgid "Pass_word:"
+msgstr "ཆོག་ཡིག་:(_w)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr "ཐོན་ཁུངས་:(_u)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+msgid "Use encryption (SS_L)"
+msgstr "གསང་བཟོ་ལག་ལེན་འཐབ་ (ཨེསི་ཨེསི་ཨེལ་) (_L)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+msgid "_Port:"
+msgstr "འདྲེན་ལམ་:(_P)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "སར་བར་:(_S)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr "ཇེབ་བར་རྩིས་ཐོ་སྒྲིག་སྟངས་"
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "མཐུད་ལམ་བཏོག་ཡོདཔ་"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr "སི་མའི་ལི་བཙུགས་"
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr "མིང་ཚིག་ཡིག་སྡེབ་ཞིབ་དཔྱད་འབད་(_C)"
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "མཐུད་ཡོདཔ་"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "བསལ་(_l)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr "གནད་དོན་བསྒྱུར་བཅོས་འབད་་་(_T)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "ཁ་སླབ་"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr "འབྲེལ་སའི་བརྡ་དོན་(_m)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+msgid "Cu_t"
+msgstr "བཏོག་(_t)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+msgid "In_vite..."
+msgstr "མགྲོན་བརྡ་འབད་་་(_v)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "སི་མའི་ལི་བཙུགས་(_S)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+msgid "Invitation _message:"
+msgstr "མགྲོན་བརྡའི་འཕྲིན་དོན་:(_m)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr "མགྲོན་བརྡ་འབད་"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "མཆོང་ལྡེ་གཡོན་ཁ་ཐུག་བཤུད་(_L)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "མཇོང་ལྡེ་གཡས་ཁ་ཐུག་བཤུད་(_R)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr "ཁྱོད་ཀྱིས་ག་མགྲོན་བརྡ་འབད་ནི་ཨིན་སེལ་འཐུ་འབད་:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "ཁྱོད་ལུ་ཁ་སླབ་ཞལ་འཛོམས་ཅིག་གི་གྲངསསུ་འཛུལ་ནི་གི་མགྲོན་བརྡ་འབད་ཡོད།"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "དགའ་མི་ལུ་ཁ་སྐོང་རྐྱབས་(_A)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr "ཁ་བསྡམ་(_C)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "གྲོས་གླེང་(_C)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr "འདྲ་བཤུས་(_C)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "མཆོང་ལྡེ་ཁ་འཕྱལ་(_D)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "ཤུལ་མའི་མཆོང་ལྡེ་(_N)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr "སྦྱར་(_P)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "ཧེ་མའི་མཆོང་ལྡེ་(_P)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr "འབྲེལ་ས་སྟོན་(_S)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "མཆོང་ལྡེ་ཚུ་(_T)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "འབྲེལ་ལམ་ཁ་བྱང་འདྲ་བཤུས་རྐྱབས་(_C)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "འབྲེལ་ལམ་ཁ་ཕྱེ་(_O)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "འཕྲིན་དོན་གསརཔ།"
+msgstr[1] "འཕྲིན་དོན་གསརཔ་ཚུ།"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+msgid "Chat Room"
+msgstr "ཁ་སླབ་ ཁང་མིག་"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "གྲོས་གླེང་"
+msgstr[1] "གྲོས་གླེང་ཚུ་(%d)"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "འཕྲིན་དོན་ཅིག་ཡིག་དཔར་རྐྱབས་དོ།"
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+msgid "_Contact"
+msgstr "འབྲེལ་ས་(_C)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+msgid "_Group"
+msgstr "སྡེ་ཚན་(_G)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "Chat with contact"
+msgstr "འབྲེལ་ས་དང་གཅིག་ཁར་ཁ་སླབ་"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "Infor_mation"
+msgstr "བརྡ་དོན་(_m)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "View contact information"
+msgstr "འབྲེལ་སའི་བརྡ་དོན་སྟོན་"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Re_name"
+msgstr "བསྐྱར་མིང་བཏགས་(_n)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Rename"
+msgstr "བསྐྱར་མིང་བཏགས་"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "Edit the groups and name for this contact"
+msgstr "འ་ནི་འབྲེལ་ས་འདི་གི་དོན་ལུ་ སྡེ་ཚན་དང་མིང་འདི་ཞུན་དག་འབད་"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "རྩ་བསྐྲད་གཏང་(_R)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "Remove contact"
+msgstr "འབྲེལ་ས་རྩ་བསྐྲད་གཏང་"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "_Invite to Chat Room"
+msgstr "ཁ་སླབ་ཁང་མིག་ལུ་མགྲོན་བརྡ་འབད་(_I)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr "ད་ལྟོ་ཁ་ཕྱེ་ཡོད་པའི་ཁ་སླབ་ཁང་མིག་ནང་ མགྲོན་བརྡ་འབད་"
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr "ཡིག་སྣོད་གཏང་(_S)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "Send a file"
+msgstr "ཡིག་སྣོད་ཅིག་གཏང་"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "View previous conversations with this contact"
+msgstr "འ་ནི་འབྲེལ་ས་དང་གཅིག་ ཧེ་མའི་གྲོས་གླེང་ཚུ་སྟོན་"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr "སྐད་ཡིག་"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>འབྱུང་སྣང་</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>རྣར་ཉན་</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>སྤྱོད་ལམ་</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>འབྲེལ་སའི་ ཐོ་ཡིག་</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr "<b>སྐད་ཡིག་ཚུ་</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>གདམ་ཁ་ཚུ་</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>མཐོང་བའི་</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid "<small>The list of languages reflects only the languages for which you have a dictionary installed.</small>"
+msgstr "<small>སྐད་ཡིག་ཚུ་གི་ཐོ་ཡིག་གིས་ ཁྱོད་ལུ་ཚིག་མཛོད་གཞི་བཙུགས་འབད་ཡོད་མི་གི་དོན་ལུ་ སྐད་ཡིག་ཚུ་རྐྱངམ་ཅིག་ བརྡ་མཚོནམ་ཨིན།</small>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "ཨེ་ཝ་ཊར་ཚུ་ ལག་ལེན་པ་གིས་གདམ་ཁ་རྐྱབས་ཡོད་པའི་ གཟུགས་བརྙན་ འབྲེལ་སའི་ཐོ་ཡིག་འདི་ནང་སྟོན་ཡོད་མི་འདི་ཨིན་"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "ཁ་སླབ་བརྗོད་དོན་:(_e)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "འབྲེལ་ས་འདི་གློག་ལམ་ཐོག་འོང་པའི་སྐབས་ བརྡ་བསྐུལ་བཀྲམ་སྟོན་འབད་ (_o)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "ཕྱི་ཁར་ཨིན་པའི་སྐབས་སྒྲ་སྐད་ལྕོགས་ཅན་བཟོ་(_a)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "ཁོམ་མེད་པའི་སྐབས་སྒྲ་སྐད་ལྕོགས་ཅན་བཟོ་(_b)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr "ཡོངས་ཁྱབ་"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+msgid "Notifications"
+msgstr "བརྡ་བསྐུལ་ཚུ་"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+msgid "Preferences"
+msgstr "དགའ་གདམ་ཚུ་"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "ཨེ་ཝ་ཊར་ཚུ་སྟོན་(_a)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "སི་མའི་ལི་ཚུ་ གཟུགས་བརྙན་སྦེ་སྟོན་(_s)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "སྲབ་ཆུང་འབྲེལ་སའི་ཐོ་ཡིག་སྟོན་(_m)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "མིང་གིས་ དབྱེ་སེལ་འབད་(_N)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "མངའ་སྡེ་གིས་ དབྱེ་སེལ་འབད་"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "སྡེབ་དཔྱད་འབད་དོ་"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr "བརྗོད་དོན་ཚུ་"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr "སྡེབ་དཔྱད་འབད་ནི་ལྕོགས་ཅན་བཟོ་(_E)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "ཁ་སླབ་གསརཔ་ཚུ་ སྒོ་སྒྲིག་སོ་སོ་ནང་ཁ་ཕྱེ་(_O)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "འཕྲིན་དོན་འབྱོར་བའི་སྐབས་ སྒྲ་སྐད་གཏང་(_P)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "ཁ་སླབ་ཁང་མིག་ཚུ་གི་དོན་ལུ་ལག་ལེན་(_U)"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr "སྲོལ་སྒྲིག་འཕྲིན་དོན་"
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+msgid "Clear List..."
+msgstr "ཐོ་ཡིག་བསལ་"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+msgid "Are you sure you want to clear the list?"
+msgstr "ཁྱོད་ཀྱིས་འ་ནི་ཐོ་ཡིག་འདི་བསལ་ནི་ངེས་གཏན་ཨིན་ན?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid "This will remove any custom messages you have added to the list of preset status messages."
+msgstr "འ་ནི་འདི་གིས་ ཁྱོད་ཀྱིས་ སྔར་སྒྲིག་གནས་ཚད་འཕྲིན་དོན་ཚུ་གི་ཐོ་ཡིག་འདི་ལུ་ ཁ་སྐོང་རྐྱབས་ཡོད་མི་ སྲོལ་སྒྲིག་འཕྲིན་ག་ཅི་འབད་རུང་རྩ་བསྐྲད་གཏང་འོང་།"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr "ཐོ་ཡིག་བསལ་"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "གནས་ཚད་འཕྲིན་དོན་ཐོ་བཀོདའབད་:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+msgid "Status Message Presets"
+msgstr "གནས་ཚད་འཕྲིན་དོན་སྔར་སྒྲིག་འབདཝ་ཨིན་"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+msgid "_Add to status message list"
+msgstr "གནས་ཚད་འཕྲིན་དོན་ཐོ་ཡིག་ལུ་ཁ་སྐོང་རྐྱབས་(_A)"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s འདི་གློག་ལམ་མེད་པར་ཡར་སོང་ནུག"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr "%s འདི་གློག་ལམ་ཐོག་ལུ་འོང་ཡོད་"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr "སྔོན་སྲོལ་"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr "འཇམ་སམ་"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+msgid "Clean"
+msgstr "གཙང་དག་བཟོ་"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr "ཧོནམ་"
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "འགོ་བཙུགས་ལུ་མ་མཐུད་"
+
+#: ../src/empathy-main.c:155
+msgid "- Empathy Instant Messenger"
+msgstr "- ཨིམ་པེ་ཐི་ འཕྲལ་མྱུར་ འཕྲིན་སྐྱེལ་པ་"
+
+#, fuzzy
+#~ msgid "Empathy Instant Messenger"
+#~ msgstr "འཕྲལ་མྱུར་འཕྲིན་བསྐྱེལ་པ་"
+#~ msgid "Instant Messenger"
+#~ msgstr "འཕྲལ་མྱུར་འཕྲིན་བསྐྱེལ་པ་"
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "གོ་སིཔ་འཕྲལ་མྱུར་འཕྲིན་བསྐྱེལ་པ་"
+#~ msgid "Normal"
+#~ msgstr "སྤྱིར་བཏང་"
+#~ msgid "Joining"
+#~ msgstr "མཐུད་དོ་"
+#~ msgid "Active"
+#~ msgstr "ཤུགས་ལྡན་"
+#~ msgid "Inactive"
+#~ msgstr "ཤུགས་མེད་"
+#~ msgid "Unknown"
+#~ msgstr "མ་ཤེསཔ་"
+#~ msgid "Error"
+#~ msgstr "འཛོལ་བ་"
+#~ msgid "Moderator"
+#~ msgid_plural "Moderators"
+#~ msgstr[0] "མཐུན་སྒྲིག་འབད་མི་"
+#~ msgstr[1] "མཐུན་སྒྲིག་འབད་མི་ཚུ་"
+#~ msgid "Participant"
+#~ msgid_plural "Participants"
+#~ msgstr[0] "བཅའ་མར་གཏོགས་མི་"
+#~ msgstr[1] "བཅའ་མར་གཏོགས་མི་ཚུ་"
+#~ msgid "Visitor"
+#~ msgid_plural "Visitors"
+#~ msgstr[0] "ལྟ་སྐོར་པ་"
+#~ msgstr[1] "ལྟ་སྐོར་པ་ཚུ་"
+#~ msgid "No role"
+#~ msgstr "ལས་འགན་མེད་"
+#~ msgid "Owner"
+#~ msgid_plural "Owners"
+#~ msgstr[0] "བདག་པོ་"
+#~ msgstr[1] "བདག་པོ་ཚུ་"
+#~ msgid "Administrator"
+#~ msgid_plural "Administrators"
+#~ msgstr[0] "བདག་སྐྱོང་པ་"
+#~ msgstr[1] "བདག་སྐྱོང་པ་ཚུ་"
+#~ msgid "Member"
+#~ msgid_plural "Members"
+#~ msgstr[0] "འཐུས་མི་"
+#~ msgstr[1] "འཐུས་མི་ཚུ་"
+#~ msgid "Outcast"
+#~ msgid_plural "Outcasts"
+#~ msgstr[0] "ཕྱིར་བཏོན་བཞག་མི་"
+#~ msgstr[1] "ཕྱིར་བཏོན་བཞག་མི་ཚུ་"
+#~ msgid "No affiliation"
+#~ msgstr "འབྲེལ་གཏོགས་མེད་"
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "ཁྱོད་ཀྱིས་གདམ་ཁ་རྐྱབས་མི་ སྐྱོན་མིང་འདི་ཧེ་མ་ལས་རང་ལག་ལེན་འཐབ་སྟེ་ཡོདཔ་ཨིན།"
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr "ཁྱོད་ཀྱིས་མཐུད་ནི་འབད་རྩོལ་བསྐྱེད་མི་ཁ་སླབ་ཁང་མིག་འདི་ལུ་ ཆོག་ཡིག་ཅིག་དགོཔ་ཨིན།"
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr "ཐག་རིང་གི་ཞལ་འཛོམས་སར་བར་འདི་གིས་ དྲན་ཤེས་ལྡན་པའི་དུས་ཚོད་ལུ་ལན་བཀོད་མ་འབད།"
+#~ msgid "The conference server you tried to join could not be found."
+#~ msgstr "ཁྱོད་ཀྱིས་མཐུད་ནི་གི་འབད་རྩོལ་བསྐྱེད་མི་ཞལ་འཛོམས་སར་བར་འདི་ འཚོལ་མ་འཐོབ།"
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "མ་ཤེས་པའི་འཛོལ་བ་ཅིག་འབྱུང་ཡོད་ ཁྱོད་ཀྱི་རྒྱས་བཤད་ཚུ་ངེས་བདེན་ཨིནམ་ཞིབ་དཔྱད་འབད།"
+#~ msgid "Joining the chatroom was canceled."
+#~ msgstr "ཁ་སླབ་ཁང་མིག་མཐུད་ནི་འདི་ཆ་མེད་གཏང་ཡོད།"
+#~ msgid "Unavailable"
+#~ msgstr "འཐོབ་ཚུགསཔ་མེདཔ་"
+#~ msgid "An unknown error occurred."
+#~ msgstr "མ་ཤེས་པའི་འཛོལ་བ་ཅིག་འབྱུང་ཡོདཔ།"
+#~ msgid "Connection refused."
+#~ msgstr "མཐུད་ལམ་ངོས་ལེན་མ་འབད་བས།"
+#~ msgid "Server address could not be resolved."
+#~ msgstr "སར་བར་ཁ་བྱང་འདི་ མོས་མཐུན་འབད་མ་ཚུགས།"
+#~ msgid "Connection timed out."
+#~ msgstr "མཐུད་ལམ་ངལ་མཚམས་ལུས་ཡོདཔ།"
+#~ msgid "Authentication failed."
+#~ msgstr "བདེན་བཤད་འཐུས་ཤོར་འབྱུང་ཡོདཔ།"
+#~ msgid "The username you are trying already exists."
+#~ msgstr "ལག་ལེན་པའི་མིང་ ཁྱོད་ཀྱིས་འབད་རྩོལ་བསྐྱེད་མི་འདི་ ཧེ་མ་ལས་རང་ཡོདཔ་ཨིན།"
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "ལག་ལེན་པའི་མིང་ ཁྱོད་ཀྱིས་འབད་རྩོལ་བསྐྱེད་མི་འདི་ ནུས་ལྡན་མེན།"
+#~ msgid "This feature is unavailable."
+#~ msgstr "ཁྱད་རྣམ་འདི་འཐོབ་མི་ཚུགས།"
+#~ msgid "This feature is unauthorized."
+#~ msgstr "ཁྱད་རྣམ་འདི་དབང་སྤྲོད་མ་འབད་བས།"
+#~ msgid "A specific protocol error occurred that was unexpected."
+#~ msgstr "རེ་བ་མ་བསྐྱེད་པའི་ དམིགས་བསལ་གྱི་གནད་སྤེལ་ལམ་ལུགས་འཛོལ་བ་ཅིག་འབྱུང་ཡོད།"
+#~ msgid "new account"
+#~ msgstr "རྩིས་ཐོ་གསརཔ་"
+#~ msgid "Home"
+#~ msgstr "ཁྱིམ་"
+#~ msgid "Couldn't send message!"
+#~ msgstr "འཕྲིན་དོན་གཏང་མ་ཚུགས་!"
+#~ msgid "Connection could not be opened"
+#~ msgstr "མཐུད་ལམ་འདི་ཁ་ཕྱེ་མ་ཚུགས་"
+#~ msgid "Service has gone and is no longer available"
+#~ msgstr "ཞབས་ཏོག་འདི་ཡར་སོངམ་དང་ད་ཐོབ་མ་ཚུགསཔ་མེདཔ།"
+#~ msgid "Bad or malformed request to this service"
+#~ msgstr "ཞབས་ཏོག་འདི་ལུ་བྱང་ཉེས་ཡང་ན་བཟོ་ཉེས་གྱུར་བའི་ཞུ་བ།"
+#~ msgid "Unauthorized request to this service"
+#~ msgstr "ཞབས་ཏོག་འདི་ལུ་བདེན་དབང་མེད་པའི་ཞུ་བ།"
+#~ msgid "Payment is required for this service"
+#~ msgstr "ཞབས་ཏོག་གི་དོན་ལུ་གླ་དངུལ་འདི་དགོས་མཁོ་ཡོདཔ།"
+#~ msgid "This service is forbidden"
+#~ msgstr "ཞབས་ཏོག་འདི་མ་ཆོགཔ་ཨིན།"
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "ཞབས་ཏོག་འདི་ཐོབ་མ་ཚུགསཔ་ཡང་ན་ཐོབ་མ་ཚུགསཔ།"
+#~ msgid "Unacceptable request sent to this services"
+#~ msgstr "ཞབས་ཏོག་དེ་ཚུ་ལུ་དང་ལེན་འབད་མ་བཏུབ་པའི་ཞུ་བ་བཏང་ཡོདཔ།"
+#~ msgid "Registration is required"
+#~ msgstr "ཐོ་འགོད་འབད་ནི་འདི་དགོས་མཁོ་ཡོདཔ།"
+#~ msgid "There was a conflict of interest trying to use this service"
+#~ msgstr "ཐབས་འཕྲུལ་འདི་ལག་ལེན་འཐབ་ནི་ལུ་སྤྲོད་འབད་རྩོལ་བསྐྱེད་ནི་གི་མི་མཐུན་པ་ཅིག་ཡོདཔ།"
+#~ msgid "There was an internal service error"
+#~ msgstr "ནང་འཁོད་ཞབས་ཏོག་འཛོལ་བ་ཅིག་ཡོདཔ།"
+#~ msgid "This feature is not implemented"
+#~ msgstr "ཁྱད་རྣམ་འདི་བསྟར་སྤྱོད་འབད་མེདཔ།"
+#~ msgid "The remote service timed out"
+#~ msgstr "ཐག་རིང་གི་ཞབས་ཏོག་འདི་ངལ་མཚམས་ཨིནམ།"
+#~ msgid "Using the %s backend"
+#~ msgstr "རྒྱབ་མཐའ་འདི་ %s ལག་ལེན་འཐབ་དེ།"
+#~ msgid "Stop"
+#~ msgstr "བཀག"
+#~ msgid "Disconnect"
+#~ msgstr "མཐུད་ལམ་བཏོག་"
+#~ msgid "Connect"
+#~ msgstr "མཐུད་"
+#~ msgid "Bye bye"
+#~ msgstr "བཱའི་བཱའི།"
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "ཁྱོད་ཀྱི་རྩིས་ཐོའི་སྒྲིག་སྟངས་ མཐར་འཁྱོལ་སྦེ་ཐོ་བཀོད་འབད་ཡོད།"
+#~ msgid "You should now be able to connect to your new account."
+#~ msgstr "ཁྱོད་ད་ ཁྱོད་རའི་རྩིས་ཐོ་གསརཔ་མཐུད་ཚུགས་དགོ"
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "ཁྱོད་ཀྱི་རྩིས་ཐོ་གསརཔ་གི་སྒྲིག་སྟངས་ཚུ་ཐོ་བཀོད་འབད་ནི་འཐུས་ཤོར་འབྱུང་ཡོད།"
+#~ msgid "Successfully changed your account password."
+#~ msgstr "ཁྱོད་ཀྱི་རྩིས་ཐོའི་ཆོག་ཡིག་བསྒྱུར་བཅོས་འབད་ནི་མཐར་འཁྱོལ་ཡོདཔ།"
+#~ msgid "You should now be able to connect with your new password."
+#~ msgstr "ཁྱོད་ད་ ཁྱོད་རའི་ཆོག་ཡིག་གསརཔ་དང་གཅིག་ཁར་མཐུད་ཚུགསཔ་དགོཔ།"
+#~ msgid "Failed to change your account password."
+#~ msgstr "ཁྱོད་ཀྱི་རྩིས་ཐོའི་ཆོག་ཡིག་བསྒྱུར་བཅོས་འབད་ནི་འཐུས་ཤོར་འབྱུང་ཡོདཔ།"
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "རྩིས་ཐོ་འདིའི་དོན་ལུ་ཆོག་ཡིག་གསརཔ་ཅིག་བཙུགས་གནང་།\n"
+#~ "%s"
+#~ msgid "No information is available for this contact."
+#~ msgstr "འ་ནི་འབྲེལ་སའི་དོན་ལུ་ བརྡ་དོན་འཐོབ་ཚུགསཔ་མེད།"
+#~ msgid "Information requested, please wait..."
+#~ msgstr "བརྡ་དོན་དགོས་མཁོ་ཡོདཔ་ཨིན་ བསྒུག་གནང་"
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "ང་གིས་ཁྱོད་ ངེས་ཀྱི་འབྲེལ་སའི་ཐོ་ཡིག་ནང་ལུ་ཁ་སྐོང་རྐྱབས་ནི་ཨིན།"
+#~ msgid "To summarize:"
+#~ msgstr "བཅུད་བསྡུ་ནིའི་དོན་ལས་:"
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "%d འཕྲིན་དོན་གསརཔ་ཚུ་"
+#~ msgstr[1] "%d འཕྲིན་དོན་གསརཔ་"
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "%d མཁོ་མངགས་ཞུ་བ་"
+#~ msgstr[1] "%d མཁོ་མངགས་ཞུ་བ་ཚུ་"
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "%d ཡིག་སྣོད་གནས་སོར་ཞུ་བ་"
+#~ msgstr[1] "%d ཡིག་སྣོད་གནས་སོར་ཞུ་བ་ཚུ་"
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "%d སར་བར་འཕྲིན་དོན་"
+#~ msgstr[1] "%d སར་བར་འཕྲིན་དོན་ཚུ་"
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "%d འཛོལ་བ་"
+#~ msgstr[1] "%d འཛོལ་བ་ཚུ་"
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "ཁྱོད་ཀྱིས་སྤང་པ་ཅིན་ མ་ལྷག་པའི་བརྡ་དོན་ཚུ་ཆ་མཉམ་བརླག་སྟོར་ཞུགས་འོང་།"
+#~ msgid "Gossip is still running, it is just hidden."
+#~ msgstr "གོ་སིཔ་འདི་ད་ལྟོ་ཡང་གཡོག་བཀོལ་དེས་ འདི་སྦ་བཞག་ནུག"
+#~ msgid "Click on the notification area icon to show Gossip."
+#~ msgstr "གོ་སིཔ་སྟོན་ནིའི་དོན་ལས་ བརྡ་བསྐུལ་མངའ་ཁོངས་ངོས་དཔར་འདི་གུ་ཨེབ་གཏང་འབད།"
+#~ msgid "You were about to quit!"
+#~ msgstr "ཁྱོད་སྤང་ནི་འབད་དེས་!"
+#~ msgid ""
+#~ "Since no system or notification tray has been found, this action would "
+#~ "normally quit Gossip.\n"
+#~ "\n"
+#~ "This is just a reminder, from now on, Gossip will quit when performing "
+#~ "this action unless you uncheck the option below."
+#~ msgstr ""
+#~ "རིམ་ལུགས་དང་བརྡ་བསྐུལ་ཤོག་སྣོད་མ་འཐོབ་ལས་རྟེན་ འ་ནི་བྱ་བ་འདི་གིས་ སྤྱིར་བཏང་ལུ་ གོ་སིཔ་སྤང་འོང་"
+#~ "།\n"
+#~ "\n"
+#~ "འ་ནི་འདི་དྲན་བསྐུལ་ཙམ་ཅིག་ཨིན་ ད་ལས་ཕར་ གོ་སིཔ་གིས་ ཁྱོད་ཀྱིས་འོག་གི་གདམ་ཁ་འདི་ཞིབ་དཔྱད་མ་"
+#~ "འབད་ཚུན་ འ་ནི་བྱ་བ་འདི་ལཱ་འགན་གྲུབ་པའི་སྐབས་ སྤང་འོང་།"
+#~ msgid "Edit Account _Details"
+#~ msgstr "རྩིས་ཐོའི་རྒྱས་བཤད་ཚུ་ཞུན་དག་འབད་(_D)"
+#~ msgid "Click to enlarge"
+#~ msgstr "ཆེར་བསྐྱེད་འབད་ནིའི་དོན་ལས་ཨེབ་གཏང་འབད་"
+#~ msgid "Word"
+#~ msgstr "མིང་ཚིག་"
+#~ msgid "Select who would you like to invite to room:"
+#~ msgstr "ཁྱོད་ཀྱིས་ཁང་མིག་ནང་ག་མགྲོན་བརྡ་འབད་ནི་ཨིན་ན་ སེལ་འཐུ་འབད་:"
+#~ msgid "Select which room you would like to invite:"
+#~ msgstr "ཁྱོད་ཀྱིས་ཁང་མིག་ག་འདི་མགྲོན་བརྡ་འབད་ནི་ཨིན་ན་ སེལའ་ཐུ་འབད་:"
+#~ msgid "New message from %s"
+#~ msgstr "%s ལས་འཕྲིན་དོན་གསརཔ་"
+#~ msgid "Your invitation has been declined"
+#~ msgstr "ཁྱོད་ཀྱི་མགྲོན་བརྡ་འདི་ཉམས་ཡོདཔ་"
+#~ msgid "Accept"
+#~ msgstr "དང་ལེན་"
+#~ msgid "Decline"
+#~ msgstr "ཁ་མི་བཟད་ནི་"
+#~ msgid "Name"
+#~ msgstr "མིང་"
+#~ msgid "Room"
+#~ msgstr "ཁང་མིག་"
+#~ msgid "Auto Connect"
+#~ msgstr "རང་བཞིན་མཐུད་ནི་"
+#~ msgid "Information requested..."
+#~ msgstr "བརྡ་དོན་ཞུ་བ་འབད་ཡོད་"
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr "ཁྱོད་ཀྱིས་འ་ནི་འབྲེལ་ས་འདི་ཁྱོད་རའི་ལས་རིམ་རེའུ་མིག་ལས་ རྩ་བསྐྲད་གཏང་ནི་ཨིན་ན?"
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "སྡེ་ཚན་འདི་གི་དོན་ལུ་ མིང་གསརཔ་ཅིག་ཐོ་བཀོད་འབད་གནང་:\n"
+#~ "%s"
+#~ msgid "Select"
+#~ msgstr "སེལ་འཐུ་འབད་"
+#~ msgid "Unsorted"
+#~ msgstr "དབྱེ་སེལ་མ་འབདཝ་"
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server."
+#~ msgstr ""
+#~ "དོན་ལུ་ ཁྱོད་ཀྱིས་ལག་ལེན་འཐབ་ནི་ཨིན་མི་ མིང་གཞན་འདི་བལྟ་:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "ཁྱོད་ཀྱིས་འབྲེལ་སའི་བརྡ་དོན་འདི་ སར་བར་ལས་སླར་འདྲེན་འབད་ཚུགས།"
+#~ msgid "New file transfer request from %s"
+#~ msgstr "%s ལས་ ཡིག་སྣོད་གསརཔ་གནས་སོར་ཞུ་བ་"
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "ཡིག་སྣོད་གནས་སོར་འདི་ སྡེ་ཚོགས་གཉིས་ཆ་རང་གིས་རྒྱབ་སྐྱོར་མ་འབད་བས།"
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "ཁྱོད་ཀྱི་ཡིག་སྣོད་གནས་སོར་བྱིན་མི་འདི་ཉམས་ཡོདཔ་"
+#~ msgid "The other user decided not to continue."
+#~ msgstr "གཞན་མི་ལག་ལེན་པ་འདི་གིས་ འཕྲོ་མི་མཐུད་ནིའི་གྲོས་ཐག་བཅད་ནུག"
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "ཡིག་སྣོད་གནས་སོར་སྐབས་ མ་ཤེས་པའི་འཛོལ་བ་ཅིག་འབྱུང་ཡོད།"
+#~ msgid "%s would like to send you a file."
+#~ msgstr "%s གིས་ཁྱོད་ལུ་ཡིག་སྣོད་ཅིག་གཏང་ནི་ཨིན་པས།"
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "མི་ཅིག་གིས་ཁྱོད་ལུ་ཡིག་སྣོད་ཅིག་ཏང་ནི་ཨིན་པས།"
+#~ msgid "Select a file"
+#~ msgstr "ཡིག་སྣོད་ཅིག་སེལ་འཐུ་འབད་"
+#~ msgid "Connecting..."
+#~ msgstr "མཐུད་དོ་"
+#~ msgid "Retry connection"
+#~ msgstr "མཐུད་ལམ་སླར་འབད་རྩོལ་བསྐྱེད་"
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "%s འདི་ འ་ནི་ཁ་སླབ་ཞལ་འཛོམས་གི་གྲངས་སུ་འཛུལ་ནིའི་དོན་ལས་ མགྲོན་བརྡ་འབད་ཡོདཔ།"
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "%s གིས་ གནད་དོན་གཞི་སྒྲིག་འབད་ཡོད་%s"
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr ""
+#~ "འ་ནི་ཁང་མིག་འདི་གི་དོན་ལུ་ ཁྱོད་ཀྱིས་གཞི་སྒྲིག་འབད་དགོ་མནོ་མི་གནད་དོན་གསརཔ་འདི་ཐོ་བཀོད་འབད་:"
+#~ msgid "%s has joined the room"
+#~ msgstr "%s གིས་ ཁང་མིག་ནང་འཛུལ་ཡོདཔ་"
+#~ msgid "%s has left the room"
+#~ msgstr "%s གིས་ཁང་མིག་བཞག་ཡོདཔ་"
+#~ msgid "Topic: %s"
+#~ msgstr "གནད་དོན། %s"
+#~ msgid "Account"
+#~ msgstr "རྩིས་ཐོ་"
+#~ msgid "Conversation With"
+#~ msgstr "དང་གཅིག་ཁར་གྲོས་གླེང་"
+#~ msgid "Date"
+#~ msgstr "ཚེས་གྲངས་"
+#~ msgid "Allow multiple instances of the application to run at the same time"
+#~ msgstr "གློག་རིམ་འདི་གི་སྣ་མང་འཕྲལ་མྱུར་འདི་ དུས་ཚོད་གཅིག་པ་ལུ་གཡོག་བཀོལ་བཅུག"
+#~ msgid "List the available accounts"
+#~ msgstr "འཐོབ་ཚུགས་པའི་རྩིས་ཐོའི་ཐོ་ཡིག་"
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "འགོ་བཙུགས་ལུ་ རྩིས་ཐོ་ག་འདི་མཐུད་ནི་ཨིན་ན་"
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "རྩིས་ཐོ་-མིང་"
+#~ msgid "You can not use --no-connect together with --account"
+#~ msgstr "ཁྱོད་ཀྱིས་ --རྩིས་ཐོ་དང་གཅིག་ཁར་ --མཐུད་ལམ་མེད་ ལག་ལེན་འཐབ་མི་བཏུབ་"
+#~ msgid "No accounts available."
+#~ msgstr "རྩིས་ཐོ་གཅིག་ཡང་འཐོབ་ཚུགསཔ་མེད།"
+#~ msgid "Available accounts:"
+#~ msgstr "འཐོབ་ཚུགས་པའི་རྩིས་ཐོ་:"
+#~ msgid "[default]"
+#~ msgstr "[སྔོན་སྒྲིག་]"
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "མིང་ '%s' འབད་མི་རྩིས་ཐོ་གཅིག་ཡང་མིན་འདུག"
+#~ msgid "Join"
+#~ msgstr "མཐུད་"
+#~ msgid "Create"
+#~ msgstr "གསར་བསྐྲུན་འབད་"
+#~ msgid "Chat Rooms"
+#~ msgstr "ཁ་སླབ་ཁང་མིག་"
+#~ msgid "Found %d conference rooms"
+#~ msgstr "%d ཞལ་འཛོམས་ཁང་མིག་འཐོབ་ཡོད་"
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "ཞལ་འཛོམས་ཁང་མིག་ཚུ་གི་དོན་ལུ་བརྡ་འཚོལ་འབད་དོ་ བསྒུག་གནང་"
+#~ msgid "Browsing cancelled!"
+#~ msgstr "བརྡ་འཚོལ་འབད་ནི་ཆ་མེད་གཏང་ཡོདཔ་!"
+#~ msgid "Default"
+#~ msgstr "སྔོན་སྒྲིག་"
+#~ msgid "Chat!"
+#~ msgstr "ཁ་སླབ་!"
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s འདི་ ཁྱོད་ཀྱི་འབྲེལ་སའི་ཐོ་ཡིག་ལུ་ཁ་སྐོང་རྐྱབས་དགོ་ནི་ཨིན་པས།"
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "མི་ཅིག་ ཁྱོད་ཀྱི་འབྲེལ་སའི་ཐོ་ཡིག་ལུ་ཁ་སྐོང་རྐྱབས་དགོ་ནི་ཨིན་པས།"
+#~ msgid "Subscription request"
+#~ msgstr "མཁོ་མངགས་ཞུ་བ་"
+#~ msgid "Show"
+#~ msgstr "སྟོན་"
+#~ msgid "Contact Information"
+#~ msgstr "འབྲེལ་སའི་བརྡ་དོན་"
+#~ msgid "Subject: %s"
+#~ msgstr "དོན་ཚན་: %s"
+#~ msgid "Suggestions for the word"
+#~ msgstr "མིང་ཚིག་འདི་གི་དོན་ལུ་བསམ་འཆར་"
+#~ msgid "New subscription request from %s"
+#~ msgstr "%s ལས་མཁོ་མངགས་ཞུ་བ་གསརཔ་"
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "ཁྱོད་ཀྱིས་འ་ནི་གང་ཟག་འདི་ ཁྱོད་རའི་འབྲེལ་སའི་ཐོ་ཡིག་ལུ་ཁ་སྐོང་རྐྱབས་ནི་ཨིན་ན?"
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "ཁྱོད་ཀྱིས་ %s འདི་ ཁྱོད་རའི་འབྲེལ་སའི་ཐོ་ཡིག་ལུ་ཁ་སྐོང་རྐྱབས་ནི་ཨིན་ན?"
+#~ msgid "Please enter your %s account password"
+#~ msgstr "ཁྱོད་རའི་ %s རྩིས་ཐོ་ཆོག་ཡིག་ཐོ་བཀོད་འབད་གནང་"
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "རྩིས་ཐོ་ལུ་ནང་ན་ལུ་བསྐྱོད་འབད་དོ། %s "
+#~ msgid "Remember Password?"
+#~ msgstr "ཆོག་ཡིག་སེམས་ཁར་བཞག?"
+#~ msgid "Do not show this again"
+#~ msgstr "འ་ནི་ལོག་མ་སྟོན་"
+#~ msgid "Could not display the help contents."
+#~ msgstr "གྲོགས་རམ་ནང་དོན་འདི་བཀྲམ་སྟོན་འབད་མི་ཚུགས།"
+#~ msgid "Select Your Avatar Image"
+#~ msgstr "ཁྱོད་རའི་ཨེ་ཝ་ཊར་གཟུགས་བརྙན་སེལ་འཐུ་འབད་"
+#~ msgid "No Image"
+#~ msgstr "གཟུག་བརྙན་མེད་"
+#~ msgid "Cancel"
+#~ msgstr "ཆ་མེད་གཏང་ནི།"
+#~ msgid "OK"
+#~ msgstr "བཏུབ།"
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "སར་བར་འདི་ལན་བཀོད་མི་འབད་དོ་བཟུམ་སྦེ་མཐོངམ་མས།"
+#~ msgid "Try again later."
+#~ msgstr "ལོག་ཤུལ་ལས་འབད་རྩོལ་བསྐྱེད།"
+#~ msgid "Change"
+#~ msgstr "བསྒྱུར་བཅོས།"
+#~ msgid "Contact goes offline"
+#~ msgstr "འབྲེལ་ས་འདི་གློག་ལམ་མེདཔ་འགྱོཝ་ཨིན་"
+#~ msgid "Contact goes online"
+#~ msgstr "འབྲེལ་ས་འདི་གློག་ལམ་ཐོག་འགྱོཝ་ཨིན་"
+#~ msgid "Contact ID:"
+#~ msgstr "འབྲེལ་སའི་ཨའི་ཌི་:"
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "ཁྱོད་ཀྱིས་འ་ནི་ཡིག་སྣོད་འདི་དང་ལེན་འབད་ནི་ཨིན་ན?"
+#~ msgid "File Transfer Request"
+#~ msgstr "ཡིག་སྣོད་གནས་སོར་ཞུ་བ་"
+#~ msgid "File name:"
+#~ msgstr "ཡིག་སྣོད་མིང་:"
+#~ msgid "File size:"
+#~ msgstr "ཡིག་སྣོད་ཚད་:"
+#~ msgid "Not supported yet"
+#~ msgstr "ད་ཚུན་རྒྱབ་སྐྱོར་མ་འབད་བས་"
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "འ་ནི་གང་ཟག་གིས་ ཁྱོད་ལུ་ འ་ནི་ཡིག་སྣོན་གཏང་ནི་གི་རེ་སྨོན་བསྐྱེདཔ་ཨིན་པས་:"
+#~ msgid "Web site:"
+#~ msgstr "ཝེབ་ས་ཁོངས་:"
+#~ msgid "_Accept"
+#~ msgstr "དང་ལེན་(_A)"
+#~ msgid "_Deny"
+#~ msgstr "ཉན་མི་བཏུབ་པས་(_D)"
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>གནད་དོན་:</b>"
+#~ msgid "Account:"
+#~ msgstr "རྩིས་ཐོ་:"
+#~ msgid "Browse:"
+#~ msgstr "བརྡོ་འཚོལ་:"
+#~ msgid "Edit Favorite Room"
+#~ msgstr "དགའ་མི་ཁང་མིག་ཞུན་དག་འབད་"
+#~ msgid ""
+#~ "Enter the room name to join here or click on one or more rooms in the "
+#~ "list."
+#~ msgstr ""
+#~ "ན་ལུ་འཛུལ་ནིའི་དོན་ལས་ ཁང་མིག་མིང་འདི་ཐོ་བཀོད་འབད་ ཡང་ན་ ཐོ་ཡིག་ནང་གི་ཁང་མིག་གཅིག་ཡང་ན་དེ་"
+#~ "ལས་ལྷག་སྟེ་ཨེབ་གཏང་འབད།"
+#~ msgid "Group Chat"
+#~ msgstr "སྡེ་ཚན་ཁ་སླབ་"
+#~ msgid "Join New"
+#~ msgstr "གསརཔ་མཐུད་"
+#~ msgid "Join room on start_up"
+#~ msgstr "འགོ་བཙུགས་ལུ་ཁང་མིག་མཐུད་(_u)"
+#~ msgid "Join this chat room when Gossip starts and you are connected"
+#~ msgstr ""
+#~ "གོ་སིཔ་འདི་འགོ་བཙུགས་ནི་དང་ ཁྱོད་མཐུད་ཡོད་པའི་སྐབས་ འ་ནི་ཁ་སླབ་ཁང་མིག་འདི་གི་གྲངས་སུ་འཛུལ་"
+#~ msgid "Manage Favorite Rooms"
+#~ msgstr "དགའ་མི་ཁང་མིག་ཚུ་འཛིན་སྐྱོང་འཐབ་"
+#~ msgid "N_ame:"
+#~ msgstr "མིང་:(_a)"
+#~ msgid "Re_fresh"
+#~ msgstr "ཡང་སེལ་འབད་(_f)"
+#~ msgid "S_erver:"
+#~ msgstr "སར་བར་:(_e)"
+#~ msgid ""
+#~ "This list represents all chat rooms hosted on the server you have entered."
+#~ msgstr ""
+#~ "འ་ནི་ཐོ་ཡིག་འདི་གིས་ ཁྱོད་ཀྱིས་ཐོ་བཀོད་ཐོ་བཀོད་འབད་ཡོད་མི་ སར་བར་འདི་གུ་ ཧོསིཊི་འབད་ཡོད་མི་ ཁ་"
+#~ "སླབ་ཁང་མིག་ཆ་མཉམ་ ཁྱད་ཚབ་འབདཝ་ཨིན།"
+#~ msgid "_Nickname:"
+#~ msgstr "སྐྱོན་མིང་:(_N)"
+#~ msgid "_Room:"
+#~ msgstr "ཁང་མིག་:(_R)"
+#~ msgid "-"
+#~ msgstr "-"
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>སྐོར་ལས་</b>"
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "<b>ཞབས་ཐོག་སྤྱོད་མིའི་བརྡ་དོན་</b>"
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>སྡེ་ཚན་ཚུ་</b>"
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>མིང་</b>"
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>རང་དོན་རྒྱས་བཤད་ཚུ་</b>"
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>མཁོ་མངགས་</b>"
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr ""
+#~ "<འཕར་ཚད་ལྗིད་ཚད་=\"smaller\">དཔེར་བརྗོད་: མའི་ཀེལ་ ཡང་ན་ user@server.org</span>"
+#~ msgid "Accou_nt:"
+#~ msgstr "རྩིས་ཐོ་:(_n)"
+#~ msgid "Add Contact"
+#~ msgstr "འབྲེལ་ས་ཁ་སྐོང་རྐྱབས།"
+#~ msgid "Alia_s:"
+#~ msgstr "མིང་གཞན་:(_s)"
+#~ msgid "Avatar:"
+#~ msgstr "ཨེ་ཝ་ཏར་:"
+#~ msgid "Birthday:"
+#~ msgstr "སྐྱེ་བའི་ཞིནམ་:"
+#~ msgid "C_hange"
+#~ msgstr "བསྒྱུར་བཅོས།(_h)"
+#~ msgid "Ch_at"
+#~ msgstr "ཁ་སླབ་(_a)"
+#~ msgid "Client:"
+#~ msgstr "ཞབས་ཏོག་སྤྱོད་མི་:"
+#~ msgid "Con_tact:"
+#~ msgstr "འབྲེལ་ས་:(_t)"
+#~ msgid "Connect on S_tartup"
+#~ msgstr "འགོ་བཙུགས་ལུ་མཐུད་(_t)"
+#~ msgid "Contacts"
+#~ msgstr "འབྲེལ་ས་ཚུ་"
+#~ msgid "Country:"
+#~ msgstr "རྒྱལ་ཁབ་:"
+#~ msgid "Decide _Later"
+#~ msgstr "ཤུལ་ལས་གྲོས་ཐག་བཅད་(_L)"
+#~ msgid "Edit Contact"
+#~ msgstr "འབྲེལ་ས་ཞུན་དག་འབད་"
+#~ msgid "Edit Groups"
+#~ msgstr "སྡེ་ཚན་ཚུ་ཞུན་དག་འབད་"
+#~ msgid "Email:"
+#~ msgstr "གློག་འཕྲིན་:"
+#~ msgid "ID:"
+#~ msgstr "ཨའི་ཌི་:"
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr ""
+#~ "ཁྱོད་ཀྱིས་ཤུལ་ལས་གྲོས་ཐག་བཅད་ནི་གདམ་ཁ་རྐྱབསཔ་ཅིན་ ཁྱོད་ཤུལ་མ་ནང་བསྐྱོད་འབདཝ་ད་འདྲི་འོང་།"
+#~ msgid "Name:"
+#~ msgstr "མིང་:"
+#~ msgid "OS:"
+#~ msgstr "ཨོ་ཨེསི་:"
+#~ msgid "Personal Details"
+#~ msgstr "རང་དོན་རྒྱས་བཤད་ཚུ་"
+#~ msgid "R_egister"
+#~ msgstr "ཐོ་འགོད་(_e)"
+#~ msgid "Search"
+#~ msgstr "འཚོལ་ཞིབ་"
+#~ msgid ""
+#~ "Select the groups you want this contact to appear in, you can select more "
+#~ "than one group or no groups."
+#~ msgstr ""
+#~ "ཁྱོད་ཀྱིས་འ་ནི་འབྲེལ་ས་ཚུ་འབྱུང་དགོ་མནོ་མི་ སྡེ་ཚན་འདི་ཚུ་སེལ་འཐུ་འབད་ ཁྱོད་ཀྱིས་ སྡེ་ཚན་གཅིག་ལས་"
+#~ "ལྷག་སྟེ་ཡང་ན་ སྡེ་ཚན་མེད་མི་སེལ་འཐུ་འབད་བཏུབ།"
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "དོན་ལུ་ ཁྱོད་ཀྱིས་ལག་ལེན་འཐབ་ནི་ཨིན་མི་ མིང་གཞན་འདིགཞི་སྒྲིག་འབད།\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "ཁྱོད་ཀྱིས་འབྲེལ་སའི་བརྡ་དོན་འདི་ སར་བར་ལས་སླར་འདྲེན་འབད་ཚུགས།"
+#~ msgid "Spell Checker"
+#~ msgstr "སྡེབ་དཔྱོདཔ་"
+#~ msgid "Subscription Request"
+#~ msgstr "མཁོ་མངགས་ཞུ་བ་"
+#~ msgid "Suggestions for the word:"
+#~ msgstr "མིང་ཚིག་འདི་གི་དོན་ལུ་བསམ་འཆར་:"
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "འ་ནི་འདི་གིས་ འོག་གི་འབྲེལ་སའི་ཐོ་ཡིག་འདི་གི་དོན་ལུ་ ཚགས་མ་སྦེ་འབདཝ་ཨིན། ཁྱོད་ཀྱྀས་ འབྲེལ་སའི་མིང་"
+#~ "ཡང་ན་ ཨའི་ཌི་གི་ཆ་བགོས་ཚུ་ལག་ལེན་འཐབ་ དཔེར་ན་ \"jabber.org\" གིས་ འ་ནི་སར་བར་ལག་"
+#~ "ལེན་འཐབ་མི་ག་ར་ཐོ་བཀོད་འབད་འོང་"
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr ""
+#~ "འ་ནི་འདི་ འབྲེལ་ས་འདི་གི་དོན་ལུ་ ཁྱོད་རའི་ལས་རིམ་རེའུ་མིག་གུ་ ལག་ལེན་འཐབ་ནི་ཨིན་མི་ མིང་འདི་ཨིན་"
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "འ་ནི་མིང་འདི་ ཁ་སླབ་སྒོ་སྒྲིག་ནང་ལུ་ཁྱོད་ངོས་འཛིན་འབད་ནིའི་དོན་ལས་ ལག་ལེན་འཐབ་འོང་"
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr ""
+#~ "འ་ནི་མིང་འདི་ འབྲེལ་ས་གསརཔ་ཚུ་གིས་ ཁྱོད་ཀྱི་རྒྱས་བཤད་བལྟ་བའི་སྐབས་ ཁྱོད་ངོས་འཛིན་འབད་ནིའི་དོན་"
+#~ "ལས་ ལག་ལེན་འཐབ་འོང་"
+#~ msgid "Use default name here from the contact's VCard."
+#~ msgstr "འབྲེལ་སའི་ཝི་ཤོག་བྱང་འདི་ལས་ ནཱ་ལུ་སྔོན་སྒྲིག་མིང་ལག་ལེན་འཐབ།"
+#~ msgid "Use system pro_xy"
+#~ msgstr "རིམ་ལུགས་པོརོ་སི་ལག་ལེན་འཐབ་(_x)"
+#~ msgid "Version:"
+#~ msgstr "ཐོན་རིམ་:"
+#~ msgid "View Previous Conversations"
+#~ msgstr "ཧེ་མའི་གྲོས་གླེང་སྟོན་"
+#~ msgid "Which account do you want to use?"
+#~ msgstr "ཁྱོད་ཀྱིས་རྩིས་ཐོ་ག་འདི་ལག་ལེན་འཐབ་ནི་ཨིན་སྨོ?"
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "ཁྱོད་འ་ནི་འབྲེལ་ས་ལུ་མཁོ་མངགས་མ་འབད་བས།"
+#~ msgid "_Birthday:"
+#~ msgstr "སྐྱེ་བའི་ཉིནམ་:(_B)"
+#~ msgid "_Connect"
+#~ msgstr "མཐུད་(_C)"
+#~ msgid "_Description:"
+#~ msgstr "འགྲེལ་བཤད་:(_D)"
+#~ msgid "_Disconnect"
+#~ msgstr "མཐུད་ལམ་བཏོག་(_D)"
+#~ msgid "_Email:"
+#~ msgstr "གློག་འཕྲིན་:(_E)"
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "ཁྱོད་ཀྱིས་འོག་ལུ་ ཁ་སླབ་ནི་ཨིན་མི་གང་ཟག་འདི་གི་ མིང་ཡང་ན་འབྲེལ་སའི་ཨའི་ཌི་འདི་ཐོ་བཀོད་འབད་:(_E)"
+#~ msgid "_For:"
+#~ msgstr "དོན་ལུ་:(_F)"
+#~ msgid "_Full Name:"
+#~ msgstr "མིང་གངམ་(_F)"
+#~ msgid "_Group:"
+#~ msgstr "སྡེ་ཚན་:(_G)"
+#~ msgid "_Nick Name:"
+#~ msgstr "སྐྱོན་མིང་(_N)"
+#~ msgid "_Password:"
+#~ msgstr "ཆོག་ཡིག་:(_P)"
+#~ msgid "_Quit Message:"
+#~ msgstr "འཕྲིན་དོན་སྤང།(_Q)"
+#~ msgid "_Retrieve"
+#~ msgstr "སླར་འདྲེན་(_R)"
+#~ msgid "_Subscribe"
+#~ msgstr "མཁོ་མངགས་འབད་ནི་(_S)"
+#~ msgid "_Web site:"
+#~ msgstr "ཝེབ་ས་ཁོངས་:(_W)"
+#~ msgid "irc account settings"
+#~ msgstr "ཨའི་ཨར་སི་་རྩིས་ཐོ་སྒྲིག་སྟངས་ཚུ།"
+#~ msgid "msn account settings"
+#~ msgstr "ཨེམ་ཨེསི་ཨེན་རྩིས་ཐོ་སྒྲིག་སྟངས་ཚུ།"
+#~ msgid "Gossip"
+#~ msgstr "གོ་སིཔ་"
+#~ msgid "Martyn Russell"
+#~ msgstr "མར་ཊིན་ རཱས་སེལ་"
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>martyn@imendio.com</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "དོན་ལུ་ཁྱོད་ཀྱིས་ལག་ལེན་འཐབ་ནི་ཨིན་མི་ མིང་གཞན་འདི་གཞི་སྒྲིག་འབད་:\n"
+#~ "<b>martyn@imendio.com</b>\n"
+#~ "\n"
+#~ "ཁྱོད་ཀྱིས་ འབྲེལ་སའི་བརྡ་དོན་འདི་ སར་བར་ལས་སླར་འདྲེན་འབད་ཚུགས།"
+#~ msgid "_Forget"
+#~ msgstr "བརྗེད་ནི་(_F)"
+
diff --git a/trunk/po/el.po b/trunk/po/el.po
new file mode 100644
index 000000000..2686490b8
--- /dev/null
+++ b/trunk/po/el.po
@@ -0,0 +1,2225 @@
+# translation of el.po to Greek
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Dimitris Glezos <dimitris@glezos.com>, 2006.
+# Christos Trochalakis <yatiohi@ideopolis.gr>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: el\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-03-17 10:23+0000\n"
+"PO-Revision-Date: 2008-03-31 01:32+0200\n"
+"Last-Translator: nikosCharonitakis <nikosx@gmail.com>\n"
+"Language-Team: Greek <team@gnome.gr>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+"X-Poedit-Language: Greek\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Αποστολέας άμεσων μηνυμάτων empathy"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Αποστολή και λήψη άμεσων μηνυμάτων"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Να γίνεται πάντα άνοιγμα νέων συζητήσεων σε ξεχωριστό παράθυρο."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Character to add after nickname when using nick completion (tab) in group chat."
+msgstr "Ο χαρακτήρας που θα προστίθεται ύστερα από το ψευδώνυμο κατά τη χρήση (ετικέτας) συμπλήρωσης ψευδώνυμου στη συνομιλία ομάδων."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Θέμα εμφάνισης παραθύρου συζήτησης"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr "Ελέγχει αν το Empathy θα εκκινείται αυτόματα κατά την εκκίνηση"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Ελέγχει αν η διαχείριση σύνδεσης δικτύου θα χρησιμοποιείται"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Ελέγχει αν δημιουργήθηκε ο λογαριασμός χαιρετισμού"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr "Λίστα γλωσσών για ορθογραφικό έλεγχο χωρισμένες με κόμματα (πχ. en, el, fr). "
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Συμπυκνωμένη λίστα επαφών"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Κριτήριο ταξινόμησης επαφών της λίστας"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Προεπιλεγμένος κατάλογος για επιλογή προσωπικής εικόνας"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Ενεργοποίηση αναδυόμενου παραθύρου όταν η επαφή είναι διαθέσιμη"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Ενεργοποίηση ήχων όταν απουσιάζετε"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Ενεργοποίηση ήχων όταν είστε απασχολημένος"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Ενεργοποίηση ορθογράφου"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Απόκρυψη κυρίως παραθύρου"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Απόκρυψη του κυρίως παραθύρου."
+
+#: ../data/empathy.schemas.in.h:17
+#, fuzzy
+msgid "Nick completed character"
+msgstr "Ψευδώνυμο με συμπληρωμένο χαρακτήρα"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Άνοιγμα νέων συζητήσεων σε ξεχωριστά παράθυρα"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Εμφάνιση προσωπικών εικόνων"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Εμφάνιση υπόδειξης για κλείσιμο κυρίως παραθύρου"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Εμφάνιση επαφών εκτός σύνδεσης"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Γλώσσες υπό ορθογραφικό έλεγχο"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Τελευταίος κατάλογος από τον οποίο επιλέχθηκε προσωπική εικόνα."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Το θέμα που χρησιμοποιείται για την εμφάνιση της συζήτησης στα παράθυρα."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Χρήση γραφικών χαμόγελων"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Χρήση ήχων ειδοποίησης"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Χρήση θέματος για τα δωμάτια συζήτησης"
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not Empathy should automatically login to your accounts on startup."
+msgstr "Αν θα συνδέεται αυτόματα στους λογαριασμούς σας ή όχι το Empathy κατά την εκκίνηση."
+
+#: ../data/empathy.schemas.in.h:29
+msgid "Whether or not the Salut account has been created on the first empathy run."
+msgstr "Αν έχει ή όχι δημιουργηθεί ο λογαριασμός χαιρετισμού κατά την πρώτη εκτέλεση του Empathy."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not the network manager should be used to automatically disconnect/reconnect."
+msgstr "Αν θα χρησιμοποιείται ή όχι η διαχείριση σύνδεσης δικτύου για την αυτόματη αποσύνδεση/επανασύνδεση."
+
+#: ../data/empathy.schemas.in.h:31
+msgid "Whether or not to check words typed against the languages you want to check with."
+msgstr "Κατά πόσο ή όχι να γίνεται έλεγχος σε λέξεις γλωσσών που επιλέξατε για έλεγχο."
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether or not to convert smileys into graphical images in conversations."
+msgstr "Κατά πόσο ή όχι να μετατρέπονται τα χαμόγελα σε εικονίδια στις συζητήσεις."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Κατά πόσο ή όχι να όταν φτάνουν μηνύματα."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Κατά πόσο ή όχι να αναπαράγεται ένας ήχος σε κατάσταση απουσίας."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Κατά πόσο ή όχι να αναπαράγεται ένας ήχος σε κατάσταση απασχολημένος."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Κατά πόσο ή όχι να εμφανίζεται αναδυόμενο παράθυρο όταν μία επαφή γίνεται διαθέσιμη."
+
+#: ../data/empathy.schemas.in.h:37
+msgid "Whether or not to show avatars for contacts in the contact list and chat windows."
+msgstr "Κατά πόσο ή όχι να εμφανίζονται προσωπικές εικόνες των επαφών στην λίστα επαφών και τα παράθυρα συζήτησης."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Κατά πόσο ή όχι να εμφανίζονται επαφές εκτός σύνδεσης στην λίστα επαφών."
+
+#: ../data/empathy.schemas.in.h:39
+msgid "Whether or not to show the message dialog about closing the main window with the 'x' button in the title bar."
+msgstr "Κατά πόσο ή όχι να εμφανίζεται επιβεβαίωση για κλείσιμο του κυρίως παραθύρου πατώντας το κουμπί 'x' στην γραμμή τίτλου."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Κατά πόσο η λίστα επαφών να εμφανίζεται σε συμπυκνωμένη μορφή ή όχι."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Κατά πόσο να χρησιμοποιείται το θέμα για δωμάτια συζήτησης ή όχι."
+
+#: ../data/empathy.schemas.in.h:42
+msgid "Which criterium to use when sorting the contact list. Default is to use sort by the contact's name with the value \"name\". A value of \"state\" will sort the contact list by state."
+msgstr "Ποιο κριτήριο θα χρησιμοποιείται κατά την ταξινόμηση της λίστας επαφών. Το προεπιλεγμένο είναι η χρήση ανά όνομα επαφής με την τιμή \"όνομα\". Μια τιμή μιας \"κατάστασης\" θα ταξινομήσει τη λίστα επαφών κατά κατάσταση."
+
+#: ../libempathy/empathy-tp-contact-list.c:724
+#: ../src/empathy.c:253
+msgid "People nearby"
+msgstr "Κοντινά άτομα"
+
+#: ../libempathy/empathy-utils.c:525
+msgid "Available"
+msgstr "Διαθέσιμος"
+
+#: ../libempathy/empathy-utils.c:527
+msgid "Busy"
+msgstr "Απασχολημένος"
+
+#: ../libempathy/empathy-utils.c:530
+msgid "Away"
+msgstr "Απών"
+
+#: ../libempathy/empathy-utils.c:532
+msgid "Hidden"
+msgstr "Απόκρυψη"
+
+#: ../libempathy/empathy-utils.c:535
+msgid "Offline"
+msgstr "Εκτός σύνδεσης"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "Όλοι"
+
+#: ../libempathy-gtk/empathy-account-widget.c:285
+#: ../libempathy-gtk/empathy-account-widget.c:330
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Προχωρημένο</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:2
+msgid "generic account settings"
+msgstr "Ρυθμίσεις γενικού λογαριασμού"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Παράβλεψη του κωδικού και καθαρισμός της εισαγωγής."
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "ICQ _UIN:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+msgid "ICQ account settings"
+msgstr "Ρυθμίσεις λογαριασμού ICQ"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "_Συνθηματικό:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Charset:"
+msgstr "_Κωδικοποίηση χαρακτήρων:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Port:"
+msgstr "_Θύρα:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:12
+#: ../src/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Εξυπηρετητής:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr "Νέα σύνδεση δικτύου"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Σύνδεση δικτύου</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Εξυπηρετητές</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Κωδικοποίηση χαρακτήρων:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Δημιουργία νέας σύνδεσης δικτύου IRC"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Επεξεργασία της επιλεγμένης σύνδεσης δικτύου για το IRC"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Σύνδεση δικτύου"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Σύνδεση δικτύου:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Ψευδώνυμο:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Κωδικός:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Τερματισμός μηνύματος:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Πραγματικό όνομα:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Αφαίρεση της επιλεγμένης σύνδεσης δικτύου για το IRC"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:13
+msgid "irc account settings"
+msgstr "ρυθμίσεις λογαριασμού irc"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Override server settings</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "ΙD ει_σόδου:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "_Προτεραιότητα:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "_Πόρος:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Χρήση παλιού SS_L"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "Απαιτείται κρυπτογράφηση (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Παράβλεψη σφαλμάτων πιστοποιητικών SSL"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:13
+msgid "jabber account settings"
+msgstr "Ρυθμίσεις λογαριασμού Jabber"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "ρυθμίσεις λογαριασμού msn"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "_Email:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "Ό_νομα:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_Jabber ID:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "Ε_πώνυμο:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../src/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Ψευδώνυμο:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "Ό_νομα δημοσίευσης:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "Ρυθμίσεις λογαριασμού χαιρετισμού"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "_Εξυπηρετητής Ιαπωνίας:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "Χρήση _yahoo Ιαπωνίας"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "Yahoo! account settings"
+msgstr "Ρυθμίσεις λογαριασμού yahoo!"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Ignore conference and chatroom invitations"
+msgstr "_Παράβλεψη τηλεδιασκέψεων και προσκλήσεων σε δωμάτια συνομιλίας"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+msgid "_Room List locale:"
+msgstr "Τοπική λίστα _δωματίων συνομιλίας:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:224
+msgid "To add a new account, you can click on the 'Add' button and a new entry will be created for you to start configuring."
+msgstr "Για να προσθέσετε έναν νέο λογαριασμό μπορείτε να κάνετε κλικ στο κουμπί 'Προσθήκη' και ένας νέος λογαριασμός θα δημιουργηθεί για να τον ρυθμίσετε."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:228
+msgid "To add a new account, you first have to install a backend for each protocol you want to use."
+msgstr "Για να προσθέσετε νέο λογαριασμό, πρέπει πρώτα να εγκαταστήσετε ένα σύστημα υποστήριξης για κάθε πρωτόκολλο που θέλετε να χρησιμοποιήσετε."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:235
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Δεν επιλέχθηκε λογαριασμός</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:236
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Αν δεν θέλετε να προσθέσετε λογαριασμό, απλά επιλέξτε το λογαριασμό που θέλετε να ρυθμίσετε από την αριστερή στήλη."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:242
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Κανένας ρυθμισμένος Λογαριασμός</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:410
+msgid "Enabled"
+msgstr "Ενεργοποιημένο"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:420
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Λογαριασμοί"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:903
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Ετοιμάζεστε να διαγράψετε το λογαριασμό %s!\n"
+"Είστε σίγουρος πώς θέλετε να συνεχίσετε;"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:909
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still be available."
+msgstr ""
+"Όλες οι σχετικές συζητήσεις και τα δωμάτια συζητήσεων ΔΕ θα διαγραφούν αν αποφασίσετε να συνεχίσετε.\n"
+"\n"
+"Αν αποφασίσετε να προσθέσετε και πάλι τον λογαριασμό αργότερα, θα είναι ακόμα διαθέσιμα."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Νέος λογαριασμός</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Ρυθμίσεις</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "_Δημιουργία"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want to configure in the list on the left."
+msgstr ""
+"Για να προσθέσετε ένα νέο λογαριασμό μπορείτε να επιλέξετε 'Προσθήκη' και ένας νέος λογαριασμός θα δημιουργηθεί για να τον ρυθμίσετε.\n"
+"\n"
+"Αν δεν θέλετε να προσθέσετε λογαριασμό, απλά κάντε κλικ στον λογαριασμό που θέλετε να ρυθμίσετε από την αριστερή στήλη. "
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Τύπος:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:458
+msgid "Select Your Avatar Image"
+msgstr "Επιλέξτε την προσωπική σας εικόνα"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:461
+msgid "No Image"
+msgstr "Χωρίς εικόνα"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:521
+msgid "Images"
+msgstr "Εικόνες"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:525
+msgid "All Files"
+msgstr "Όλα τα αρχεία"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Κάντε κλικ για μεγέθυνση"
+
+#: ../libempathy-gtk/empathy-chat.c:439
+#: ../src/empathy.c:137
+msgid "Disconnected"
+msgstr "Αποσυνδέθηκε"
+
+#: ../libempathy-gtk/empathy-chat.c:563
+msgid "offline"
+msgstr "εκτός σύνδεσης"
+
+#: ../libempathy-gtk/empathy-chat.c:566
+msgid "invalid contact"
+msgstr "μη έγκυρη επαφή"
+
+#: ../libempathy-gtk/empathy-chat.c:569
+msgid "permission denied"
+msgstr "η άδεια απορρίφθηκε"
+
+#: ../libempathy-gtk/empathy-chat.c:572
+msgid "too long message"
+msgstr "πολύ μεγάλο μήνυμα"
+
+#: ../libempathy-gtk/empathy-chat.c:575
+msgid "not implemented"
+msgstr "δεν εφαρμόστηκε"
+
+#: ../libempathy-gtk/empathy-chat.c:578
+msgid "unknown"
+msgstr "άγνωστο"
+
+#: ../libempathy-gtk/empathy-chat.c:582
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Σφάλμα κατά την αποστολή του μηνύματος '%s': %s"
+
+#: ../libempathy-gtk/empathy-chat.c:1037
+msgid "Insert Smiley"
+msgstr "Εισαγωγή χαμόγελου"
+
+#: ../libempathy-gtk/empathy-chat.c:1084
+msgid "_Check Word Spelling..."
+msgstr "Έ_λεγχος ορθογραφίας..."
+
+#: ../libempathy-gtk/empathy-chat.c:1543
+msgid "Connected"
+msgstr "Συνδεδεμένος"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "Ε_κκαθάριση"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "Κ_λήση"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "Τροποποίηση _θέματος..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+msgid "Chat"
+msgstr "Συζήτηση"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "_Πληροφορίες επαφής"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "In_vite..."
+msgstr "_Πρόσκληση..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "_Εισαγωγή χαμόγελου"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Invitation _message:"
+msgstr "_Μήνυμα πρόσκλησης:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invite"
+msgstr "Πρόσκληση"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+#: ../src/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Σύνδεση σε _νέο..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Μετακίνηση καρτέλας _αριστερά"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Μετακίνηση καρτέλας _δεξιά"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr "Επιλέξτε ποιόν θέλετε να καλέσετε:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "Έχετε λάβει πρόσκληση να συμμετάσχετε σε μια ομαδική συζήτηση."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+#: ../src/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "Πρόσ_θεση επαφής..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "Προσθήκη στα α_γαπημένα"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+#: ../src/empathy-main-window.glade.h:10
+msgid "_Contents"
+msgstr "_Περιεχόμενα"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Συζήτηση"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+msgid "_Detach Tab"
+msgstr "Από_σπαση καρτέλας"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+#: ../src/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr "_Επεξεργασία"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+#: ../src/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr "_Βοήθεια"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "_Επόμενη καρτέλα"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+msgid "_Previous Tab"
+msgstr "_Προηγούμενη καρτέλα"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+#: ../src/empathy-main-window.glade.h:16
+msgid "_Room"
+msgstr "_Δωμάτιο"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Show Contacts"
+msgstr "Εμφάνιση _επαφών"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Tabs"
+msgstr "_Καρτέλες"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+#: ../src/empathy-main-window.glade.h:17
+msgid "_View Previous Conversations"
+msgstr "Π_ροηγούμενες συζητήσεις"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+msgid "gtk-close"
+msgstr "gtk-κλείσιμο"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+msgid "gtk-copy"
+msgstr "gtk-αντιγραφή"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:30
+msgid "gtk-cut"
+msgstr "gtk-αποκοπή"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:31
+msgid "gtk-paste"
+msgstr "gtk-επικόλληση"
+
+#: ../libempathy-gtk/empathy-chat-view.c:435
+msgid "_Copy Link Address"
+msgstr "Αντιγρα_φή διεύθυνσης συνδέσμου"
+
+#: ../libempathy-gtk/empathy-chat-view.c:443
+msgid "_Open Link"
+msgstr "Ά_νοιγμα συνδέσμου"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:180
+msgid "Personal Information"
+msgstr "Προσωπικές πληροφορίες"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+msgid "Edit Contact Information"
+msgstr "Επεξεργασία πληροφοριών επαφής"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:186
+msgid "Contact Information"
+msgstr "Πληροφορίες επαφής"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:281
+msgid "I would like to add you to my contact list."
+msgstr "Θα ήθελα να σε προσθέσω στην λίστα επαφών μου."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:305
+msgid "New Contact"
+msgstr "Νέα επαφή"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Αποφασίστε αρ_γότερα"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Αίτηση εγγραφής"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:198
+msgid "_Contact"
+msgstr "_Επαφή"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:202
+msgid "_Group"
+msgstr "_Ομάδα"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+#: ../src/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_Συζήτηση"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+msgid "Chat with contact"
+msgstr "Συζητήστε με την επαφή"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "Infor_mation"
+msgstr "Πληροφο_ρίες"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "View contact information"
+msgstr "Προβολή πληροφοριών επαφής"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Re_name"
+msgstr "Μετο_νομασία"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Rename"
+msgstr "Μετονομασία"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+msgid "Edit the groups and name for this contact"
+msgstr "Επεξεργασία ομάδων και ονόματος για αυτήν την επαφή"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "_Remove"
+msgstr "_Απομάκρυνση"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "Remove contact"
+msgstr "Αφαίρεση επαφής"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "_Invite to Chat Room"
+msgstr "_Πρόσκληση στο δωμάτιο"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "Invite to a currently open chat room"
+msgstr "Πρόσκληση σε ένα ανοιχτό δωμάτιο"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "_Send File..."
+msgstr "Αποστολή α_ρχείου..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "Send a file"
+msgstr "Αποστολή αρχείου"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+msgid "View previous conversations with this contact"
+msgstr "Προβολή προηγούμενων συζητήσεων με την επαφή"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "_Call"
+msgstr "_Κλήση"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "Start a voice or video conversation with this contact"
+msgstr "Έναρξη συζήτησης με φωνή και βίντεο με αυτήν την επαφή"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1472
+#, c-format
+msgid "Do you really want to remove the contact '%s' ?"
+msgstr "Θέλετε πραγματικά να αφαιρέσετε την επαφή '%s' από την λίστα σας;"
+
+#. TRUE if user wants to remove the contact. FALSE otherwise.
+#: ../libempathy-gtk/empathy-contact-list-view.c:1476
+msgid "Removing contact"
+msgstr "Αφαίρεση επαφής"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1479
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Συγγνώμη, αλλά δεν επιθυμώ να βρίσκεστε πλέον στη λίστα επαφών μου."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1500
+#, c-format
+msgid "Do you really want to remove the group '%s' ?"
+msgstr "Θέλετε πραγματικά να αφαιρέσετε την ομάδα '%s' από την λίστα σας;"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1502
+msgid "Removing group"
+msgstr "Αφαίρεση ομάδας"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:694
+msgid "Select"
+msgstr "Επιλογή"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:704
+#: ../src/empathy-main-window.c:613
+msgid "Group"
+msgstr "Ομάδα"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Πληροφορίες πελάτη</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Λεπτομέρειες επαφής</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Επαφή</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Ομάδες</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+#: ../src/empathy-chatrooms-window.glade.h:1
+#: ../src/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Λογαριασμός:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Ψευδώνυμο:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Γενέθλια:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Πελάτης:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Πληροφορίες επαφής"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "Email:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Πλήρες όνομα:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "Αναγνωριστικό:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "Αιτήθηκαν πληροφορίες..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "Λειτουργικό σύστημα:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid "Select the groups you want this contact to appear in, you can select more than one group or no groups."
+msgstr "Επιλέξτε τις ομάδες στις οποίες επιθυμείτε να εμφανίζεται η επαφή. Μπορείτε να επιλέξετε καμία, μία ή παραπάνω ομάδες."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Έκδοση:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "Ιστότοπος:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:276
+msgid "Enter the new topic you want to set for this room:"
+msgstr "Εισάγετε το νέο θέμα που θέλετε να καθορίσετε για αυτό το δωμάτιο:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:390
+#, c-format
+msgid "%s has joined the room"
+msgstr "Η επαφή %s έχει συνδεθεί με το δωμάτιο συνομιλίας"
+
+#: ../libempathy-gtk/empathy-group-chat.c:393
+#, c-format
+msgid "%s has left the room"
+msgstr "Η επαφή %s έχει αποσυνδεθεί από το δωμάτιο συνομιλίας"
+
+#: ../libempathy-gtk/empathy-group-chat.c:443
+#, c-format
+msgid "Topic: %s"
+msgstr "Θέμα: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:518
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Το θέμα καθορίστηκε ως: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:520
+msgid "No topic defined"
+msgstr "Δεν καθορίστηκε θέμα"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Θέμα:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Ομαδική συζήτηση"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+msgid "new server"
+msgstr "νέος εξυπηρετητής"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:516
+msgid "Server"
+msgstr "Εξυπηρετητής"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:531
+msgid "Port"
+msgstr "Θύρα"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:544
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:504
+msgid "Account"
+msgstr "Λογαριασμός"
+
+#: ../libempathy-gtk/empathy-log-window.c:511
+msgid "Conversation"
+msgstr "Συζήτηση"
+
+#: ../libempathy-gtk/empathy-log-window.c:521
+msgid "Date"
+msgstr "Ημερομηνία"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "Συζητήσεις"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr "Προηγούμενες συζητήσεις"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "Αναζήτηση"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "_Για:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Κλήση"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "ID επαφής:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Νέα συζήτηση"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Προσαρμοσμένα μηνύματα..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Προσαρμοσμένο μήνυμα"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Μήνυμα:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Αποθήκευση μηνύματος"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Κατάσταση:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:232
+#, c-format
+msgid "%s went offline"
+msgstr "Ο χρήστης %s αποσυνδέθηκε"
+
+#: ../libempathy-gtk/empathy-private-chat.c:246
+#, c-format
+msgid "%s has come online"
+msgstr "Ο χρήστης %s συνδέθηκε"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:87
+msgid "Word"
+msgstr "Λέξη"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:264
+msgid "Suggestions for the word"
+msgstr "Προτάσεις για τη λέξη"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Ελεγκτής ορθογραφίας"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Προτάσεις για τη λέξη:"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:747
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:77
+msgid "Classic"
+msgstr "Κλασσικό"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:78
+msgid "Simple"
+msgstr "Απλό"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:79
+msgid "Clean"
+msgstr "Καθαρισμός"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:80
+msgid "Blue"
+msgstr "Μπλε"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Τρέχον τοπικό"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Αραβικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Αρμένικα"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Βαλτικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Κελτικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Κεντρικής Ευρώπης"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Απλοποιημένα κινέζικα"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Παραδοσιακά κινέζικα"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Κροατικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Κυριλλικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Κυριλλικά/Ρωσικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Κυριλλικά/Ουκρανικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Γεωργιανά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Ελληνικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Γκουαρατί"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Εβραϊκά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Εβραϊκά οπτικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Ινδικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Ισλανδικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Ιαπωνικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Κορεάτικα"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Σκανδιναβικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Περσικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Ρουμανικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Νότιας Ευρώπης"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Ταϋλανδέζικα"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Τουρκικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Δυτικά"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Βιετναμέζικα"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid "The contact to display in the applet. Empty means no contact is displayed."
+msgstr "Η επαφή προς εμφάνιση στη μικροεφαρμογή. Το κενό σημαίνει ότι δεν εμφανίζεται καμιά επαφή."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "Το αναγνωριστικό της προσωπικής εικόνας της επαφής. Το κενό σημαίνει ότι η επαφή δεν έχει προσωπική εικόνα."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Μεγάφωνο"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Συνομιλία!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "Πε_ρί"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Πληροφορίες"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+#: ../src/empathy-main-window.glade.h:15
+msgid "_Preferences"
+msgstr "_Προτιμήσεις"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Παρουσία"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "Καθορίστε τη δική σας παρουσία"
+
+#: ../src/empathy.c:140
+msgid "Invalid handle"
+msgstr "Μη έγκυρη διαχείριση"
+
+#: ../src/empathy.c:143
+msgid "No matching connection"
+msgstr "Καμιά σύνδεση δεν ταιριάζει"
+
+#: ../src/empathy.c:146
+msgid "Invalid account"
+msgstr "μη έγκυρος λογαριασμός"
+
+#: ../src/empathy.c:149
+msgid "Presence failure"
+msgstr "Αποτυχία παρουσίας"
+
+#: ../src/empathy.c:152
+msgid "No accounts"
+msgstr "Κανένας λογαριασμός"
+
+#: ../src/empathy.c:155
+#: ../src/empathy-main-window.c:906
+msgid "Network error"
+msgstr "Σφάλμα σύνδεσης στο δίκτυο"
+
+#: ../src/empathy.c:158
+msgid "Contact does not support voice"
+msgstr "Η επαφή δεν υποστηρίζει φωνή"
+
+#: ../src/empathy.c:161
+msgid "Lowmem"
+msgstr "Χαμ.μνήμη"
+
+#: ../src/empathy.c:164
+msgid "Channel request generic error"
+msgstr "Γενικό σφάλμα αίτησης καναλιού"
+
+#: ../src/empathy.c:167
+msgid "Channel banned"
+msgstr "Το κανάλι απαγορεύτηκε"
+
+#: ../src/empathy.c:170
+msgid "Channel full"
+msgstr "Γέμισε το κανάλι"
+
+#: ../src/empathy.c:173
+msgid "Channel invite only"
+msgstr "Κανάλι μόνο για πρόσκληση"
+
+#: ../src/empathy.c:176
+msgid "Unknown error code"
+msgstr "Άγνωστο σφάλμα κώδικα"
+
+#: ../src/empathy.c:389
+msgid "- Empathy Instant Messenger"
+msgstr "- Άμεσος αποστολέας μηνυμάτων empathy"
+
+#: ../src/empathy-about-dialog.c:63
+msgid "Empathy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version."
+msgstr "Το Empathy είναι ελεύθερο λογισμικό: Μπορείτε να το διανείμετε εκ νέου και/ή να το τροποποιήσετε κάτω από τους όρους της GNU Γενικής Δημόσιας Άδειας Χρήσης (GPL) όπως είναι δημοσιευμένη από το Free Software Foundation: είτε με την έκδοση 2 της Άδειας, είτε (κατά την επιλογή σας) με οποιαδήποτε νεότερη έκδοση."
+
+#: ../src/empathy-about-dialog.c:67
+msgid "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details."
+msgstr "Το Empathy διανέμεται με την ελπίδα ότι θα είναι χρήσιμο, αλλά χωρίς καμία εγγύηση: ούτε καν της υπονοούμενης εγγύησης εμπορικότητας και καταλληλότητας για ένα συγκεκριμένο σκοπό. Ανατρέξτε στη GNU Γενική Δημόσια Άδεια Χρήσης (GPL) για περισσότερες πληροφορίες."
+
+#: ../src/empathy-about-dialog.c:71
+msgid "You should have received a copy of the GNU General Public License along with Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr "Θα πρέπει να έχετε λάβει ένα αντίγραφο της GNU Γενικής Δημόσιας Άδειας Χρήσης (GPL) μαζί με το Empathy. Αν όχι γράψτε στο Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+
+#: ../src/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Ένας στιγμιαίος αποστολέας μηνυμάτων για το GNOME"
+
+#: ../src/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Χρήστος Τροχαλάκης <yatiohi@ideopolis.gr>\n"
+"Δημήτρης Γλέζος <dimitris@glezos.com>"
+
+#: ../src/empathy-call-window.glade.h:1
+msgid "End Call"
+msgstr "Τέλος κλήσης"
+
+#: ../src/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "Εισαγωγή"
+
+#: ../src/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "Σίγαση"
+
+#: ../src/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "Έξοδος"
+
+#: ../src/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "Αποστολή βίντεο"
+
+#: ../src/empathy-call-window.glade.h:6
+msgid "Start Call"
+msgstr "Έναρξη κλήσης"
+
+#: ../src/empathy-call-window.glade.h:7
+msgid "Volume"
+msgstr "Ένταση ήχου"
+
+#: ../src/empathy-chat-window.c:717
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Συζητήσεις (%d)"
+
+#: ../src/empathy-chat-window.c:1309
+msgid "Typing a message."
+msgstr "Γράφει ένα μήνυμα."
+
+#: ../src/empathy-chatrooms-window.c:262
+msgid "Name"
+msgstr "Όνομα"
+
+#: ../src/empathy-chatrooms-window.c:280
+msgid "Room"
+msgstr "Δωμάτιο"
+
+#: ../src/empathy-chatrooms-window.c:289
+msgid "Auto Connect"
+msgstr "Αυτόματη σύνδεση"
+
+#: ../src/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Επεξεργασία αγαπημένου δωματίου"
+
+#: ../src/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Σύνδεση στο δωμάτιο κατά την εκκίνηση"
+
+#: ../src/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Συνδεθείτε σε αυτό το δωμάτιο συνομιλίας κατά την εκκίνηση του Empathy και όταν είστε συνδεδεμένοι"
+
+#: ../src/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Διαχείριση αγαπημένων δωματίων"
+
+#: ../src/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "Όνο_μα:"
+
+#: ../src/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "Εξ_υπηρετητής:"
+
+#: ../src/empathy-chatrooms-window.glade.h:9
+#: ../src/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Δωμάτιο:"
+
+#: ../src/empathy-main-window.c:270
+msgid "Show and edit accounts"
+msgstr "Εμφάνιση και επεξεργασία λογαριασμών"
+
+#: ../src/empathy-main-window.c:634
+msgid "Contact"
+msgstr "Επαφή"
+
+#: ../src/empathy-main-window.c:823
+msgid "_Edit account"
+msgstr "_Επεξεργασία λογαριασμού"
+
+#: ../src/empathy-main-window.c:909
+msgid "Authentication failed"
+msgstr "Η πιστοποίηση απέτυχε"
+
+#: ../src/empathy-main-window.c:912
+msgid "Encryption error"
+msgstr "Σφάλμα κρυπτογράφησης"
+
+#: ../src/empathy-main-window.c:915
+msgid "Name in use"
+msgstr "Όνομα σε χρήση"
+
+#: ../src/empathy-main-window.c:918
+msgid "Certificate not provided"
+msgstr "Δεν παρέχεται πιστοποιητικό"
+
+#: ../src/empathy-main-window.c:921
+msgid "Certificate untrusted"
+msgstr "Μη έμπιστο πιστοποιητικό"
+
+#: ../src/empathy-main-window.c:924
+msgid "Certificate expired"
+msgstr "Έχει λήξει το πιστποιητικό"
+
+#: ../src/empathy-main-window.c:927
+msgid "Certificate not activated"
+msgstr "Δεν είναι ενεργοποιημένο το πιστοποιητικό"
+
+#: ../src/empathy-main-window.c:930
+msgid "Certificate hostname mismatch"
+msgstr "Αναντιστοιχία πιστοποιητικού ονόματος συστήματος"
+
+#: ../src/empathy-main-window.c:933
+msgid "Certificate fingerprint mismatch"
+msgstr "Αναντιστοιχία πιστοποιητικού αποτυπώματος"
+
+#: ../src/empathy-main-window.c:936
+msgid "Certificate self signed"
+msgstr "Ίδιο υπογεγραμμένο πιστοποιητικό"
+
+#: ../src/empathy-main-window.c:939
+msgid "Certificate error"
+msgstr "Σφάλμα πιστοποιητικού"
+
+#: ../src/empathy-main-window.c:942
+msgid "Unknown error"
+msgstr "Άγνωστο σφάλμα"
+
+#: ../src/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Λίστα επαφών"
+
+#: ../src/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Περιεχόμενο"
+
+#: ../src/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Σύνδεση στα α_γαπημένα"
+
+#: ../src/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Διαχείριση αγαπημένων"
+
+#: ../src/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Εμφάνιση επαφών ε_κτός σύνδεσης"
+
+#: ../src/empathy-main-window.glade.h:7
+msgid "_Accounts"
+msgstr "_Λογαριασμοί"
+
+#: ../src/empathy-main-window.glade.h:13
+#: ../src/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_Νέα συζήτηση..."
+
+#: ../src/empathy-main-window.glade.h:14
+msgid "_Personal Information"
+msgstr "Π_ροσωπικές πληροφορίες"
+
+#: ../src/empathy-main-window.glade.h:18
+msgid "gtk-about"
+msgstr "gtk-περί"
+
+#: ../src/empathy-main-window.glade.h:19
+msgid "gtk-quit"
+msgstr "gtk-τερματισμός"
+
+#: ../src/empathy-new-chatroom-dialog.c:290
+msgid "Chat Rooms"
+msgstr "Δωμάτια συζήτησης"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Πλοήγηση:"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:3
+msgid "Enter the room name to join here or click on one or more rooms in the list."
+msgstr "Εισάγετε εδώ το όνομα του δωματίου στο οποίο θέλετε να συνδεθείτε ή επιλέξτε ένα ή περισσότερα δωμάτια από τη λίστα."
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:4
+msgid "Enter the server which hosts the room, or leave it empty if the room is on the current account's server"
+msgstr "Εισάγετε τον εξυπηρετητή που παρέχει το δωμάτιο συνομιλίας, ή αφήστε το κενό αν το δωμάτιο είναι στον τρέχοντα εξυπηρετητή του λογαριασμού"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Σύνδεση"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Σύνδεση σε νέο"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "Α_νανέωση"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:8
+msgid "This list represents all chat rooms hosted on the server you have entered."
+msgstr "Αυτή η λίστα περιέχει όλα τα δωμάτια συζητήσεων που φιλοξενούνται στον εξυπηρετητή που έχετε εισάγει."
+
+#: ../src/empathy-preferences.c:284
+msgid "Language"
+msgstr "Γλώσσα"
+
+#: ../src/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Εμφάνιση</b>"
+
+#: ../src/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Ήχοι</b>"
+
+#: ../src/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Συμπεριφορά</b>"
+
+#: ../src/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Λίστα επαφών</b>"
+
+#: ../src/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Ενεργοποίηση του ορθογραφικού ελέγχου για τις γλώσσες:</b>"
+
+#: ../src/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Επιλογές</b>"
+
+#: ../src/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Εμφάνιση</b>"
+
+#: ../src/empathy-preferences.glade.h:8
+msgid "<small>The list of languages reflects only the languages for which you have a dictionary installed.</small>"
+msgstr "<small>Η λίστα γλωσσών περιέχει μόνο τις γλώσσες για τις οποίες υπάρχει εγκατεστημένο λεξικό.</small>"
+
+#: ../src/empathy-preferences.glade.h:9
+msgid "Automatically _connect on startup "
+msgstr "Αυτόματη _σύνδεση κατά την εκκίνηση"
+
+#: ../src/empathy-preferences.glade.h:10
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "Οι προσωπικές εικόνες είναι εικόνες που εμφανίζονται στην λίστα επαφών"
+
+#: ../src/empathy-preferences.glade.h:11
+msgid "Chat Th_eme:"
+msgstr "_Θέμα:"
+
+#: ../src/empathy-preferences.glade.h:12
+msgid "Display notifications when contacts come _online"
+msgstr "_Ειδοποιήσεις όταν οι επαφές συνδέονται"
+
+#: ../src/empathy-preferences.glade.h:13
+msgid "Enable sounds when _away"
+msgstr "Ενεργοποίηση ήχων όταν α_πουσιάζετε"
+
+#: ../src/empathy-preferences.glade.h:14
+msgid "Enable sounds when _busy"
+msgstr "Ενεργοποίηση ήχων όταν είστε απα_σχολημένος"
+
+#: ../src/empathy-preferences.glade.h:15
+msgid "General"
+msgstr "Γενικά"
+
+#: ../src/empathy-preferences.glade.h:16
+msgid "Notifications"
+msgstr "Ειδοποιήσεις"
+
+#: ../src/empathy-preferences.glade.h:17
+msgid "Preferences"
+msgstr "Προτιμήσεις"
+
+#: ../src/empathy-preferences.glade.h:18
+msgid "Show _avatars"
+msgstr "Εμφάνιση προσωπικών _εικόνων"
+
+#: ../src/empathy-preferences.glade.h:19
+msgid "Show _smileys as images"
+msgstr "Εμφάνιση γραφικών _χαμόγελων"
+
+#: ../src/empathy-preferences.glade.h:20
+msgid "Show co_mpact contact list"
+msgstr "Εμφάνιση συμπυκνωμένης λίστας"
+
+#: ../src/empathy-preferences.glade.h:21
+msgid "Sort by _name"
+msgstr "Ταξινόμηση κατά ό_νομα"
+
+#: ../src/empathy-preferences.glade.h:22
+msgid "Sort by s_tate"
+msgstr "Ταξινόμηση κατά κατάσταση"
+
+#: ../src/empathy-preferences.glade.h:23
+msgid "Spell Checking"
+msgstr "Έλεγχος ορθογραφίας"
+
+#: ../src/empathy-preferences.glade.h:24
+msgid "Themes"
+msgstr "Θέματα"
+
+#: ../src/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "Ά_νοιγμα νέων συζητήσεων σε ξεχωριστά παράθυρα"
+
+#: ../src/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "Ή_χος για νέα μηνύματα"
+
+#: ../src/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "_Χρήση για δωμ. συζήτησης"
+
+#: ../src/empathy-status-icon.c:335
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Νέο μήνυμα από %s:\n"
+"%s"
+
+#: ../src/empathy-status-icon.c:404
+#, c-format
+msgid ""
+"Incoming call from %s:\n"
+"%s"
+msgstr ""
+"Εισερχόμενη κλήση από %s:\n"
+"%s"
+
+#: ../src/empathy-status-icon.c:708
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Έγινε αίτηση εγγραφής από το %s"
+
+#: ../src/empathy-status-icon.c:711
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Μήνυμα: %s"
+
+#: ../src/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Κατάσταση"
+
+#: ../src/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "Έ_ξοδος"
+
+#: ../src/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "Εμφάνιση _λίστας επαφών"
+
+#~ msgid "Instant Messenger"
+#~ msgstr "Instant Messenger"
+
+#, fuzzy
+#~ msgid "Contact List - Empathy"
+#~ msgstr "Εμφάνιση _λίστας επαφών"
+#~ msgid "_New Message..."
+#~ msgstr "_Νέο Μήνυμα..."
+
+#, fuzzy
+#~ msgid "Disable"
+#~ msgstr "Διαθέσιμος"
+#~ msgid "<b>Account</b>"
+#~ msgstr "<b>Λογαριασμός</b>"
+#~ msgid "Cu_t"
+#~ msgstr "Απο_κοπή"
+#~ msgid "_Close"
+#~ msgstr "_Κλείσιμο"
+#~ msgid "_Copy"
+#~ msgstr "Αντι_γραφή"
+#~ msgid "_Paste"
+#~ msgstr "_Επικόλληση"
+
+#, fuzzy
+#~ msgid "Chat Room"
+#~ msgstr "Δωμάτια συζήτησης"
+#~ msgid "<b>Languages</b>"
+#~ msgstr "<b>Γλώσσες</b>"
+#~ msgid "_Enable spell checking"
+#~ msgstr "Ενεργοποίηση ορ_θογράφου"
+#~ msgid "Clear List..."
+#~ msgstr "Καθαρισμός..."
+#~ msgid "Are you sure you want to clear the list?"
+#~ msgstr "Είστε σίγουροι πως θέλετε να καθαρίσετε την λίστα;"
+#~ msgid ""
+#~ "This will remove any custom messages you have added to the list of preset "
+#~ "status messages."
+#~ msgstr ""
+#~ "Αυτό θα αφαιρέσει όλα τα μηνύματα που προσθέσατε στην λίστα των "
+#~ "προκαθορισμένων μηνυμάτων κατάστασης."
+#~ msgid "Clear List"
+#~ msgstr "Καθαρισμός"
+#~ msgid "Enter status message:"
+#~ msgstr "Εισάγετε μήνυμα κατάστασης:"
+#~ msgid "Status Message Presets"
+#~ msgstr "Προκαθορισμένα μηνύματα κατάστασης"
+#~ msgid "_Add to status message list"
+#~ msgstr "Προσθήκη στη _λίστα μηνυμάτων κατάστασης"
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Gossip Instant Messenger"
+#~ msgid "Normal"
+#~ msgstr "Κανονικό"
+#~ msgid "Joining"
+#~ msgstr "Σύνδεση"
+#~ msgid "Active"
+#~ msgstr "Ενεργό"
+#~ msgid "Inactive"
+#~ msgstr "Ανενεργό"
+#~ msgid "Error"
+#~ msgstr "Σφάλμα"
+#~ msgid "Moderator"
+#~ msgid_plural "Moderators"
+#~ msgstr[0] "Επιμελητής"
+#~ msgstr[1] "Επιμελητές"
+#~ msgid "Participant"
+#~ msgid_plural "Participants"
+#~ msgstr[0] "Συμμετέχων"
+#~ msgstr[1] "Συμμετέχοντες"
+#~ msgid "Visitor"
+#~ msgid_plural "Visitors"
+#~ msgstr[0] "Επισκέπτης"
+#~ msgstr[1] "Επισκέπτες"
+#~ msgid "No role"
+#~ msgstr "Χωρίς ρόλο"
+#~ msgid "Owner"
+#~ msgid_plural "Owners"
+#~ msgstr[0] "Ιδιοκτήτης"
+#~ msgstr[1] "Ιδιοκτήτες"
+#~ msgid "Administrator"
+#~ msgid_plural "Administrators"
+#~ msgstr[0] "Διαχειριστής"
+#~ msgstr[1] "Διαχειριστές"
+#~ msgid "Member"
+#~ msgid_plural "Members"
+#~ msgstr[0] "Μέλος"
+#~ msgstr[1] "Μέλη"
+#~ msgid "No affiliation"
+#~ msgstr "Χωρίς σχέση"
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "Το ψευδώνυμο σας φαίνεται να χρησιμοποιείται ήδη."
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr "Το δωμάτιο που προσπαθήσατε να συνδεθείτε απαιτεί κωδικό."
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr ""
+#~ "Ο απομακρυσμένος εξυπηρετητής συνεδριών δεν απάντησε σε λογικό πλαίσιο "
+#~ "χρόνου."
+#~ msgid "The conference server you tried to join could not be found."
+#~ msgstr ""
+#~ "Ο εξυπηρετητής συνεδριών που προσπαθήσατε να συνδεθείτε δεν βρέθηκε."
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr ""
+#~ "Ένα άγνωστο σφάλμα συνέβη, επιβεβαιώστε ότι οι λεπτομέρειες είναι σωστές."
+#~ msgid "Unavailable"
+#~ msgstr "Μη διαθέσιμος"
+#~ msgid "Connection refused."
+#~ msgstr "Δεν επιτράπηκε η σύνδεση."
+#~ msgid "Server address could not be resolved."
+#~ msgstr "Η διεύθυνση του εξυπηρετητή δε μπόρεσε να επιλυθεί."
+#~ msgid "Connection timed out."
+#~ msgstr "Τέλος χρονικού ορίου σύνδεσης."
+#~ msgid "The username you are trying already exists."
+#~ msgstr "Το ψευδώνυμο αυτό υπάρχει ήδη."
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "Το ψευδώνυμο αυτό δεν είναι έγκυρο."
+#~ msgid "This feature is unavailable."
+#~ msgstr "Αυτή η δυνατότητα δεν είναι διαθέσιμη."
+#~ msgid "This feature is unauthorized."
+#~ msgstr "Δεν έχετε δικαιώματα γι' αυτή τη δυνατότητα."
+#~ msgid "A specific protocol error occurred that was unexpected."
+#~ msgstr "Παρουσιάστηκε μη αναμενόμενο σφάλμα πρωτοκόλλου."
+#~ msgid "Couldn't send message!"
+#~ msgstr "Το μήνυμα δεν μπόρεσε να σταλεί!"
+#~ msgid "Connection could not be opened"
+#~ msgstr "Δεν ήταν δυνατό να ανοιχθεί η σύνδεση"
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Αυτή η δυνατότητα δεν είναι διαθέσιμη."
+#~ msgid "Stop"
+#~ msgstr "Διακοπή"
+#~ msgid "Disconnect"
+#~ msgstr "Αποσύνδεση"
+#~ msgid "Connect"
+#~ msgstr "Σύνδεση"
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Οι ρυθμίσεις του νέου λογαριασμού σας καταχωρήθηκαν με επιτυχία."
+#~ msgid "You should now be able to connect to your new account."
+#~ msgstr ""
+#~ "Θα πρέπει τώρα να είστε έτοιμος να συνδεθείτε στον νέο λογαριασμό σας."
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Οι ρυθμίσεις του νέου σας λογαριασμού απέτυχαν να καταχωρηθούν."
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Οι ρυθμίσεις του νέου λογαριασμού σας καταχωρήθηκαν με επιτυχία."
+
+#, fuzzy
+#~ msgid "You should now be able to connect with your new password."
+#~ msgstr ""
+#~ "Θα πρέπει τώρα να είστε έτοιμος να συνδεθείτε στον νέο λογαριασμό σας."
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Εισάγετε τον κωδικό του λογαριασμού %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Παρακαλώ εισάγετε ένα νέο όνομα για την ομάδα:\n"
+#~ "%s"
+#~ msgid "No information is available for this contact."
+#~ msgstr "Δεν υπάρχουν διαθέσιμες πληροφορίες για αυτήν την επαφή."
+#~ msgid "Information requested, please wait..."
+#~ msgstr "Ζητούνται πληροφορίες, παρακαλώ περιμένετε..."
+#~ msgid "To summarize:"
+#~ msgstr "Συνοψίζοντας:"
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "%d αίτηση εγγραφής"
+#~ msgstr[1] "%d αιτήσεις εγγραφών"
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "%d αίτηση μεταφοράς αρχείου"
+#~ msgstr[1] "%d αιτήσεις μεταφοράς αρχείων"
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "%d μήνυμα εξυπηρετητή"
+#~ msgstr[1] "%d μηνύματα εξυπηρετητή"
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "%d σφάλμα"
+#~ msgstr[1] "%d σφάλματα"
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "Αν κλείσετε, θα χάσετε όλες τις μη διαβασμένες πληροφορίες."
+#~ msgid "Gossip is still running, it is just hidden."
+#~ msgstr "Το Gossip εξακολουθεί να εκτελείται, απλά είναι κρυμμένο."
+#~ msgid "Click on the notification area icon to show Gossip."
+#~ msgstr ""
+#~ "Κάντε κλικ στο εικονίδιο της περιοχής ειδοποιήσεων για να εμφανίσετε το "
+#~ "Gossip."
+#~ msgid "You were about to quit!"
+#~ msgstr "Ετοιμάζεστε να εγκαταλήψετε!"
+#~ msgid ""
+#~ "Since no system or notification tray has been found, this action would "
+#~ "normally quit Gossip.\n"
+#~ "\n"
+#~ "This is just a reminder, from now on, Gossip will quit when performing "
+#~ "this action unless you uncheck the option below."
+#~ msgstr ""
+#~ "Εφόσον δεν βρέθηκε περιοχή ειδοποιήσεων αυτή η ενέργεια κανονικά θα "
+#~ "τερματίσει το Gossip.\n"
+#~ "\n"
+#~ "Αυτή είναι απλά μια υπενθύμιση, από εδώ και στο εξής, το Gossip θα "
+#~ "κλείνει με την εκτέλεση αυτής της ενέργειας εκτός αν αποεπιλέξετε την "
+#~ "παρακάτω επιλογή."
+#~ msgid "Edit Account _Details"
+#~ msgstr "Επεξεργασία _λεπτομερειών Λογαριασμού"
+#~ msgid "Select who would you like to invite to room:"
+#~ msgstr "Επιλέξτε ποιον θέλετε να καλέσετε στο δωμάτιο:"
+#~ msgid "Select which room you would like to invite:"
+#~ msgstr "Επιλέξτε ποιο δωμάτιο θέλετε να καλέσετε:"
+#~ msgid "Your invitation has been declined"
+#~ msgstr "Η πρόσκληση σας απορρίφθηκε"
+#~ msgid "Accept"
+#~ msgstr "Αποδοχή"
+#~ msgid "Decline"
+#~ msgstr "Άρνηση"
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Παρακαλώ εισάγετε ένα νέο όνομα για την ομάδα:\n"
+#~ "%s"
+#~ msgid "Unsorted"
+#~ msgstr "Μη ταξινομημένα"
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server."
+#~ msgstr ""
+#~ "Ορίστε το ψευδώνυμο για τον/την:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "Μπορείτε να ανακτήσετε τις πληροφορίες της επαφής από τον εξυπηρετητή."
+#~ msgid "New file transfer request from %s"
+#~ msgstr "Νέα αίτηση μεταφοράς αρχείου από %s"
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "Οι μεταφορές αρχείων δεν υποστηρίζονται και από τις δύο πλευρές."
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "Η αίτηση σας για μεταφορά αρχείου απορρίφθηκε."
+#~ msgid "The other user decided not to continue."
+#~ msgstr "Ο άλλος χρήστης αποφάσισε να διακόψει."
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Συνέβηκε άγνωστο σφάλμα κατά την μεταφορά του αρχείου."
+#~ msgid "%s would like to send you a file."
+#~ msgstr "Ο χρήστης %s θέλει να σας στείλει ένα αρχείο."
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Κάποιος θέλει να σας στείλει ένα αρχείο."
+#~ msgid "Select a file"
+#~ msgstr "Επιλέξτε ένα αρχείο"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "Σύνδεση"
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "Προκαλέσατε το χρήστης %s να συμμετάσχει στην ομαδική συζήτηση."
+
+#, fuzzy
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "Το θέμα ορίστηκε από το χρήστη %s"
+#~ msgid "Conversation With"
+#~ msgstr "Συζήτηση με"
+#~ msgid "Allow multiple instances of the application to run at the same time"
+#~ msgstr "Να επιτρέπονται πολλαπλές ταυτόχρονες εκτελέσεις της εφαρμογής"
+#~ msgid "List the available accounts"
+#~ msgstr "Λίστα διαθέσιμων λογαριασμών"
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "OΝΟΜΑ-ΛΟΓΑΡΙΑΣΜΟΥ"
+#~ msgid "You can not use --no-connect together with --account"
+#~ msgstr ""
+#~ "Δε μπορείτε να χρησιμοποιήσετε συγχρόνως τις παραμέτρους --no-connect και "
+#~ "--account"
+#~ msgid "No accounts available."
+#~ msgstr "Κανένας διαθέσιμος λογαριασμός."
+#~ msgid "Available accounts:"
+#~ msgstr "Διαθέσιμοι λογαριασμοί:"
+#~ msgid "[default]"
+#~ msgstr "[προεπιλογή]"
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Δεν υπάρχει λογαριασμός με το όνομα '%s'."
+#~ msgid "Create"
+#~ msgstr "Δημιουργία"
+#~ msgid "Found %d conference rooms"
+#~ msgstr "Βρέθηκαν %d δωμάτια συνεδριών"
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "Γίνεται πλοήγηση για δωμάτια συνεδριών, παρακαλώ περιμένετε..."
+#~ msgid "Browsing cancelled!"
+#~ msgstr "Η πλοήγηση ακυρώθηκε!"
+#~ msgid "Default"
+#~ msgstr "Προεπιλογή"
+#~ msgid "Chat!"
+#~ msgstr "Συζήτηση!"
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "Ο χρήστης %s θέλει να προστεθεί στην λίστα επαφών σας."
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Κάποιος θέλει να προστεθεί στην λίστα επαφών σας."
+#~ msgid "Show"
+#~ msgstr "Εμφάνιση"
+#~ msgid "Subject: %s"
+#~ msgstr "Θέμα: %s"
+#~ msgid "New subscription request from %s"
+#~ msgstr "Νέα αίτηση εγγραφής από το χρήστη %s"
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "Θέλετε να προσθέσετε αυτό το άτομο στη λίστα επαφών σας;"
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "Θέλετε να προσθέσετε το χρήστη %s στη λίστα επαφών σας;"
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Εισάγετε τον κωδικό του λογαριασμού %s"
+
+#, fuzzy
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "Γίνεται σύνδεση με: %s"
+#~ msgid "Remember Password?"
+#~ msgstr "Απομνημόνευση κωδικού;"
+#~ msgid "Do not show this again"
+#~ msgstr "Να μην εμφανιστεί ξανά"
+#~ msgid "Could not display the help contents."
+#~ msgstr "Δεν ήταν δυνατό να εμφανιστούν τα περιεχόμενα βοήθειας."
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "Ο εξυπηρετητής δε φαίνεται να ανταποκρίνεται."
+#~ msgid "Try again later."
+#~ msgstr "Δοκιμάστε πάλι αργότερα."
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Συζήτηση"
+#~ msgid "Contact goes offline"
+#~ msgstr "Η επαφή αποσυνδέεται"
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Θέλετε να δεχτείτε αυτό το αρχείο;"
+#~ msgid "File Transfer Request"
+#~ msgstr "Αίτηση για μεταφορά αρχείου"
+#~ msgid "File name:"
+#~ msgstr "Όνομα αρχείου:"
+#~ msgid "File size:"
+#~ msgstr "Μέγεθος αρχείου:"
+#~ msgid "Not supported yet"
+#~ msgstr "Δεν υποστηρίζεται ακόμα"
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "Αυτό το άτομο επιθυμεί να σας στείλει αυτό το αρχείο:"
+#~ msgid "_Accept"
+#~ msgstr "_Αποδοχή"
+#~ msgid "_Deny"
+#~ msgstr "Άρ_νηση"
+#~ msgid "-"
+#~ msgstr "-"
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Περί</b>"
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Προσωπικές λεπτομέρειες</b>"
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>Εγγραφή</b>"
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr ""
+#~ "<span size=\"smaller\"> Παράδειγμα: Γιώργος ή user@server.org</span>"
+#~ msgid "Accou_nt:"
+#~ msgstr "_Λογαριασμός:"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "Πρόσ_θεση επαφής..."
+#~ msgid "Avatar:"
+#~ msgstr "Πρ. εικόνα:"
+#~ msgid "Ch_at"
+#~ msgstr "_Συζήτηση"
+#~ msgid "Con_tact:"
+#~ msgstr "_Επαφή:"
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Σύνδεση κατά την _εκκίνηση"
+#~ msgid "Contacts"
+#~ msgstr "Επαφές"
+#~ msgid "Country:"
+#~ msgstr "Χώρα:"
+#~ msgid "Edit Contact"
+#~ msgstr "Επεξεργασία επαφής"
+#~ msgid "Edit Groups"
+#~ msgstr "Επεξεργασία ομάδων"
+#~ msgid "ID:"
+#~ msgstr "ID:"
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr ""
+#~ "Αν επιλέξετε να αποφασίσετε αργότερα θα ερωτηθείτε στην επόμενη σύνδεση."
+#~ msgid "Name:"
+#~ msgstr "Όνομα:"
+#~ msgid "Personal Details"
+#~ msgstr "Προσωπικές λεπτομέρειες"
+#~ msgid "R_egister"
+#~ msgstr "Ε_γγραφή"
+
+#, fuzzy
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Ορίστε το ψευδώνυμο για τον/την:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "Μπορείτε να ανακτήσετε τις πληροφορίες της επαφής από τον εξυπηρετητή."
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "Αυτό συμπεριφέρεται σαν φίλτρο της παρακάτω λίστας επαφών. Μπορείτε να "
+#~ "χρησιμοποιήσετε τμήματα ονομάτων επαφών ή ID, για παράδειγμα, το \"jabber."
+#~ "org\" θα εμφανίσει όποιον χρησιμοποιεί αυτόν τον εξυπηρετητή"
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr ""
+#~ "Αυτό είναι το όνομα που θα χρησιμοποιείται στη λίστα σας γι' αυτήν την "
+#~ "επαφή"
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "Αυτό το όνομα θα σας προσδιορίζει στα παράθυρα συζήτησης"
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr ""
+#~ "Αυτό το όνομα θα σας προσδιορίζει όταν νέες επαφές αναζητούν τα στοιχεία "
+#~ "σας"
+#~ msgid "Use default name here from the contact's VCard."
+#~ msgstr "Χρήση προκαθορισμένου όνοματος από τη VCard της επαφής."
+#~ msgid "Use system pro_xy"
+#~ msgstr "Χρήση διαμεσολα_βητή συστήματος"
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Ποιο λογαριασμό θέλετε να χρησιμοποιήσετε;"
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "Δεν είστε γραμμένος σε αυτήν την επαφή."
+#~ msgid "_Connect"
+#~ msgstr "_Σύνδεση"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Περιγραφή:"
+#~ msgid "_Disconnect"
+#~ msgstr "_Αποσύνδεση"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Εισάγετε το όνομα ή το ID του ατόμου με το οποίο θέλετε να συζητήσετε:"
+#~ msgid "_Group:"
+#~ msgstr "_Ομάδα:"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Ψευδώνυμο:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Συνθηματικό:"
+#~ msgid "_Retrieve"
+#~ msgstr "Ανά_κτηση"
+#~ msgid "_Subscribe"
+#~ msgstr "Ε_γγραφή"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Ιστότοπος:"
+#~ msgid " "
+#~ msgstr " "
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+#~ msgid "Group:"
+#~ msgstr "Ομάδα:"
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>martyn@imendio.com</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Ορίστε ψευδώνυμου για το χρήστη:\n"
+#~ "<b>martyn@imendio.com</b>\n"
+#~ "\n"
+#~ "Μπορείτε να ανακτήσετε τις πληροφορίες επαφής από τον εξυπηρετητή."
+#~ msgid "Web Site:"
+#~ msgstr "Ιστότοπος:"
+#~ msgid "_Forget"
+#~ msgstr "_Λησμόνηση"
+
diff --git a/trunk/po/en_CA.po b/trunk/po/en_CA.po
new file mode 100644
index 000000000..cea232b12
--- /dev/null
+++ b/trunk/po/en_CA.po
@@ -0,0 +1,2380 @@
+# Canadian English translation of gossip.
+# Copyright (C) 2004-2005 Adam Weinberger and the GNOME Foundation
+# This file is distributed under the same licence as the gossip package.
+# Adam Weinberger <adamw@gnome.org>, 2004, 2005.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2005-08-27 20:31-0500\n"
+"Last-Translator: Adam Weinberger <adamw@gnome.org>\n"
+"Language-Team: Canadian English <adamw@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Instant Messenger"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Instant Messenger"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Always open a separate chat window for new chats."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "Chat window theme"
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Comma-separated list of spell checker languages to use (e.g. en, fr, nl)."
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "_Show Contact List"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+#, fuzzy
+msgid "Enable sound when away"
+msgstr "Disable sounds when _away"
+
+#: ../data/empathy.schemas.in.h:9
+#, fuzzy
+msgid "Enable sound when busy"
+msgstr "Disable sounds when _busy"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Enable spell checking"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Hide main window"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Hide the main window."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr "Open new chats in separate windows"
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "_Show Contacts"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "The height of the main window."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Show offline contacts"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr "Spell checking languages"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "The theme that is used to display the conversation in chat windows."
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Use graphical smileys"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Use notification sounds"
+
+#: ../data/empathy.schemas.in.h:22
+#, fuzzy
+msgid "Use theme for chat rooms"
+msgstr "_Invite to Chat Room"
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Whether or not to convert smileys into graphical images in conversations."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Whether or not to play a sound when messages arrive."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Whether or not to play sounds when away."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Whether or not to play sounds when busy."
+
+#: ../data/empathy.schemas.in.h:28
+#, fuzzy
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Whether or not to play a sound when messages arrive."
+
+#: ../data/empathy.schemas.in.h:29
+#, fuzzy
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Whether or not to show contacts that are offline in the contact list."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Whether or not to show contacts that are offline in the contact list."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Whether or not to show contacts that are offline in the contact list."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Offline"
+
+#: ../libempathy/gossip-presence.c:274
+#, fuzzy
+msgid "Available"
+msgstr "Available..."
+
+#: ../libempathy/gossip-presence.c:276
+#, fuzzy
+msgid "Busy"
+msgstr "Busy..."
+
+#: ../libempathy/gossip-presence.c:279
+#, fuzzy
+msgid "Away"
+msgstr "Away..."
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Show Contacts"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Group"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "_Add Contact..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "_Hide Contact List"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "_Contents"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "_Add to Favourites"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+#, fuzzy
+msgid "Manage Favorites..."
+msgstr "_Add to Favourites"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Show _Offline Contacts"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Accounts"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Accounts"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "_Add Contact..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Chat"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Contents"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "Edit"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_New Message..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "_Personal Information"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Preferences"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+#, fuzzy
+msgid "_Room"
+msgstr "_Room:"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "_View Previous Conversations"
+msgstr "_Conversation"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Status"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Show Contact List"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+#, fuzzy
+msgid "An Instant Messaging client for GNOME"
+msgstr "Gossip, Instant Messaging Client"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr "Adam Weinberger"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Available..."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>About</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>About</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr "Accounts"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "<b>About</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>About</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>Status</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Chat"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+msgid "_Name:"
+msgstr "_Name:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "_Topic:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">Example: user@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr "Login I_D:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "_Password:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+#, fuzzy
+msgid "Reso_urce:"
+msgstr "R_esource:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "Use _encryption (SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "Por_t:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Server:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Disconnected"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr "_Check Word Spelling..."
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "Connected"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "C_lear"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Chat"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+#, fuzzy
+msgid "Contact Infor_mation"
+msgstr "Contact _Information"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "Ch_at"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+msgid "In_vite..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Enter status message:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Move Tab _Left"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Move Tab _Right"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "You have been invited to join a chat conference."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+#, fuzzy
+msgid "_Add To Favorites"
+msgstr "_Add to Favourites"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Conversation"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Detach Tab"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "_Next Tab"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "_Previous Tab"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr "_Show Contacts"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Tabs"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Copy Link Address"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Open Link"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "_New Message..."
+msgstr[1] "_New Message..."
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Chat Room:"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "_Conversation"
+msgstr[1] "_Conversation"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "Typing a message."
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "_Add Contact..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "Group"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "Add a contact"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "Contact _Information"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "Contact information"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/Re_name group"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "File name:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr ""
+"Please enter a new nickname for the contact\n"
+"%s"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "_Remove"
+msgstr "/_Remove Contact"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/_Remove Contact"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "_Invite to Chat Room"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "_Send File..."
+msgstr "/_Send File..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "Select a file"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "_Conversation"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr "Language"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "<b>Appearance and Behaviour</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>About</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Appearance and Behaviour</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "<b>Status</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr "<b>Languages</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "Connection"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>Options</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+#, fuzzy
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"The list of languages here reflects only the languages for which you have a "
+"dictionary installed."
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+#, fuzzy
+msgid "Chat Th_eme:"
+msgstr "Chat window theme"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+#, fuzzy
+msgid "Enable sounds when _away"
+msgstr "Disable sounds when _away"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+#, fuzzy
+msgid "Enable sounds when _busy"
+msgstr "Disable sounds when _busy"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr "General"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "Use notification sounds"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "_Preferences"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+#, fuzzy
+msgid "Show _smileys as images"
+msgstr "Convert _smileys to graphical images"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "_Show Contact List"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Spell Checking"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+#, fuzzy
+msgid "_Enable spell checking"
+msgstr "Enable spell checking"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Open new chats in separate windows"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "_Play sound when messages arrive"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "_Invite to Chat Room"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+#, fuzzy
+msgid "Custom message..."
+msgstr "_New Message..."
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "Clear List"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "Do you want to accept this file?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr "Clear List"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Enter status message:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "Add to status message list"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "Add to status message list"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s went offline"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, fuzzy, c-format
+msgid "%s has come online"
+msgstr "%s comes online"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+#, fuzzy
+msgid "Simple"
+msgstr "Example: %s"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "C_lear"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+#, fuzzy
+msgid "Blue"
+msgstr "Basque"
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Don't connect on startup"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "Gossip Instant Messenger"
+
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Gossip Instant Messenger"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "_Join"
+
+#, fuzzy
+#~ msgid "Active"
+#~ msgstr "Actions"
+
+#~ msgid "Unknown"
+#~ msgstr "Unknown"
+
+#, fuzzy
+#~ msgid "Error"
+#~ msgstr "Last Error"
+
+#, fuzzy
+#~ msgid "Participant"
+#~ msgid_plural "Participants"
+#~ msgstr[0] "Galician"
+#~ msgstr[1] "Galician"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Use notification sounds"
+
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "The nickname you have chosen is already in use."
+
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr "The chat room you tried to join requires a password."
+
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr "The remote conference server did not respond in a sensible time."
+
+#~ msgid "The conference server you tried to join could not be found."
+#~ msgstr "The conference server you tried to join could not be found."
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Ensure that your details are correct."
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Service Unavailable"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "An unknown error occurred."
+
+#~ msgid "Connection refused."
+#~ msgstr "Connection refused."
+
+#~ msgid "Server address could not be resolved."
+#~ msgstr "Server address could not be resolved."
+
+#~ msgid "Connection timed out."
+#~ msgstr "Connection timed out."
+
+#~ msgid "Authentication failed."
+#~ msgstr "Authentication failed."
+
+#, fuzzy
+#~ msgid "The username you are trying already exists."
+#~ msgstr "The nickname you have chosen is already in use."
+
+#, fuzzy
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "The nickname you have chosen is already in use."
+
+#, fuzzy
+#~ msgid "This feature is unavailable."
+#~ msgstr "No accounts available."
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Account"
+
+#~ msgid "Home"
+#~ msgstr "Home"
+
+#~ msgid "Couldn't send message!"
+#~ msgstr "Could not send message."
+
+#~ msgid "Connection could not be opened"
+#~ msgstr "Connection could not be opened"
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "No accounts available."
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Registration Required"
+
+#, fuzzy
+#~ msgid "There was an internal service error"
+#~ msgstr "Internal Server Error"
+
+#, fuzzy
+#~ msgid "This feature is not implemented"
+#~ msgstr "No accounts available."
+
+#, fuzzy
+#~ msgid "The remote service timed out"
+#~ msgstr "Remote Server Timeout"
+
+#~ msgid "Disconnect"
+#~ msgstr "Disconnect"
+
+#~ msgid "Connect"
+#~ msgstr "Connect"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Successfully registered the account"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Failed registering the account"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Please enter your password:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Please enter your password:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+
+#~ msgid "No information is available for this contact."
+#~ msgstr "No information is available for this contact."
+
+#~ msgid "Information requested, please wait..."
+#~ msgstr "Information requested, please wait..."
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "I would like to add you to my contact list."
+
+#~ msgid "To summarize:"
+#~ msgstr "To summarize:"
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "_New Message..."
+#~ msgstr[1] "_New Message..."
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "Gossip - Subscription Request"
+#~ msgstr[1] "Gossip - Subscription Request"
+
+#, fuzzy
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "Gossip - File Transfer Request"
+#~ msgstr[1] "Gossip - File Transfer Request"
+
+#, fuzzy
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "Could not send message."
+#~ msgstr[1] "Could not send message."
+
+#, fuzzy
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "Last Error"
+#~ msgstr[1] "Last Error"
+
+#, fuzzy
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "If you quit, you will loose all unread information."
+
+#, fuzzy
+#~ msgid "Edit Account _Details"
+#~ msgstr "Edit your chat room details:"
+
+#~ msgid "Word"
+#~ msgstr "Word"
+
+#~ msgid "New message from %s"
+#~ msgstr "New message from %s"
+
+#, fuzzy
+#~ msgid "Your invitation has been declined"
+#~ msgstr "Your file transfer offer was declined."
+
+#~ msgid "Accept"
+#~ msgstr "Accept"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Name:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Room:"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "Stop Connecting"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "Information requested, please wait..."
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "Do you want to remove the contact\n"
+#~ "%s\n"
+#~ "from your contact list?"
+
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Select"
+
+#~ msgid "Unsorted"
+#~ msgstr "Unsorted"
+
+#~ msgid "New file transfer request from %s"
+#~ msgstr "New file transfer request from %s"
+
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "File transfer is not supported by both parties."
+
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "Your file transfer offer was declined."
+
+#~ msgid "The other user decided not to continue."
+#~ msgstr "The other user decided not to continue."
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Unknown error occured during file transfer."
+
+#~ msgid "%s would like to send you a file."
+#~ msgstr "%s would like to send you a file."
+
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Someone would like to send you a file."
+
+#~ msgid "Select a file"
+#~ msgstr "Select a file"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "Connecting"
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Stop Connecting"
+
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "Invited %s to join this chat conference."
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "What nickname do you want to use for this contact?"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "_Topic:"
+
+#~ msgid "Account"
+#~ msgstr "Account"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "_Conversation"
+
+#~ msgid "List the available accounts"
+#~ msgstr "List the available accounts"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Which account to connect to on startup"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "ACCOUNT-NAME"
+
+#~ msgid "No accounts available."
+#~ msgstr "No accounts available."
+
+#~ msgid "Available accounts:"
+#~ msgstr "Available accounts:"
+
+#~ msgid "[default]"
+#~ msgstr "[default]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "There is no account with the name '%s'."
+
+#, fuzzy
+#~ msgid "Join"
+#~ msgstr "_Join"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Chat"
+
+#, fuzzy
+#~ msgid "Chat Rooms"
+#~ msgstr "Chat Room:"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "Trying to join chat room, please wait..."
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "[default]"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "Chat"
+
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s wants to be added to your contact list."
+
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Someone wants to be added to your contact list."
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "Gossip - Subscription Request"
+
+#, fuzzy
+#~ msgid "Contact Information"
+#~ msgstr "Contact _Information"
+
+#~ msgid "Suggestions for the word"
+#~ msgstr "Suggestions for the word"
+
+#~ msgid "New subscription request from %s"
+#~ msgstr "New subscription request from %s"
+
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "Do you want to add this person to your contact list?"
+
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "Do you want to add %s to your contact list?"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Please enter your password:"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Remember Password?"
+
+#~ msgid "Could not display the help contents."
+#~ msgstr "Could not display the help contents."
+
+#, fuzzy
+#~ msgid "Select Your Avatar Image"
+#~ msgstr "Select another and try again"
+
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "The server does not seem to be responding."
+
+#~ msgid "Try again later."
+#~ msgstr "Try again later."
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Chat"
+
+#~ msgid "Contact goes offline"
+#~ msgstr "Contact goes offline"
+
+#~ msgid "Contact goes online"
+#~ msgstr "Contact goes online"
+
+#~ msgid "Contact ID:"
+#~ msgstr "Contact ID:"
+
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Do you want to accept this file?"
+
+#, fuzzy
+#~ msgid "File Transfer Request"
+#~ msgstr "Gossip - File Transfer Request"
+
+#~ msgid "File name:"
+#~ msgstr "File name:"
+
+#~ msgid "File size:"
+#~ msgstr "File size:"
+
+#, fuzzy
+#~ msgid "Not supported yet"
+#~ msgstr "Not supported yet."
+
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "This person wishes to send you this file:"
+
+#~ msgid "Web site:"
+#~ msgstr "Web site:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Accept"
+
+#~ msgid "_Deny"
+#~ msgstr "_Deny"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>About</b>"
+
+#~ msgid "Account:"
+#~ msgstr "Account:"
+
+#, fuzzy
+#~ msgid "Browse:"
+#~ msgstr "Faroese"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Gossip - Edit Chat Room"
+
+#, fuzzy
+#~ msgid "Group Chat"
+#~ msgstr "Gossip - Chat"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "_Join"
+
+#, fuzzy
+#~ msgid "Join room on start_up"
+#~ msgstr "Join Room on Start_up"
+
+#~ msgid "N_ame:"
+#~ msgstr "N_ame:"
+
+#~ msgid "S_erver:"
+#~ msgstr "S_erver:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "_Nickname:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Room:"
+
+#~ msgid "-"
+#~ msgstr "-"
+
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>About</b>"
+
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "<b>Client Information</b>"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>About</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>Languages</b>"
+
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Personal Details</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "Connection"
+
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Account:"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "_Add Contact..."
+
+#, fuzzy
+#~ msgid "Alia_s:"
+#~ msgstr "Alias:"
+
+#~ msgid "Ch_at"
+#~ msgstr "Ch_at"
+
+#~ msgid "Client:"
+#~ msgstr "Client:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "_Add Contact..."
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Connect on Start_up"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "_Add Contact..."
+
+#~ msgid "Country:"
+#~ msgstr "Country:"
+
+#~ msgid "Decide _Later"
+#~ msgstr "Decide _Later"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "_Add Contact..."
+
+#, fuzzy
+#~ msgid "Edit Groups"
+#~ msgstr "/_Edit Groups"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
+
+#~ msgid "ID:"
+#~ msgstr "ID:"
+
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+
+#~ msgid "Name:"
+#~ msgstr "Name:"
+
+#~ msgid "OS:"
+#~ msgstr "OS:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "Personal Details Saved!"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "Registration Required"
+
+#, fuzzy
+#~ msgid "Search"
+#~ msgstr "_Search..."
+
+#, fuzzy
+#~ msgid "Spell Checker"
+#~ msgstr "Spell Checking"
+
+#, fuzzy
+#~ msgid "Subscription Request"
+#~ msgstr "Gossip - Subscription Request"
+
+#~ msgid "Suggestions for the word:"
+#~ msgstr "Suggestions for the word:"
+
+#, fuzzy
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "This acts as a filter of the contact list below. You can use segments of "
+#~ "contact's name or ID; for example, \"jabber.org\" will list everyone "
+#~ "using that server. "
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "This is the name that will be used on your roster for this contact."
+
+#, fuzzy
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "This name will be used to identify you in chat windows."
+
+#, fuzzy
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr "This name will be used to identify you in chat windows."
+
+#~ msgid "Use system pro_xy"
+#~ msgstr "Use system pro_xy"
+
+#~ msgid "Version:"
+#~ msgstr "Version:"
+
+#, fuzzy
+#~ msgid "View Previous Conversations"
+#~ msgstr "_Conversation"
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Which username do you want to use?"
+
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "You are not subscribed to this contact."
+
+#~ msgid "_Connect"
+#~ msgstr "_Connect"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Description:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Disconnect"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "Email:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Enter the name or contact ID of the person you want to chat with below:"
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "Por_t:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "_Name:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Group:"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Nickname:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Password:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "_New Message..."
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Subscribe"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Web site:"
+
+#~ msgid "Preset status messages"
+#~ msgstr "Preset status messages"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Preset status messages."
+
+#~ msgid "Connecting"
+#~ msgstr "Connecting"
+
+#~ msgid "Perhaps you are trying to connect to the wrong port?"
+#~ msgstr "Perhaps you are trying to connect to the wrong port?"
+
+#~ msgid "Perhaps the service is not currently running?"
+#~ msgstr "Perhaps the service is not currently running?"
+
+#~ msgid "Check your connection details."
+#~ msgstr "Check your connection details."
+
+#~ msgid "Perhaps the server is not running this service."
+#~ msgstr "Perhaps the server is not running this service."
+
+#~ msgid "Check your username and password are correct."
+#~ msgstr "Ensure that your username and password are correct."
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s will be added to your contact list."
+
+#~ msgid "%s ID of new contact:"
+#~ msgstr "%s ID of new contact:"
+
+#~ msgid "Example: %s"
+#~ msgstr "Example: %s"
+
+#~ msgid "You have no Instant Messaging accounts configured!"
+#~ msgstr "You have no Instant Messaging accounts configured!"
+
+#~ msgid ""
+#~ "Next you will be presented with the Account Information dialog to set "
+#~ "your details up."
+#~ msgstr ""
+#~ "Next you will be presented with the Account Information dialogue to set "
+#~ "up your details."
+
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Favourite"
+#~ msgstr "_Add to Favourites"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Contact Information for %s"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/Contact _Information"
+
+#~ msgid "/Re_name Contact"
+#~ msgstr "/Re_name Contact"
+
+#~ msgid "/_Edit Groups"
+#~ msgstr "/_Edit Groups"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "_Conversation"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Edit groups for %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Conversation Log"
+
+#~ msgid "Registering account"
+#~ msgstr "Registering account"
+
+#, fuzzy
+#~ msgid "Respond"
+#~ msgstr "Reason:"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "_Add to Favourites"
+
+#, fuzzy
+#~ msgid ""
+#~ "Customize your own nickname, the server and chatroom which you wish to "
+#~ "join."
+#~ msgstr ""
+#~ "Pick a saved chat room or customize your own nickname, server and chat "
+#~ "room to join."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Name:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Chat Room:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Pick a saved chat room from the presets available below and click Join to "
+#~ "start chatting."
+#~ msgstr ""
+#~ "Pick a saved chat room or customize your own nickname, server and chat "
+#~ "room to join."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Information requested, please wait...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Example: user@jabber.org</span>"
+
+#~ msgid "Account Name"
+#~ msgstr "Account Name"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Chat Room:"
+
+#, fuzzy
+#~ msgid "Connection Details"
+#~ msgstr "Connection"
+
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Do you already have an account set up on a server?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+
+#~ msgid "Enter the user's contact ID:"
+#~ msgstr "Enter the user's contact ID:"
+
+#~ msgid "Finished"
+#~ msgstr "Finished"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favourite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "In which group do you want to place this contact?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "Jabber ID:"
+
+#~ msgid "Nickname:"
+#~ msgstr "Nickname:"
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "Por_t:"
+
+#, fuzzy
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr "Press Subscribe to request to receive their status."
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "Registering account"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "R_esource:"
+
+#~ msgid "Sending request"
+#~ msgstr "Sending request"
+
+#, fuzzy
+#~ msgid "Server:"
+#~ msgstr "_Server:"
+
+#~ msgid "Web Site:"
+#~ msgstr "Web Site:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Welcome to Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Which instant messaging system does the contact use?"
+
+#~ msgid "What is your name?"
+#~ msgstr "What is your name?"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "What server do you want to use?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "What username do you use?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Which username do you want to use?"
+
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "To which account do you want to add this contact?"
+
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+
+#~ msgid "Your Account"
+#~ msgstr "Your Account"
+
+#~ msgid "Your Identity"
+#~ msgstr "Your Identity"
+
+#~ msgid "Your new account has now been set up."
+#~ msgstr "Your new account has now been set up."
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "Gossip - Chat"
+
+#~ msgid "_No"
+#~ msgstr "_No"
+
+#~ msgid "_Search..."
+#~ msgstr "_Search..."
+
+#~ msgid "_Yes"
+#~ msgstr "_Yes"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Be silent when away"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Be silent when busy"
+
+#~ msgid "Height of main window"
+#~ msgstr "Height of main window"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "The X position of the main window."
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "The Y position of the main window."
+
+#~ msgid "The width of the main window."
+#~ msgstr "The width of the main window."
+
+#~ msgid "Whether spell checking should be turned on."
+#~ msgstr "Whether spell checking should be enabled."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Width of the main window"
+
+#~ msgid "X position of main window"
+#~ msgstr "X position of main window"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Y position of main window"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip, Instant Messaging Client"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "_Invite to Chat Room"
+
+#~ msgid "Requested Information"
+#~ msgstr "Requested Information"
+
+#~ msgid "/_Invite to Chat Conference"
+#~ msgstr "/_Invite to Chat Conference"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "_New Message..."
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "%s went offline"
+
+#~ msgid "Contact _Information"
+#~ msgstr "Contact _Information"
+
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>Sound</b>"
+
+#~ msgid "Check spelling while I _type"
+#~ msgstr "Check spelling while I _type"
+
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - Accounts"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "_Join Group Chat..."
+
+#~ msgid "Por_t:"
+#~ msgstr "Por_t:"
+
+#~ msgid "Requested information."
+#~ msgstr "Requested information."
+
+#~ msgid "Requesting contact information, please wait..."
+#~ msgstr "Requesting contact information, please wait..."
+
+#~ msgid "Could not open connection"
+#~ msgstr "Could not open connection"
+
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "Could not find the server you wanted to use"
+
+#~ msgid "Connection to the server failed."
+#~ msgstr "Connection to the server failed."
+
+#~ msgid "Authentication failed"
+#~ msgstr "Authentication failed"
+
+#~ msgid "Written by:"
+#~ msgstr "Written by:"
+
+#~ msgid "Artwork by:"
+#~ msgstr "Artwork by:"
+
+#~ msgid "Translated by:"
+#~ msgstr "Translated by:"
+
+#~ msgid "Account ID"
+#~ msgstr "Account ID"
+
+#~ msgid "Last Error"
+#~ msgstr "Last Error"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sChat - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Show _Log"
+
+#~ msgid "Afrikaans"
+#~ msgstr "Afrikaans"
+
+#~ msgid "Amharic"
+#~ msgstr "Amharic"
+
+#~ msgid "Arabic"
+#~ msgstr "Arabic"
+
+#~ msgid "Azerbaijani"
+#~ msgstr "Azerbaijani"
+
+#~ msgid "Belarusian"
+#~ msgstr "Belarusian"
+
+#~ msgid "Bulgarian"
+#~ msgstr "Bulgarian"
+
+#~ msgid "Bengali"
+#~ msgstr "Bengali"
+
+#~ msgid "Breton"
+#~ msgstr "Breton"
+
+#~ msgid "Bosnian"
+#~ msgstr "Bosnian"
+
+#~ msgid "Catalan"
+#~ msgstr "Catalan"
+
+#~ msgid "Czech"
+#~ msgstr "Czech"
+
+#~ msgid "Welsh"
+#~ msgstr "Welsh"
+
+#~ msgid "Danish"
+#~ msgstr "Danish"
+
+#~ msgid "German"
+#~ msgstr "German"
+
+#~ msgid "German (Austria)"
+#~ msgstr "German (Austria)"
+
+#~ msgid "German (Germany)"
+#~ msgstr "German (Germany)"
+
+#~ msgid "German (Swiss)"
+#~ msgstr "German (Swiss)"
+
+#~ msgid "Greek"
+#~ msgstr "Greek"
+
+#~ msgid "English"
+#~ msgstr "English"
+
+#~ msgid "English (Canadian)"
+#~ msgstr "English (Canadian)"
+
+#~ msgid "English (British)"
+#~ msgstr "English (British)"
+
+#~ msgid "English (American)"
+#~ msgstr "English (American)"
+
+#~ msgid "Esperanto"
+#~ msgstr "Esperanto"
+
+#~ msgid "Spanish"
+#~ msgstr "Spanish"
+
+#~ msgid "Estonian"
+#~ msgstr "Estonian"
+
+#~ msgid "Persian"
+#~ msgstr "Persian"
+
+#~ msgid "Finnish"
+#~ msgstr "Finnish"
+
+#~ msgid "French"
+#~ msgstr "French"
+
+#~ msgid "French (France)"
+#~ msgstr "French (France)"
+
+#~ msgid "French (Swiss)"
+#~ msgstr "French (Swiss)"
+
+#~ msgid "Irish Gaelic"
+#~ msgstr "Irish Gaelic"
+
+#~ msgid "Scots Gaelic"
+#~ msgstr "Scots Gaelic"
+
+#~ msgid "Gujarati"
+#~ msgstr "Gujarati"
+
+#~ msgid "Manx Gaelic"
+#~ msgstr "Manx Gaelic"
+
+#~ msgid "Hebrew"
+#~ msgstr "Hebrew"
+
+#~ msgid "Hindi"
+#~ msgstr "Hindi"
+
+#~ msgid "Croatian"
+#~ msgstr "Croatian"
+
+#~ msgid "Hungarian"
+#~ msgstr "Hungarian"
+
+#~ msgid "Indonesian"
+#~ msgstr "Indonesian"
+
+#~ msgid "Icelandic"
+#~ msgstr "Icelandic"
+
+#~ msgid "Italian"
+#~ msgstr "Italian"
+
+#~ msgid "Japanese"
+#~ msgstr "Japanese"
+
+#~ msgid "Georgian"
+#~ msgstr "Georgian"
+
+#~ msgid "Kannada"
+#~ msgstr "Kannada"
+
+#~ msgid "Korean"
+#~ msgstr "Korean"
+
+#~ msgid "Kurdish"
+#~ msgstr "Kurdish"
+
+#~ msgid "Cornish"
+#~ msgstr "Cornish"
+
+#~ msgid "Limburgish"
+#~ msgstr "Limburgish"
+
+#~ msgid "Lithuanian"
+#~ msgstr "Lithuanian"
+
+#~ msgid "Latvian"
+#~ msgstr "Latvian"
+
+#~ msgid "Maori"
+#~ msgstr "Maori"
+
+#~ msgid "Macedonian"
+#~ msgstr "Macedonian"
+
+#~ msgid "Malayalam"
+#~ msgstr "Malayalam"
+
+#~ msgid "Mongolian"
+#~ msgstr "Mongolian"
+
+#~ msgid "Marathi"
+#~ msgstr "Marathi"
+
+#~ msgid "Malay"
+#~ msgstr "Malay"
+
+#~ msgid "Norwegian (Bokmal)"
+#~ msgstr "Norwegian (Bokmal)"
+
+#~ msgid "Nepali"
+#~ msgstr "Nepali"
+
+#~ msgid "Dutch"
+#~ msgstr "Dutch"
+
+#~ msgid "Norwegian"
+#~ msgstr "Norwegian"
+
+#~ msgid "Norwegian (Nynorsk)"
+#~ msgstr "Norwegian (Nynorsk)"
+
+#~ msgid "Norwegian (Nyorsk)"
+#~ msgstr "Norwegian (Nyorsk)"
+
+#~ msgid "Oriya"
+#~ msgstr "Oriya"
+
+#~ msgid "Punjabi"
+#~ msgstr "Punjabi"
+
+#~ msgid "Polish"
+#~ msgstr "Polish"
+
+#~ msgid "Portuguese"
+#~ msgstr "Portuguese"
+
+#~ msgid "Portuguese (Portugal)"
+#~ msgstr "Portuguese (Portugal)"
+
+#~ msgid "Portuguese (Brazil)"
+#~ msgstr "Portuguese (Brazil)"
+
+#~ msgid "Romanian"
+#~ msgstr "Romanian"
+
+#~ msgid "Russian"
+#~ msgstr "Russian"
+
+#~ msgid "Kinyarwanda"
+#~ msgstr "Kinyarwanda"
+
+#~ msgid "Slovak"
+#~ msgstr "Slovak"
+
+#~ msgid "Slovenian"
+#~ msgstr "Slovenian"
+
+#~ msgid "Albanian"
+#~ msgstr "Albanian"
+
+#~ msgid "Serbian"
+#~ msgstr "Serbian"
+
+#~ msgid "Swedish"
+#~ msgstr "Swedish"
+
+#~ msgid "Tamil"
+#~ msgstr "Tamil"
+
+#~ msgid "Telugu"
+#~ msgstr "Telugu"
+
+#~ msgid "Thai"
+#~ msgstr "Thai"
+
+#~ msgid "Turkmen"
+#~ msgstr "Turkmen"
+
+#~ msgid "Turkish"
+#~ msgstr "Turkish"
+
+#~ msgid "Ukrainian"
+#~ msgstr "Ukrainian"
+
+#~ msgid "Vietnamese"
+#~ msgstr "Vietnamese"
+
+#~ msgid "Wallon"
+#~ msgstr "Wallon"
+
+#~ msgid "Xhosa"
+#~ msgstr "Xhosa"
+
+#~ msgid "Yiddish"
+#~ msgstr "Yiddish"
+
+#~ msgid "Chinese Simplified"
+#~ msgstr "Chinese Simplified"
+
+#~ msgid "Chinese Traditional"
+#~ msgstr "Chinese Traditional"
+
+#~ msgid "View Lo_g"
+#~ msgstr "View Lo_g"
+
+#, fuzzy
+#~ msgid "Gossip - Chat Rooms"
+#~ msgstr "Gossip - Edit Chat Room"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - Group Chat"
+
+#, fuzzy
+#~ msgid "Gossip - New Chatroom"
+#~ msgstr "Gossip - Edit Chat Room"
+
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Gossip - Add contact"
+
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "Gossip - Contact Information"
+
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - Edit Groups"
+
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - New Account"
+
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - New Message"
+
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Gossip - Personal Details"
+
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Gossip - Preferences"
+
+#~ msgid "Gossip - Spell Checker"
+#~ msgstr "Gossip - Spell Checker"
+
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - Status Message"
+
+#~ msgid "Waiting for server to respond, please wait..."
+#~ msgstr "Waiting for server to respond; please wait..."
+
+#~ msgid "Connection could not be created"
+#~ msgstr "Connection could not be created"
+
+#~ msgid "Redirect"
+#~ msgstr "Redirect"
+
+#~ msgid "Bad Request"
+#~ msgstr "Bad Request"
+
+#~ msgid "Not Authorized"
+#~ msgstr "Not Authorized"
+
+#~ msgid "Payment Required"
+#~ msgstr "Payment Required"
+
+#~ msgid "Forbidden"
+#~ msgstr "Forbidden"
+
+#~ msgid "Not Found"
+#~ msgstr "Not Found"
+
+#~ msgid "Not Allowed"
+#~ msgstr "Not Allowed"
+
+#~ msgid "Not Acceptable"
+#~ msgstr "Not Acceptable"
+
+#~ msgid "Request Timeout"
+#~ msgstr "Request Timeout"
+
+#~ msgid "Conflict"
+#~ msgstr "Conflict"
+
+#~ msgid "Not Implemented"
+#~ msgstr "Not Implemented"
+
+#~ msgid "Remote Server Error"
+#~ msgstr "Remote Server Error"
+
+#~ msgid "Unknown error."
+#~ msgstr "Unknown error."
+
+#~ msgid "Custom"
+#~ msgstr "Custom"
+
+#~ msgid "The chat room you are trying is not responding."
+#~ msgstr "The chat room you are trying is not responding."
+
+#~ msgid "Check your details and try again."
+#~ msgstr "Check your details and try again."
+
+#~ msgid "This is currently unsupported."
+#~ msgstr "This is currently unsupported."
+
+#~ msgid "Perhaps the conference server is busy, try again later."
+#~ msgstr "Perhaps the conference server is busy; try again later."
+
+#~ msgid "Check the server host name is correct and is available."
+#~ msgstr "Check the server host name is correct and is available."
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip will now try to use your account:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Gossip will now try to register the account:"
+
+#~ msgid "Cus_tomize"
+#~ msgstr "Cus_tomize"
+
+#~ msgid "Edit or Delete this favorite."
+#~ msgstr "Edit or Delete this favourite."
+
+#~ msgid "Gossip - Join Chat Room "
+#~ msgstr "Gossip - Join Chat Room "
+
+#~ msgid "Choose a Server"
+#~ msgstr "Choose a Server"
+
+#~ msgid "On what server do you have an account?"
+#~ msgstr "On what server do you have an account?"
diff --git a/trunk/po/en_GB.po b/trunk/po/en_GB.po
new file mode 100644
index 000000000..a839125eb
--- /dev/null
+++ b/trunk/po/en_GB.po
@@ -0,0 +1,2135 @@
+# Copyright (C) 2006 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same licence as the empathy package.
+# David Lodge <dave@cirt.net>, 2007
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-04-22 07:21+0100\n"
+"PO-Revision-Date: 2008-03-08 10:18+0000\n"
+"Last-Translator: David Lodge <dave@cirt.net>\n"
+"Language-Team: en_GB <en@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Empathy Instant Messenger"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Send and receive instant messages"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Always open a separate chat window for new chats."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Chat window theme"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr "Checks if Empathy should auto-connect on startup"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Checks if NetworkManager should be used"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Checks if Salut account is created"
+
+#: ../data/empathy.schemas.in.h:7
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Compact contact list"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Contact list sort criterium"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Default directory to select an avatar image from"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Enable popup when contact is available"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Enable sound when away"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Enable sound when busy"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Enable spell checker"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Hide main window"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Hide the main window."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Nick completed character"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Open new chats in separate windows"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Show avatars"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Show hint about closing the main window"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Show offline contacts"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Spell checking languages"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "The last directory that an avatar image was chosen from."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "The theme that is used to display the conversation in chat windows."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Use graphical smileys"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Use notification sounds"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Use theme for chat rooms"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically login to your accounts on "
+"startup."
+msgstr ""
+"Whether or not Empathy should automatically log in to your accounts on "
+"startup."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first empathy run."
+msgstr ""
+"Whether or not the Salut account has been created on the first Empathy run."
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Whether or not to convert smileys into graphical images in conversations."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Whether or not to play a sound when messages arrive."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Whether or not to play sounds when away."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Whether or not to play sounds when busy."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Whether or not to show a popup when a contact becomes available."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Whether or not to show contacts that are offline in the contact list."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Whether or not to show the message dialogue about closing the main window "
+"with the 'x' button in the title bar."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Whether to show the contact list in compact mode or not."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Whether to use the theme for chat rooms or not."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+
+#: ../libempathy/empathy-tp-contact-list.c:676 ../src/empathy.c:189
+msgid "People nearby"
+msgstr "People nearby"
+
+#: ../libempathy/empathy-utils.c:475
+msgid "Available"
+msgstr "Available"
+
+#: ../libempathy/empathy-utils.c:477
+msgid "Busy"
+msgstr "Busy"
+
+#: ../libempathy/empathy-utils.c:480
+msgid "Away"
+msgstr "Away"
+
+#: ../libempathy/empathy-utils.c:482
+msgid "Hidden"
+msgstr "Hidden"
+
+#: ../libempathy/empathy-utils.c:485
+msgid "Offline"
+msgstr "Offline"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:334
+msgid "All"
+msgstr "All"
+
+#: ../libempathy-gtk/empathy-account-widget.c:286
+#: ../libempathy-gtk/empathy-account-widget.c:331
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Advanced</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Forget password and clear the entry."
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "Pass_word:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+msgid "Screen _Name:"
+msgstr "Screen _Name:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Port:"
+msgstr "_Port:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+#: ../src/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Server:"
+
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "Login I_D:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "ICQ _UIN:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "_Charset:"
+msgstr "_Charset:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr "New Network"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Network</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Servers</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Charset:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Create a new IRC network"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Edit the selected IRC network"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Network"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Network:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Nickname:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Password:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Quit message:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Real name:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Remove the selected IRC network"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Override server settings</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "Pri_ority:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "Reso_urce:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Use old SS_L"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "_Encryption required (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Ignore SSL certificate errors"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_Email:"
+msgstr "_E-mail:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_First Name: "
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_Jabber ID:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "_Last Name:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../src/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Nickname:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "_Published Name:"
+
+#. look up the DNS SRV record at the service's domain for the host name of a STUN server.
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+msgid "Discover STUN"
+msgstr "Discover STUN"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+msgid "Stun Server:"
+msgstr "STUN Server:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+msgid "Stun port:"
+msgstr "STUN Port:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+msgid "_Username:"
+msgstr "_Username:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "J_apan server:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "Use _Yahoo Japan"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Ignore conference and chatroom invitations"
+msgstr "_Ignore conference and chat room invitations"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Room List locale:"
+msgstr "_Room List locale:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:226
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:230
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>No Account Selected</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:238
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:244
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>No Accounts Configured</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:425
+msgid "Enabled"
+msgstr "Enabled"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:435
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Accounts"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:918
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:924
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>New Account</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Settings</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "Cr_eate"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Type:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:458
+msgid "Select Your Avatar Image"
+msgstr "Select Your Avatar Image"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:461
+msgid "No Image"
+msgstr "No Image"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:521
+msgid "Images"
+msgstr "Images"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:525
+msgid "All Files"
+msgstr "All Files"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Click to enlarge"
+
+#: ../libempathy-gtk/empathy-chat.c:282 ../src/empathy.c:70
+#: ../src/empathy-call-window.c:355
+msgid "Disconnected"
+msgstr "Disconnected"
+
+#: ../libempathy-gtk/empathy-chat.c:558
+msgid "offline"
+msgstr "offline"
+
+#: ../libempathy-gtk/empathy-chat.c:561
+msgid "invalid contact"
+msgstr "invalid contact"
+
+#: ../libempathy-gtk/empathy-chat.c:564
+msgid "permission denied"
+msgstr "permission denied"
+
+#: ../libempathy-gtk/empathy-chat.c:567
+msgid "too long message"
+msgstr "too long message"
+
+#: ../libempathy-gtk/empathy-chat.c:570
+msgid "not implemented"
+msgstr "not implemented"
+
+#: ../libempathy-gtk/empathy-chat.c:573
+msgid "unknown"
+msgstr "unknown"
+
+#: ../libempathy-gtk/empathy-chat.c:577
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Error sending message '%s': %s"
+
+#: ../libempathy-gtk/empathy-chat.c:607
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Topic set to: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:609
+msgid "No topic defined"
+msgstr "No topic defined"
+
+#: ../libempathy-gtk/empathy-chat.c:1112
+msgid "Insert Smiley"
+msgstr "Insert Smiley"
+
+#: ../libempathy-gtk/empathy-chat.c:1159
+msgid "_Check Word Spelling..."
+msgstr "_Check Word Spelling..."
+
+#: ../libempathy-gtk/empathy-chat.c:1256
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s has joined the room"
+
+#: ../libempathy-gtk/empathy-chat.c:1259
+#, c-format
+msgid "%s has left the room"
+msgstr "%s has left the room"
+
+#: ../libempathy-gtk/empathy-chat.c:1714
+msgid "Connected"
+msgstr "Connected"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Topic:</b>"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Group Chat"
+
+#: ../libempathy-gtk/empathy-chat-view.c:435
+msgid "_Copy Link Address"
+msgstr "_Copy Link Address"
+
+#: ../libempathy-gtk/empathy-chat-view.c:443
+msgid "_Open Link"
+msgstr "_Open Link"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:180
+msgid "Personal Information"
+msgstr "Personal Information"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+msgid "Edit Contact Information"
+msgstr "Edit Contact Information"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:186
+msgid "Contact Information"
+msgstr "Contact Information"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:281
+msgid "I would like to add you to my contact list."
+msgstr "I would like to add you to my contact list."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:305
+msgid "New Contact"
+msgstr "New Contact"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Decide _Later"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Subscription Request"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:198
+#: ../src/empathy-chat-window.glade.h:10
+msgid "_Contact"
+msgstr "_Contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:202
+msgid "_Group"
+msgstr "_Group"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+#: ../src/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_Chat"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+msgid "Chat with contact"
+msgstr "Chat with contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "Infor_mation"
+msgstr "Infor_mation"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "View contact information"
+msgstr "View contact information"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Re_name"
+msgstr "Re_name"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Rename"
+msgstr "Rename"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr "_Edit"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+msgid "Edit the groups and name for this contact"
+msgstr "Edit the groups and name for this contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "_Remove"
+msgstr "_Remove"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "Remove contact"
+msgstr "Remove contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "_Invite to Chat Room"
+msgstr "_Invite to Chat Room"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "Invite to a currently open chat room"
+msgstr "Invite to a currently open chat room"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "_Send File..."
+msgstr "_Send File..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "Send a file"
+msgstr "Send a file"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+#: ../src/empathy-main-window.glade.h:17
+msgid "_View Previous Conversations"
+msgstr "_View Previous Conversations"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+msgid "View previous conversations with this contact"
+msgstr "View previous conversations with this contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "_Call"
+msgstr "_Call"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "Start a voice or video conversation with this contact"
+msgstr "Start a voice or video conversation with this contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1472
+#, c-format
+msgid "Do you really want to remove the contact '%s' ?"
+msgstr "Do you really want to remove the contact '%s'?"
+
+#. TRUE if user wants to remove the contact. FALSE otherwise.
+#: ../libempathy-gtk/empathy-contact-list-view.c:1476
+msgid "Removing contact"
+msgstr "Removing contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1479
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Sorry, I don't want you in my contact list anymore."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1500
+#, 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-contact-list-view.c:1502
+msgid "Removing group"
+msgstr "Removing group"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:694
+msgid "Select"
+msgstr "Select"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:704
+#: ../src/empathy-main-window.c:612
+msgid "Group"
+msgstr "Group"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Client Information</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Contact Details</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Contact</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Groups</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+#: ../src/empathy-chatrooms-window.glade.h:1
+#: ../src/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Account:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Alias:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Birthday:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Client:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Contact information"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "E-mail:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Fullname:"
+
+#. Identifier to connect to Instant Messaging network
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Identifier:"
+msgstr "Identifier:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "Information requested..."
+msgstr "Information requested..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid "OS:"
+msgstr "OS:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Version:"
+msgstr "Version:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
+msgid "Web site:"
+msgstr "Web site:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+msgid "new server"
+msgstr "new server"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:516
+msgid "Server"
+msgstr "Server"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:531
+msgid "Port"
+msgstr "Port"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:544
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+msgid "Account"
+msgstr "Account"
+
+#: ../libempathy-gtk/empathy-log-window.c:504 ../src/empathy-chat-window.c:279
+msgid "Conversation"
+msgstr "Conversation"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+msgid "Date"
+msgstr "Date"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Conversations"
+msgstr "Conversations"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Previous Conversations"
+msgstr "Previous Conversations"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:5
+msgid "Search"
+msgstr "Search"
+
+#. Searching *for* something
+#: ../libempathy-gtk/empathy-log-window.glade.h:7
+msgid "_For:"
+msgstr "_For:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Call"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+#: ../src/empathy-chat-window.glade.h:2
+msgid "Chat"
+msgstr "Chat"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "Contact ID:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "New Conversation"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Custom messages..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Custom message"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Message:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Save message"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Status:"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:88
+msgid "Word"
+msgstr "Word"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:265
+msgid "Suggestions for the word"
+msgstr "Suggestions for the word"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Spell Checker"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Suggestions for the word:"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:747
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:77
+msgid "Classic"
+msgstr "Classic"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:78
+msgid "Simple"
+msgstr "Simple"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:79
+msgid "Clean"
+msgstr "Clean"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:80
+msgid "Blue"
+msgstr "Blue"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1327
+msgid "Unable to open uri"
+msgstr "Unable to open URI"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Current Locale"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Arabic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Armenian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Baltic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Celtic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Central European"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Chinese Simplified"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Chinese Traditional"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Croatian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Cyrillic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Cyrillic/Russian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Cyrillic/Ukrainian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Georgian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Greek"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Gujarati"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Hebrew"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Hebrew Visual"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Icelandic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Japanese"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Korean"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Nordic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Persian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Romanian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "South European"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Thai"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Turkish"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Western"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnamese"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+"The contact to display in the applet. Empty means no contact is displayed."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "The contact's avatar token. Empty means contact has no avatar."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megaphone"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Talk!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_About"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Information"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+#: ../src/empathy-main-window.glade.h:15
+msgid "_Preferences"
+msgstr "_Preferences"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Presence"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:106
+msgid "Set your own presence"
+msgstr "Set your own presence"
+
+#: ../src/empathy.c:73
+msgid "Invalid handle"
+msgstr "Invalid handle"
+
+#: ../src/empathy.c:76
+msgid "No matching connection"
+msgstr "No matching connection"
+
+#: ../src/empathy.c:79
+msgid "Invalid account"
+msgstr "Invalid account"
+
+#: ../src/empathy.c:82
+msgid "Presence failure"
+msgstr "Presence failure"
+
+#: ../src/empathy.c:85
+msgid "No accounts"
+msgstr "No accounts"
+
+#: ../src/empathy.c:88 ../src/empathy-main-window.c:905
+msgid "Network error"
+msgstr "Network error"
+
+#: ../src/empathy.c:91
+msgid "Contact does not support voice"
+msgstr "Contact does not support voice"
+
+#: ../src/empathy.c:94
+msgid "Lowmem"
+msgstr "Lowmem"
+
+#: ../src/empathy.c:97
+msgid "Channel request generic error"
+msgstr "Channel request generic error"
+
+#: ../src/empathy.c:100
+msgid "Channel banned"
+msgstr "Channel banned"
+
+#: ../src/empathy.c:103
+msgid "Channel full"
+msgstr "Channel full"
+
+#: ../src/empathy.c:106
+msgid "Channel invite only"
+msgstr "Channel invite only"
+
+#: ../src/empathy.c:109
+msgid "Unknown error code"
+msgstr "Unknown error code"
+
+#: ../src/empathy.c:318
+msgid "Don't connect on startup"
+msgstr "Don't connect on startup"
+
+#: ../src/empathy.c:330
+msgid "- Empathy Instant Messenger"
+msgstr "- Empathy Instant Messenger"
+
+#: ../src/empathy-about-dialog.c:64
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public Licence as published by the Free Software "
+"Foundation; either version 2 of the Licence, or (at your option) any later "
+"version."
+
+#: ../src/empathy-about-dialog.c:68
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public Licence for more "
+"details."
+
+#: ../src/empathy-about-dialog.c:72
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"You should have received a copy of the GNU General Public Licence along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+
+#: ../src/empathy-about-dialog.c:100
+msgid "An Instant Messaging client for GNOME"
+msgstr "An Instant Messaging client for GNOME"
+
+#: ../src/empathy-about-dialog.c:106
+msgid "translator-credits"
+msgstr "David Lodge <dave@cirt.net>"
+
+#: ../src/empathy-call-window.c:329
+msgid "Empathy Call"
+msgstr "Empathy Call"
+
+#: ../src/empathy-call-window.c:330
+msgid "Readying"
+msgstr "Readying"
+
+#: ../src/empathy-call-window.c:341
+#, c-format
+msgid "%s - Empathy Call"
+msgstr "%s - Empathy Call"
+
+#: ../src/empathy-call-window.c:345
+msgid "Ringing"
+msgstr "Ringing"
+
+#: ../src/empathy-call-window.c:357
+msgid "Connecting"
+msgstr "Connecting"
+
+#: ../src/empathy-call-window.c:386
+msgid "Closed"
+msgstr "Closed"
+
+#. Output video label
+#: ../src/empathy-call-window.c:446
+msgid "No video output"
+msgstr "No video output"
+
+#: ../src/empathy-call-window.glade.h:1
+msgid "<b>Volume</b>"
+msgstr "<b>Volume</b>"
+
+#: ../src/empathy-call-window.glade.h:2
+msgid "End Call"
+msgstr "End Call"
+
+#: ../src/empathy-call-window.glade.h:3
+msgid "Send Video"
+msgstr "Send Video"
+
+#: ../src/empathy-call-window.glade.h:4
+msgid "Start Call"
+msgstr "Start Call"
+
+#: ../src/empathy-chat-window.c:319
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Conversations (%d)"
+
+#: ../src/empathy-chat-window.c:386
+msgid "Topic:"
+msgstr "Topic:"
+
+#: ../src/empathy-chat-window.c:389
+msgid "Typing a message."
+msgstr "Typing a message."
+
+#: ../src/empathy-chat-window.glade.h:1
+msgid "C_lear"
+msgstr "C_lear"
+
+#: ../src/empathy-chat-window.glade.h:3
+msgid "Insert _Smiley"
+msgstr "Insert _Smiley"
+
+#: ../src/empathy-chat-window.glade.h:4
+msgid "Invitation _message:"
+msgstr "Invitation _message:"
+
+#: ../src/empathy-chat-window.glade.h:5
+msgid "Invite"
+msgstr "Invite"
+
+#: ../src/empathy-chat-window.glade.h:6
+msgid "Move Tab _Left"
+msgstr "Move Tab _Left"
+
+#: ../src/empathy-chat-window.glade.h:7
+msgid "Move Tab _Right"
+msgstr "Move Tab _Right"
+
+#: ../src/empathy-chat-window.glade.h:8
+msgid "Select who would you like to invite:"
+msgstr "Select who would you like to invite:"
+
+#: ../src/empathy-chat-window.glade.h:9
+msgid "You have been invited to join a chat conference."
+msgstr "You have been invited to join a chat conference."
+
+#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10
+msgid "_Contents"
+msgstr "_Contents"
+
+#: ../src/empathy-chat-window.glade.h:12
+msgid "_Conversation"
+msgstr "_Conversation"
+
+#: ../src/empathy-chat-window.glade.h:13
+msgid "_Detach Tab"
+msgstr "_Detach Tab"
+
+#: ../src/empathy-chat-window.glade.h:15 ../src/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr "_Help"
+
+#: ../src/empathy-chat-window.glade.h:16
+msgid "_Next Tab"
+msgstr "_Next Tab"
+
+#: ../src/empathy-chat-window.glade.h:17
+msgid "_Previous Tab"
+msgstr "_Previous Tab"
+
+#: ../src/empathy-chat-window.glade.h:18
+msgid "_Tabs"
+msgstr "_Tabs"
+
+#: ../src/empathy-chat-window.glade.h:19
+msgid "gtk-close"
+msgstr "gtk-close"
+
+#: ../src/empathy-chat-window.glade.h:20
+msgid "gtk-copy"
+msgstr "gtk-copy"
+
+#: ../src/empathy-chat-window.glade.h:21
+msgid "gtk-cut"
+msgstr "gtk-cut"
+
+#: ../src/empathy-chat-window.glade.h:22
+msgid "gtk-paste"
+msgstr "gtk-paste"
+
+#: ../src/empathy-chatrooms-window.c:262
+msgid "Name"
+msgstr "Name"
+
+#: ../src/empathy-chatrooms-window.c:280
+msgid "Room"
+msgstr "Room"
+
+#: ../src/empathy-chatrooms-window.c:289
+msgid "Auto Connect"
+msgstr "Auto-Connect"
+
+#: ../src/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Edit Favourite Room"
+
+#: ../src/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Join room on start_up"
+
+#: ../src/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Join this chat room when Empathy starts and you are connected"
+
+#: ../src/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Manage Favourite Rooms"
+
+#: ../src/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "N_ame:"
+
+#: ../src/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "S_erver:"
+
+#: ../src/empathy-chatrooms-window.glade.h:9
+#: ../src/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Room:"
+
+#: ../src/empathy-filter.c:217
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"New message from %s:\n"
+"%s"
+
+#: ../src/empathy-filter.c:275
+#, c-format
+msgid "Incoming call from %s"
+msgstr "Incoming call from %s"
+
+#: ../src/empathy-filter.c:333
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Subscription requested by %s"
+
+#: ../src/empathy-filter.c:336
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Message: %s"
+
+#. Tell the user that the tube can't be handled
+#: ../src/empathy-filter.c:445
+#, c-format
+msgid ""
+"%s offered you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+"%s offered you an invitation, but you don't have the needed external "
+"application to handle it."
+
+#: ../src/empathy-filter.c:454
+msgid "Invitation Error"
+msgstr "Invitation Error"
+
+#: ../src/empathy-filter.c:564
+#, c-format
+msgid ""
+"%s is offering you an invitation. An external application will be started to "
+"handle it."
+msgstr ""
+"%s is offering you an invitation. An external application will be started to "
+"handle it."
+
+#: ../src/empathy-filter.c:569
+#, c-format
+msgid ""
+"%s is offering you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+"%s is offering you an invitation, but you don't have the needed external "
+"application to handle it."
+
+#: ../src/empathy-main-window.c:271
+msgid "Show and edit accounts"
+msgstr "Show and edit accounts"
+
+#: ../src/empathy-main-window.c:633
+msgid "Contact"
+msgstr "Contact"
+
+#: ../src/empathy-main-window.c:822
+msgid "_Edit account"
+msgstr "_Edit account"
+
+#: ../src/empathy-main-window.c:908
+msgid "Authentication failed"
+msgstr "Authentication failed"
+
+#: ../src/empathy-main-window.c:911
+msgid "Encryption error"
+msgstr "Encryption error"
+
+#: ../src/empathy-main-window.c:914
+msgid "Name in use"
+msgstr "Name in use"
+
+#: ../src/empathy-main-window.c:917
+msgid "Certificate not provided"
+msgstr "Certificate not provided"
+
+#: ../src/empathy-main-window.c:920
+msgid "Certificate untrusted"
+msgstr "Certificate untrusted"
+
+#: ../src/empathy-main-window.c:923
+msgid "Certificate expired"
+msgstr "Certificate expired"
+
+#: ../src/empathy-main-window.c:926
+msgid "Certificate not activated"
+msgstr "Certificate not activated"
+
+#: ../src/empathy-main-window.c:929
+msgid "Certificate hostname mismatch"
+msgstr "Certificate hostname mismatch"
+
+#: ../src/empathy-main-window.c:932
+msgid "Certificate fingerprint mismatch"
+msgstr "Certificate fingerprint mismatch"
+
+#: ../src/empathy-main-window.c:935
+msgid "Certificate self signed"
+msgstr "Certificate self-signed"
+
+#: ../src/empathy-main-window.c:938
+msgid "Certificate error"
+msgstr "Certificate error"
+
+#: ../src/empathy-main-window.c:941
+msgid "Unknown error"
+msgstr "Unknown error"
+
+#: ../src/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Contact List"
+
+#: ../src/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Context"
+
+#: ../src/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Join _Favourites"
+
+#: ../src/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Join _New..."
+
+#: ../src/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Manage Favourites"
+
+#: ../src/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Show _Offline Contacts"
+
+#: ../src/empathy-main-window.glade.h:7
+msgid "_Accounts"
+msgstr "_Accounts"
+
+#: ../src/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "_Add Contact..."
+
+#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_New Conversation..."
+
+#: ../src/empathy-main-window.glade.h:14
+msgid "_Personal Information"
+msgstr "_Personal Information"
+
+#: ../src/empathy-main-window.glade.h:16
+msgid "_Room"
+msgstr "_Room"
+
+#: ../src/empathy-main-window.glade.h:18
+msgid "gtk-about"
+msgstr "gtk-about"
+
+#: ../src/empathy-main-window.glade.h:19
+msgid "gtk-quit"
+msgstr "gtk-quit"
+
+#: ../src/empathy-new-chatroom-dialog.c:290
+msgid "Chat Rooms"
+msgstr "Chat Rooms"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Browse:"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Enter the room name to join here or click on one or more rooms in the list."
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Join"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Join New"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "Re_fresh"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"This list represents all chat rooms hosted on the server you have entered."
+
+#: ../src/empathy-preferences.c:269
+msgid "Language"
+msgstr "Language"
+
+#: ../src/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Appearance</b>"
+
+#: ../src/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Audio</b>"
+
+#: ../src/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Behaviour</b>"
+
+#: ../src/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Contact List</b>"
+
+#: ../src/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Enable spell checking for languages:</b>"
+
+#: ../src/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Options</b>"
+
+#: ../src/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Visual</b>"
+
+#: ../src/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+
+#: ../src/empathy-preferences.glade.h:9
+msgid "Automatically _connect on startup "
+msgstr "Automatically _connect on startup "
+
+#: ../src/empathy-preferences.glade.h:10
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "Avatars are user chosen images shown in the contact list"
+
+#: ../src/empathy-preferences.glade.h:11
+msgid "Chat Th_eme:"
+msgstr "Chat Th_eme:"
+
+#: ../src/empathy-preferences.glade.h:12
+msgid "Display notifications when contacts come _online"
+msgstr "Display notifications when contacts come _online"
+
+#: ../src/empathy-preferences.glade.h:13
+msgid "Enable sounds when _away"
+msgstr "Enable sounds when _away"
+
+#: ../src/empathy-preferences.glade.h:14
+msgid "Enable sounds when _busy"
+msgstr "Enable sounds when _busy"
+
+#: ../src/empathy-preferences.glade.h:15
+msgid "General"
+msgstr "General"
+
+#: ../src/empathy-preferences.glade.h:16
+msgid "Notifications"
+msgstr "Notifications"
+
+#: ../src/empathy-preferences.glade.h:17
+msgid "Preferences"
+msgstr "Preferences"
+
+#: ../src/empathy-preferences.glade.h:18
+msgid "Show _avatars"
+msgstr "Show _avatars"
+
+#: ../src/empathy-preferences.glade.h:19
+msgid "Show _smileys as images"
+msgstr "Show _smileys as images"
+
+#: ../src/empathy-preferences.glade.h:20
+msgid "Show co_mpact contact list"
+msgstr "Show co_mpact contact list"
+
+#: ../src/empathy-preferences.glade.h:21
+msgid "Sort by _name"
+msgstr "Sort by _name"
+
+#: ../src/empathy-preferences.glade.h:22
+msgid "Sort by s_tate"
+msgstr "Sort by s_tate"
+
+#: ../src/empathy-preferences.glade.h:23
+msgid "Spell Checking"
+msgstr "Spell Checking"
+
+#: ../src/empathy-preferences.glade.h:24
+msgid "Themes"
+msgstr "Themes"
+
+#: ../src/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Open new chats in separate windows"
+
+#: ../src/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "_Play sound when messages arrive"
+
+#: ../src/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "_Use for chat rooms"
+
+#: ../src/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Status"
+
+#: ../src/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Quit"
+
+#: ../src/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Show Contact List"
+
+#~ msgid "ICQ account settings"
+#~ msgstr "ICQ account settings"
+
+#~ msgid "irc account settings"
+#~ msgstr "irc account settings"
+
+#~ msgid "jabber account settings"
+#~ msgstr "jabber account settings"
+
+#~ msgid "msn account settings"
+#~ msgstr "msn account settings"
+
+#~ msgid "salut account settings"
+#~ msgstr "Salut account settings"
+
+#~ msgid "Yahoo! account settings"
+#~ msgstr "Yahoo! account settings"
+
+#~ msgid "Input"
+#~ msgstr "Input"
+
+#~ msgid "Mute"
+#~ msgstr "Mute"
+
+#~ msgid "Output"
+#~ msgstr "Output"
+
+#~ msgid "Volume"
+#~ msgstr "Volume"
+
+#~ msgid "Ca_ll"
+#~ msgstr "Ca_ll"
+
+#~ msgid "Change _Topic..."
+#~ msgstr "Change _Topic..."
+
+#~ msgid "Contact Infor_mation"
+#~ msgstr "Contact Infor_mation"
+
+#~ msgid "Cu_t"
+#~ msgstr "Cu_t"
+
+#~ msgid "In_vite..."
+#~ msgstr "In_vite..."
+
+#~ msgid "_Add To Favorites"
+#~ msgstr "_Add To Favourites"
+
+#~ msgid "_Copy"
+#~ msgstr "_Copy"
+
+#~ msgid "_Paste"
+#~ msgstr "_Paste"
+
+#~ msgid "_Show Contacts"
+#~ msgstr "_Show Contacts"
+
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Enter the new topic you want to set for this room:"
+
+#~ msgid "%s went offline"
+#~ msgstr "%s went offline"
+
+#~ msgid "%s has come online"
+#~ msgstr "%s has come online"
+
+#, fuzzy
+#~ msgid "Instant Messenger"
+#~ msgstr "- Empathy Instant Messenger"
+
+#~ msgid "Contact List - Empathy"
+#~ msgstr "Contact List - Empathy"
+
+#~ msgid "_New Message..."
+#~ msgstr "_New Message..."
+
+#~ msgid "Disable"
+#~ msgstr "Disable"
+
+#~ msgid "<b>Account</b>"
+#~ msgstr "<b>Account</b>"
+
+#~ msgid "A unique name for this account to identify it personally to you."
+#~ msgstr "A unique name for this account to identify it personally to you."
+
+#~ msgid "Imendio "
+#~ msgstr "Imendio "
+
+#~ msgid ""
+#~ "<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+#~ "small>"
+#~ msgstr ""
+#~ "<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+#~ "small>"
+
+#~ msgid "Chat Room"
+#~ msgstr "Chat Room"
+
+#~ msgid "<b>Languages</b>"
+#~ msgstr "<b>Languages</b>"
+
+#~ msgid "_Enable spell checking"
+#~ msgstr "_Enable spell checking"
+
+#~ msgid "Clear List..."
+#~ msgstr "Clear List..."
+
+#~ msgid "Are you sure you want to clear the list?"
+#~ msgstr "Are you sure you want to clear the list?"
+
+#~ msgid ""
+#~ "This will remove any custom messages you have added to the list of preset "
+#~ "status messages."
+#~ msgstr ""
+#~ "This will remove any custom messages you have added to the list of preset "
+#~ "status messages."
+
+#~ msgid "Clear List"
+#~ msgstr "Clear List"
+
+#~ msgid "Enter status message:"
+#~ msgstr "Enter status message:"
+
+#~ msgid "Status Message Presets"
+#~ msgstr "Status Message Presets"
+
+#~ msgid "_Add to status message list"
+#~ msgstr "_Add to status message list"
+
+#~ msgid "-"
+#~ msgstr "-"
+
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Personal Details</b>"
+
+#~ msgid "<b>Status</b>"
+#~ msgstr "<b>Status</b>"
+
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>Subscription</b>"
+
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+
+#~ msgid ""
+#~ "<span size=\"smaller\">Note: You must select an account if the contact is "
+#~ "unknown</span>"
+#~ msgstr ""
+#~ "<span size=\"smaller\">Note: You must select an account if the contact is "
+#~ "unknown</span>"
+
+#~ msgid "Accou_nt:"
+#~ msgstr "Accou_nt:"
+
+#~ msgid "Add Contact"
+#~ msgstr "Add Contact"
+
+#~ msgid "Avatar:"
+#~ msgstr "Avatar:"
+
+#~ msgid "C_hange"
+#~ msgstr "C_hange"
+
+#~ msgid "Ch_at"
+#~ msgstr "Ch_at"
+
+#~ msgid "Contact List - Gossip"
+#~ msgstr "Contact List - Gossip"
+
+#~ msgid "Contacts"
+#~ msgstr "Contacts"
+
+#~ msgid "Country:"
+#~ msgstr "Country:"
+
+#~ msgid "Edit Groups"
+#~ msgstr "Edit Groups"
+
+#~ msgid "ID:"
+#~ msgstr "ID:"
+
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+
+#~ msgid "Personal Details"
+#~ msgstr "Personal Details"
+
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+
+#~ msgid ""
+#~ "This acts as a filter to the contact list below.\n"
+#~ "\n"
+#~ "You can use segments of contact's name or ID, for example, \"jabber.org\" "
+#~ "will list everyone using that server.\n"
+#~ "\n"
+#~ "You can also use the name of a group to show only contacts in a specific "
+#~ "group."
+#~ msgstr ""
+#~ "This acts as a filter to the contact list below.\n"
+#~ "\n"
+#~ "You can use segments of contact's name or ID, for example, \"jabber.org\" "
+#~ "will list everyone using that server.\n"
+#~ "\n"
+#~ "You can also use the name of a group to show only contacts in a specific "
+#~ "group."
+
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "This is the name that will be used on your roster for this contact"
+
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "This name will be used to identify you in chat windows"
+
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+
+#~ msgid "Use default name here from the contact's VCard."
+#~ msgstr "Use default name here from the contact's VCard."
+
+#~ msgid "Use system pro_xy"
+#~ msgstr "Use system pro_xy"
+
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Which account do you want to use?"
+
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "You are not subscribed to this contact."
+
+#~ msgid "_Accept"
+#~ msgstr "_Accept"
+
+#~ msgid "_Birthday:"
+#~ msgstr "_Birthday:"
+
+#~ msgid "_Deny"
+#~ msgstr "_Deny"
+
+#~ msgid "_Description:"
+#~ msgstr "_Description:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Disconnect"
+
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+
+#~ msgid "_Group:"
+#~ msgstr "_Group:"
+
+#~ msgid "_Nick Name:"
+#~ msgstr "_Nick Name:"
+
+#~ msgid "_Password:"
+#~ msgstr "_Password:"
+
+#~ msgid "_Retrieve"
+#~ msgstr "_Retrieve"
+
+#~ msgid "_Search"
+#~ msgstr "_Search"
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Subscribe"
+
+#~ msgid "_Web site:"
+#~ msgstr "_Web site:"
diff --git a/trunk/po/eo.po b/trunk/po/eo.po
new file mode 100644
index 000000000..25baefbec
--- /dev/null
+++ b/trunk/po/eo.po
@@ -0,0 +1,1921 @@
+# Esperanto translation of Gossip
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Brient Hess <brient@brient.net>, 2004.
+#
+# This file is distributed under the same license as the Gossip package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Gossip 0.7.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2004-05-29 12:22-0900\n"
+"Last-Translator: Brient Hess <brient@brient.net>\n"
+"Language-Team: Esperanto Team (inactive?) <eo@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Tujmesaĝilo"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Tujmesaĝilo"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "Aldonu al vi kontaktlisto"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+#, fuzzy
+msgid "Enable sound when away"
+msgstr "Invalidu sonoj dum _fora"
+
+#: ../data/empathy.schemas.in.h:9
+#, fuzzy
+msgid "Enable sound when busy"
+msgstr "Invalidu sonoj dum _okupita"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Gossip - Sendu Mesaĝo"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Kaŝu precipa fenestro"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Kaŝu la precipa fenestro."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "_Montru Kontaktlisto"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "La alteco de la precipa fenestro."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Vidigu ne kontaktebloj"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Uzas grafika ridetoj"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Uzas anoncadaj sonoj"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Ĉu konverti ridetoj al iĝi grafika bildo en konversacioj."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Ĉu ludu iu sono kiam mesaĝoj alvenas."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Ĉu ludu sonoj dum fora."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Ĉu ludu sonoj dum okupita."
+
+#: ../data/empathy.schemas.in.h:28
+#, fuzzy
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Ĉu ludu iu sono kiam mesaĝoj alvenas."
+
+#: ../data/empathy.schemas.in.h:29
+#, fuzzy
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Ĉu montru kontaktoj kiun estas ne kontaktebla en la kontaktlisto."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Ĉu montru kontaktoj kiun estas ne kontaktebla en la kontaktlisto."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Ĉu montru kontaktoj kiun estas ne kontaktebla en la kontaktlisto."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Ne kontaktebla"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Ricevebla"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Okupita"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Fora"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Montru Kontaktlisto"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Grupo"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "_Aldonu Kontakto..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "_Kaŝu Kontaktlisto"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "Konektu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "Editu favoratoj..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "_Vidigu Ne Kontaktebloj"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Akceptu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+#, fuzzy
+msgid "_Accounts"
+msgstr "_Akceptu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "_Aldonu Kontakto..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Babilu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "Konektu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "_Edit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Nova Mesaĝo..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+#, fuzzy
+msgid "_Personal Information"
+msgstr "Persona Informaĵo"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Agordo"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+#, fuzzy
+msgid "_Room"
+msgstr "_Ejo:"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "_View Previous Conversations"
+msgstr "_Konversacio"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Stato"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Montru Kontaktlisto"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+#, fuzzy
+msgid "An Instant Messaging client for GNOME"
+msgstr "Gossip, Tujmesaĝilo"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr "Brient Hess"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Ricevebla"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Favorata:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Favorata:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+#, fuzzy
+msgid "Accounts"
+msgstr "Jabber Konto"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "<b>Favorata:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Favorata:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "Stato"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Babilo"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "Nomo:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "_Temo:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">Ekzemplo: uzanto@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "_Pasvorto:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+#, fuzzy
+msgid "Reso_urce:"
+msgstr "_Rimedero:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "_Uzu ĉifrado (SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "_Konektilo:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Servilo:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Malkonektis"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "Konektis"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Forviŝu"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Babilo"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+#, fuzzy
+msgid "Contact Infor_mation"
+msgstr "Kontakto _Informaĵo"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "Babilo"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "Re_gistrigu..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Enskribu stata mesaĝo:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Movu Tabo _Maldekstre"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Movu Tabo _Dekstre"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+#, fuzzy
+msgid "_Add To Favorites"
+msgstr "Editu favoratoj..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Konversacio"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Deigu Tabo"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "_Posta Tabo"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "_Antaŭa Tabo"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+#, fuzzy
+msgid "_Show Contacts"
+msgstr "_Montru Kontaktlisto"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Taboj"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Kopiu Ligo Adreso"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Malfermu Ligo"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "_Nova Mesaĝo..."
+msgstr[1] "_Nova Mesaĝo..."
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Gossip - Babilo"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "_Konversacio"
+msgstr[1] "_Konversacio"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "_Aldonu Kontakto..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "Grupo"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "Aldonu iu kontakto"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "Kontakto _Informaĵo"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "Kontakto informaĵo"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/Re_nomu grupo"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "Uzanto_nomo:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr ""
+"Bonvolu enigu novan kromnomon por la kontakto\n"
+"%s"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "_Forigu"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/Forti_ru kontakto"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "Gossip - Editu Grupbabiloj"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "Elektu"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "_Konversacio"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "Aspekto"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>Favorata:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Favorata:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "Stato"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "Konektu"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>Favorata:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+#, fuzzy
+msgid "Chat Th_eme:"
+msgstr "Babilo _nomo:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+#, fuzzy
+msgid "Enable sounds when _away"
+msgstr "Invalidu sonoj dum _fora"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+#, fuzzy
+msgid "Enable sounds when _busy"
+msgstr "Invalidu sonoj dum _okupita"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "Uzas anoncadaj sonoj"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "_Agordo"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+#, fuzzy
+msgid "Show _smileys as images"
+msgstr "Konvertu _ridetoj al iĝi grafikaj bildoj"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "_Montru Kontaktlisto"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+#, fuzzy
+msgid "_Play sound when messages arrive"
+msgstr "Ludu sono kiam mesaĝoj alveni"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "Gossip - Editu Grupbabiloj"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+#, fuzzy
+msgid "Custom message..."
+msgstr "Petomesaĝo"
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "_Forviŝu"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "Ĉu vi deziras akcepti la peton?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+#, fuzzy
+msgid "Clear List"
+msgstr "_Forviŝu"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Enskribu stata mesaĝo:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "Stato Mesaĝoj"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "Savis stato mesaĝoj"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s estinta ne kontaktebla"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, fuzzy, c-format
+msgid "%s has come online"
+msgstr "%s estanta kontaktebla"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "_Forviŝu"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Ne konekti dum lanĉo"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "Tujmesaĝilo"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Tujmesaĝilo"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "_Kuniĝu"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "Nekonata eraro"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Uzas anoncadaj sonoj"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Nekonata eraro"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Ricevebla"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Nekonata eraro"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "Konektis"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "Konektis"
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Jabber Konto"
+
+#~ msgid "Home"
+#~ msgstr "Hejmo"
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Registrigas konto"
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "_Malkonektu"
+
+#~ msgid "Connect"
+#~ msgstr "Konektu"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Sukcesus registrigi la konto"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Malsukcesus registrigi la konto"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Bonvolu enigu vin pasvorton:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Bonvolu enigu vin pasvorton:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Bonvolu enigu novan nomon por la grupo\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Information requested, please wait..."
+#~ msgstr "<b>Informaĵo petis, Bonvolu atendi...</b>"
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Mi deziras aldoni vin al mia kontaktlisto."
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "_Nova Mesaĝo..."
+#~ msgstr[1] "_Nova Mesaĝo..."
+
+#, fuzzy
+#~ msgid "Edit Account _Details"
+#~ msgstr "Editu Konto Informaĵo"
+
+#~ msgid "New message from %s"
+#~ msgstr "Nova mesaĝo el %s"
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "_Akceptu"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Nomo:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Ejo:"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "Konektu"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "<b>Informaĵo petis, Bonvolu atendi...</b>"
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "Vi deziras fortiri la kontakto%s\n"
+#~ "de vi kontaktlisto?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Bonvolu enigu novan nomon por la grupo\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Elektu"
+
+#~ msgid "Unsorted"
+#~ msgstr "Malklasa"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Nekonata eraro"
+
+#, fuzzy
+#~ msgid "%s would like to send you a file."
+#~ msgstr "Mi deziras aldoni vin al mia kontaktlisto."
+
+#, fuzzy
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Mi deziras aldoni vin al mia kontaktlisto."
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "Elektu"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "_Konektu..."
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Konektu"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Kio kromnomo vi deziras uzi por tio kontakto?"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "_Temo:"
+
+#, fuzzy
+#~ msgid "Account"
+#~ msgstr "Jabber Konto"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "_Konversacio"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Listigu la disponeblaj kontoj"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Tio konto al konekti dum lanĉo"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "KONTO-NOMO"
+
+#~ msgid "Available accounts:"
+#~ msgstr "Disponeblaj kontoj:"
+
+#~ msgid "[default]"
+#~ msgstr "[defaŭlto]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Ne estas konto nomas '%s'."
+
+#, fuzzy
+#~ msgid "Join"
+#~ msgstr "_Kuniĝu"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Babilo"
+
+#, fuzzy
+#~ msgid "Chat Rooms"
+#~ msgstr "Gossip - Babilo"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "<b>Informaĵo petis, Bonvolu atendi...</b>"
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "[defaŭlto]"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "Babilo"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s aldonos al vi kontaktlisto."
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "%s aldonos al vi kontaktlisto."
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "Sendas peto"
+
+#, fuzzy
+#~ msgid "Contact Information"
+#~ msgstr "Kontakto _Informaĵo"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr ""
+#~ "Vi deziras fortiri la kontakto%s\n"
+#~ "de vi kontaktlisto?"
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr ""
+#~ "Vi deziras fortiri la kontakto%s\n"
+#~ "de vi kontaktlisto?"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Bonvolu enigu vin pasvorton:"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Memoru Pasvorto?"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Babilo"
+
+#, fuzzy
+#~ msgid "Contact goes online"
+#~ msgstr "%s estanta kontaktebla"
+
+#, fuzzy
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Ĉu vi deziras akcepti la peton?"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "Uzanto_nomo:"
+
+#, fuzzy
+#~ msgid "File size:"
+#~ msgstr "TTT-ejo:"
+
+#~ msgid "Web site:"
+#~ msgstr "TTT-ejo:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Akceptu"
+
+#~ msgid "_Deny"
+#~ msgstr "_Neu"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Favorata:</b>"
+
+#, fuzzy
+#~ msgid "Account:"
+#~ msgstr "Jabber Konto"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Gossip - Editu Grupbabiloj"
+
+#, fuzzy
+#~ msgid "Group Chat"
+#~ msgstr "Gossip - Babilo"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "_Kuniĝu"
+
+#, fuzzy
+#~ msgid "Join room on start_up"
+#~ msgstr "Ne konekti dum lanĉo"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "Nomo:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "Servilo:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "Krom_nomo:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Ejo:"
+
+#, fuzzy
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Favorata:</b>"
+
+#, fuzzy
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "Informaĵo pri Babililo "
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Favorata:</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "Stato"
+
+#, fuzzy
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Konto Elektoj</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "Konektu"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Ekzemplo: uzanto@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Jabber Konto"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "_Aldonu Kontakto..."
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "Babilo"
+
+# babililo = chat-tool
+#~ msgid "Client:"
+#~ msgstr "Babililo:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "_Aldonu Kontakto..."
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Ne konekti dum lanĉo"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "_Aldonu Kontakto..."
+
+#~ msgid "Country:"
+#~ msgstr "Lando:"
+
+#, fuzzy
+#~ msgid "Decide _Later"
+#~ msgstr "_Decidi pli Poste"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "_Aldonu Kontakto..."
+
+#~ msgid "Edit Groups"
+#~ msgstr "Editu Grupoj"
+
+#~ msgid "Email:"
+#~ msgstr "Retpoŝto:"
+
+#, fuzzy
+#~ msgid "ID:"
+#~ msgstr "JID"
+
+#~ msgid "Name:"
+#~ msgstr "Nomo:"
+
+#~ msgid "OS:"
+#~ msgstr "Mastruma Sistemo:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "<b>Konto Elektoj</b>"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "Re_gistrigu..."
+
+#, fuzzy
+#~ msgid "Search"
+#~ msgstr "_Serĉo..."
+
+#, fuzzy
+#~ msgid "Spell Checker"
+#~ msgstr "Gossip - Sendu Mesaĝo"
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Kio kromnomo vi deziras uzi por tio kontakto?"
+
+#~ msgid "Version:"
+#~ msgstr "Versio:"
+
+#, fuzzy
+#~ msgid "View Previous Conversations"
+#~ msgstr "_Konversacio"
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Kio uzantonomo vi deziras uzi?"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Konektu"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Priskribo"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Malkonektu"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "Retpoŝto:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr "Enigu la uzantonomon de la personon vi deziras sendi iu mesaĝo."
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "_Konektilo:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "Nomo:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Grupo"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "Krom_nomo:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Pasvorto:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "_Statoj Mesaĝoj"
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "_Forigu"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "TTT-ejo:"
+
+#~ msgid "Preset status messages"
+#~ msgstr "Savis stato mesaĝoj"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Savis stato mesaĝoj."
+
+#, fuzzy
+#~ msgid "Connecting"
+#~ msgstr "Konektu"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s aldonos al vi kontaktlisto."
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "_Jabber ID de nova kontakto:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "Bonvolu enigu vin pasvorton:"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Kontakto Informaĵo por %s"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/_Informo de Kontakto"
+
+#, fuzzy
+#~ msgid "/Re_name Contact"
+#~ msgstr "/Re_nomu kontakto"
+
+#, fuzzy
+#~ msgid "/_Edit Groups"
+#~ msgstr "/_Editu grupoj"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "_Konversacio"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Bonvolu enigu novan kromnomon por la kontakto\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Editu grupoj por %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Protokolo de Konversacio"
+
+#~ msgid "Registering account"
+#~ msgstr "Registrigas konto"
+
+#, fuzzy
+#~ msgid "Respond"
+#~ msgstr "Ekspliko:"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "Editu favoratoj..."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Nomo:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Gossip - Babilo"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Informaĵo petis, Bonvolu atendi...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Ekzemplo: uzanto@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Gossip - Babilo"
+
+#, fuzzy
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Ĉu havas konton en iu Jabber servilo?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr ""
+#~ "Bonvolu enigu novan kromnomon por la kontakto\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "Bonvolu enigu novan kromnomon por la kontakto\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Agordo Finitis"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip estas iu modernan programon por la Jabber sistemo de tujmesaĝilo.\n"
+#~ "\n"
+#~ "Ĉi tion asistanton asistos vi al konfiguri Gossip, kaj konekti vi alvia "
+#~ "favorata servilo de Jabber.Por komenci, simple alklaki \"Antaŭen\"."
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "Por kotizi al avizojn de ĉeeston el la uzanto, iu peto estos sendi. Ĝis "
+#~ "la peton estas elprovita, la uzanto ĉiam vidiĝi kiel nekontaktebla el "
+#~ "viakontaktlisto."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "Ĉu grupoj vi deziras meti tiu kontakto?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "Jabber ID:"
+
+#, fuzzy
+#~ msgid "Nickname:"
+#~ msgstr "Krom_nomo:"
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "_Konektilo:"
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "Registrigas konto"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "_Rimedero:"
+
+#~ msgid "Server:"
+#~ msgstr "Servilo:"
+
+#, fuzzy
+#~ msgid "Web Site:"
+#~ msgstr "TTT-ejo:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Bonvenon al Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Kio sistemo de tujmesaĝilo ĉu la kontakto uzas?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Kio estas vi nomo?"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "Kio servilo vi deziras uzi?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Kio uzantonomo vi uzas?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Kio uzantonomo vi deziras uzi?"
+
+#, fuzzy
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "Ĉu grupoj vi deziras meti tiu kontakto?"
+
+#, fuzzy
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Gossip nun estas deca konfigura por vi sistemo.\n"
+#~ "Vi povus vian konfiguron pli poste, per selektus la Babilo->Konektu..."
+#~ "menuero."
+
+#, fuzzy
+#~ msgid "Your Account"
+#~ msgstr "Jabber Konto"
+
+#~ msgid "Your Identity"
+#~ msgstr "Vi Idento"
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "Gossip - Babilo"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Ne"
+
+#~ msgid "_Search..."
+#~ msgstr "_Serĉo..."
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Jes"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Silentu dum fora"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Silentu dum okupita"
+
+#~ msgid "Height of main window"
+#~ msgstr "Alteco de precipa fenestro"
+
+#, fuzzy
+#~ msgid "The X position of the main window."
+#~ msgstr "La iksa pozicio de la precipa fenestro."
+
+#, fuzzy
+#~ msgid "The Y position of the main window."
+#~ msgstr "La ipsilona pozicio de la precipa fenestro."
+
+#~ msgid "The width of the main window."
+#~ msgstr "La larĝeco de la precipa fenestro."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Larĝeco de la precipa fenestro"
+
+#, fuzzy
+#~ msgid "X position of main window"
+#~ msgstr "Iksa pozicio de precipa fenestro"
+
+#, fuzzy
+#~ msgid "Y position of main window"
+#~ msgstr "Ipsilona pozicio de precipa fenestro"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip, Tujmesaĝilo"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "Kaŝu la precipa fenestro."
+
+#, fuzzy
+#~ msgid "Requested Information"
+#~ msgstr "_Konto Informaĵo"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "Stato"
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "%s estinta ne kontaktebla"
+
+#~ msgid "Available..."
+#~ msgstr "Ricevebla..."
+
+#~ msgid "Busy..."
+#~ msgstr "Okupita..."
+
+#~ msgid "Away..."
+#~ msgstr "Fora..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "Kontakto _Informaĵo"
+
+#, fuzzy
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - Grupbabilo"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "Kuniĝu _Grupbabilo..."
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "_Konektilo:"
+
+#, fuzzy
+#~ msgid "Requested information."
+#~ msgstr "Informaĵo pri Babililo "
+
+#, fuzzy
+#~ msgid "Could not open connection"
+#~ msgstr "Sensukcese konekti"
+
+#, fuzzy
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "Kio servilo vi deziras uzi?"
+
+#, fuzzy
+#~ msgid "Connection to the server failed."
+#~ msgstr "<b>Konektu al servilo</b>"
+
+#~ msgid "Written by:"
+#~ msgstr "Programadis per:"
+
+#~ msgid "Artwork by:"
+#~ msgstr "Arto per:"
+
+#~ msgid "Translated by:"
+#~ msgstr "Tradukis per:"
+
+#, fuzzy
+#~ msgid "Account ID"
+#~ msgstr "_Konto Informaĵo"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sBabilo - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Montru Protoko_lo"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "Versio:"
+
+#~ msgid "View Lo_g"
+#~ msgstr "Vidu _Protokolo"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - Grupbabilo"
+
+#, fuzzy
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Aldonu kontakto"
+
+#, fuzzy
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "Kontakto _Informaĵo"
+
+#, fuzzy
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - Editu Grupbabiloj"
+
+#, fuzzy
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - Grupbabilo"
+
+#, fuzzy
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - Sendu Mesaĝo"
+
+#, fuzzy
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Gossip - Sendu Mesaĝo"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Agordoj"
+
+#, fuzzy
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - Sendu Mesaĝo"
+
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "Kio peta mesaĝo vi deziras sendi al %s?"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Kontrolu vin konton informaĵon ĉu korekta."
+
+#~ msgid "%s wants to be notified of your presence."
+#~ msgstr "%s deziras avizi da vin ĉeesto."
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Vi malkonektis de ĉi servilo. Ĉu vi deziras rekonekti?"
+
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr ""
+#~ "Kontrolu vin konton informaĵon ĉu korekta. Ankaŭ, la servilo eble estas "
+#~ "malkonekti."
+
+#~ msgid "Edit List..."
+#~ msgstr "Editu Listo..."
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "Iu eraro okazintis dum babilinta kun %s."
+
+#~ msgid "Details:"
+#~ msgstr "Detaloj:"
+
+#~ msgid "An error occurred when chatting in the group chat %s."
+#~ msgstr "Iu eraron okazis dum babilis en la grupbabilo %s."
+
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "Malsukcesis enveni la grupbabilo %s."
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip penos uzi vin konton:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Gossip penos registrigi la konton:"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "El:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Gossip - Ricevis Mesaĝo"
+
+#~ msgid "In reply to:"
+#~ msgstr "En responda pri:"
+
+#~ msgid "To:"
+#~ msgstr "Por:"
+
+#~ msgid "_Reply..."
+#~ msgstr "_Respondu..."
+
+#~ msgid "_Send"
+#~ msgstr "_Sendu"
+
+#~ msgid "C_onnect"
+#~ msgstr "K_onektu"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>Riceveblaj babilejoj</b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>Informaĵo de babilejo</b>"
+
+#~ msgid "Gossip - Join Group Chat"
+#~ msgstr "Gossip - Kuniĝu Grupbabilo"
+
+#~ msgid "N_ickname:"
+#~ msgstr "K_romnomo"
+
+#~ msgid ""
+#~ "Pick a favorite, or enter nickname, server name, and the name of the chat "
+#~ "room to enter."
+#~ msgstr ""
+#~ "Elektu iu favorata, aŭ enskribu kromnomo, la nomo de servilo, kaj la nomo "
+#~ "de la babilejo por kuniĝi."
+
+#~ msgid "R_emove"
+#~ msgstr "_Fortiru"
+
+#~ msgid "_Add"
+#~ msgstr "_Aldonu"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>Savis stata mesaĝoj</b>"
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Informaĵo ne havebla</i>"
+
+#~ msgid "Choose a Server"
+#~ msgstr "Elektu Servilo"
+
+#~ msgid "Choose from list:"
+#~ msgstr "Elektu el listo:"
+
+#~ msgid "Information about ..."
+#~ msgstr "Informaĵo pri ..."
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "Ĉu kio servilo vi havas iu konto de Jabber?"
+
+#~ msgid "Sound"
+#~ msgstr "Sono"
+
+#~ msgid "Use a different server"
+#~ msgstr "Uzas iu diferenca servilo"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Kio petomesaĝo vi deziras sendi?"
diff --git a/trunk/po/es.po b/trunk/po/es.po
new file mode 100644
index 000000000..59f98cbca
--- /dev/null
+++ b/trunk/po/es.po
@@ -0,0 +1,1838 @@
+# translation of empathy.HEAD.po to Español
+# Copyright (C) 2003 Free Software Foundation
+# This file is distributed under the same license as the Gossip package.
+#
+# Jorge González <jorgegonz@svn.gnome.org>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-01 23:23+0000\n"
+"PO-Revision-Date: 2008-05-03 11:55+0200\n"
+"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
+"Language-Team: Español <gnome-es-list@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Mensajería instantánea Empathy"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Envíe y reciba mensajes instantáneos"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Siempre abrir una ventana de chat separada para chats nuevos."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Carácter que añadir después del apodo cuando se usa el completado de apodos "
+"(tab) en salas de chat."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Tema de la ventana de charla"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should auto-connect on startup"
+msgstr "Comprueba si Empathy debe autoconectarse al inicio"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Comprueba si se debe usar NetworkManager"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Comprueba si la cuenta Salut se ha creado"
+
+#: ../data/empathy.schemas.in.h:7
+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. en, fr, nl)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Lista compacta de contactos"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Criterio de ordenamiento de la lista de contactos"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Directorio predeterminado para seleccionar un avatar"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Activar ventana emergente cuando un contacto está disponible"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Activar sonido al ausentarse"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Activar sonido cuando se esté ocupado"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Activar revisor ortográfico"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Ocultar la ventana principal"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Ocultar la ventana principal."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Carácter de completado de apodo"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Abrir chats nuevos en ventanas separadas"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Mostrar avatares"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Mostrar consejo sobre cómo cerrar la ventana principal"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Mostrar contactos no conectados"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Idiomas para revisión ortográfica"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Último directorio del que fue elegido un avatar."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "El tema que se usará para mostrar la conversación en las ventanas de chat."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Usar emoticonos gráficos"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Usar sonidos de notificación"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Usar tema para salas de chat"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically log in to your accounts on "
+"startup."
+msgstr ""
+"Indica si Empathy debe iniciar sesión en sus cuentas automáticamente al "
+"inicio."
+
+#: ../data/empathy.schemas.in.h:29
+msgid "Whether or not the Salut account has been created on the first Empathy run."
+msgstr ""
+"Indica si la cuenta Salut se ha creado cuando ejecutó por primera vez "
+"Empathy."
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"Indica si se debe usar el gestor de la red para desconectarse/reconectarse "
+"automáticamente."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Indica si se debe o no revisar las palabras tecleadas con respecto a los "
+"idiomas con los que quiere comprobarlo."
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Indica si debe o no debe convertir los emoticonos en imágenes gráficas en "
+"las conversaciones."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Indica si debe reproducir un sonido cuando lleguen mensajes."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Indica si debe o no reproducir sonidos cuando se esté ausente."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Indica si debe o no reproducir sonidos cuando esté ocupado."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+"Indica si debe o no mostrar una ventana emergente cuando un contacto vuelva "
+"a estar disponible."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Indica si debe o no mostrar los avatares para los contactos en la lista de "
+"contactos y ventanas de chat."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+"Indica si debe o no mostrar los contactos que están desconectados en la "
+"lista de contactos."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Indica si debe o no mostrar un mensaje de diálogo sobre cómo cerrar la "
+"ventana principal con el botón 'x' en la barra de título."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Indica si debe o no mostrar la lista de contactos en modo compacto."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Indica si debe o no usar el tema para salas de chat."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Qué criterio usar al ordenar la lista de contactos. El criterio "
+"predeterminado es ordenar por el nombre del contacto con el valor «nombre». "
+"Un valor «estado» ordenará la lista por el estado."
+
+#: ../libempathy/empathy-tp-contact-list.c:669 ../src/empathy.c:188
+msgid "People nearby"
+msgstr "Gente cerca"
+
+#: ../libempathy/empathy-utils.c:466
+msgid "Available"
+msgstr "Disponible"
+
+#: ../libempathy/empathy-utils.c:468
+msgid "Busy"
+msgstr "Ocupado"
+
+#: ../libempathy/empathy-utils.c:471
+msgid "Away"
+msgstr "Ausente"
+
+#: ../libempathy/empathy-utils.c:473
+msgid "Hidden"
+msgstr "Oculto"
+
+#: ../libempathy/empathy-utils.c:476
+msgid "Offline"
+msgstr "Desconectado"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:334
+msgid "All"
+msgstr "Todo"
+
+#: ../libempathy-gtk/empathy-account-widget.c:284
+#: ../libempathy-gtk/empathy-account-widget.c:329
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Avanzado</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Olvidar la contraseña y limpiar la entrada."
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "Contra_seña:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+msgid "Screen _Name:"
+msgstr "_Nombre en pantalla:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Port:"
+msgstr "_Puerto:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+#: ../src/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Servidor:"
+
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "_ID de sesión:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "_UIN ICQ:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "_Charset:"
+msgstr "Conjunto de _caracteres:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:245
+msgid "New Network"
+msgstr "Red nueva"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Red</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Servidores</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Conjunto de caracteres:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Crear una red IRC nueva"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Editar la red IRC seleccionada"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Red"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Red:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Apodo:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Contraseña:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Mensaje de salida:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Nombre real:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Quitar la red IRC seleccionada"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Sobreescribir los ajustes del servidor</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "Pri_oridad:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "Re_curso:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Usar SS_L antiguo"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "Se requiere ci_frado (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Ignorar los errores de certificados SSL"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_Email:"
+msgstr "Correo-_e:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Nombre:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "ID _Jabber:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "Ape_llidos:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../src/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Apodo:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "Nombre _publicado:"
+
+#. look up the DNS SRV record at the service's domain for the host name of a STUN server.
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+msgid "Discover STUN"
+msgstr "Descubrir STUN"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+msgid "Stun Server:"
+msgstr "Servidor Stun:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+msgid "Stun port:"
+msgstr "Puerto Stun:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+msgid "_Username:"
+msgstr "_Usuario:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "servidor j_aponés:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "User _Yahoo Japan"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Ignore conference and chatroom invitations"
+msgstr "_Ignorar invitaciones a conferencias y salas de chat"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Room List locale:"
+msgstr "Configuración de la lista de _salas:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:226
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Para añadir una cuenta nueva, pulse en el botón 'Añadir' y se creará una "
+"entrada nueva para que la configure."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:230
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"Para añadir una nueva cuenta debe instalar primero un «backend» para cada "
+"protocolo que quiera usar."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Sin cuenta seleccionada</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:238
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Si no quiere añadir una cuenta, simplemente pulse en la cuenta que quiere "
+"configurar en la lista de la izquierda."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:244
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>No hay ninguna cuenta configurada</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:424
+msgid "Enabled"
+msgstr "Activado"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:434
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Cuentas"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:916
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Va a eliminar su cuenta %s\n"
+"¿Seguro que quiere continuar?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:922
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Cualquier conversación o sala de chat asociada NO se eliminará si decide "
+"continuar.\n"
+"\n"
+"Si decidiera volver a añadir la cuenta más tarde, estarán aún disponibles."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Nueva cuenta</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Configuración</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "Cr_ear"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Para añadir una cuenta nueva, pulse en el botón de 'Añadir' y una se creará "
+"una entrada nueva para que la configure.\n"
+"\n"
+"Si no quiere añadir una cuenta, simplemente pulse en la cuenta que quiere "
+"configurar en la lista de la izquierda."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Tipo:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:457
+msgid "Select Your Avatar Image"
+msgstr "Seleccione su imagen de avatar"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:460
+msgid "No Image"
+msgstr "Sin imagen"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:520
+msgid "Images"
+msgstr "Imágenes"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:524
+msgid "All Files"
+msgstr "Todos los archivos"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:294
+msgid "Click to enlarge"
+msgstr "Pulse para agrandar"
+
+#: ../libempathy-gtk/empathy-chat.c:526
+msgid "offline"
+msgstr "desconectado"
+
+#: ../libempathy-gtk/empathy-chat.c:529
+msgid "invalid contact"
+msgstr "contacto no válido"
+
+#: ../libempathy-gtk/empathy-chat.c:532
+msgid "permission denied"
+msgstr "permiso denegado"
+
+#: ../libempathy-gtk/empathy-chat.c:535
+msgid "too long message"
+msgstr "mensaje demasiado largo"
+
+#: ../libempathy-gtk/empathy-chat.c:538
+msgid "not implemented"
+msgstr "no implementado"
+
+#: ../libempathy-gtk/empathy-chat.c:541
+msgid "unknown"
+msgstr "desconocido"
+
+#: ../libempathy-gtk/empathy-chat.c:545
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Error al enviar el mensaje «%s»: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:575
+#, c-format
+msgid "Topic set to: %s"
+msgstr "El tema se ha establecido a: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:577
+msgid "No topic defined"
+msgstr "No se ha definido el tema"
+
+#: ../libempathy-gtk/empathy-chat.c:983
+msgid "Insert Smiley"
+msgstr "Insertar emoticono"
+
+#: ../libempathy-gtk/empathy-chat.c:1030
+msgid "_Check Word Spelling..."
+msgstr "_Comprobar ortografía…"
+
+#: ../libempathy-gtk/empathy-chat.c:1131
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s ha entrado en la sala"
+
+#: ../libempathy-gtk/empathy-chat.c:1134
+#, c-format
+msgid "%s has left the room"
+msgstr "%s ha dejado la sala"
+
+#: ../libempathy-gtk/empathy-chat.c:1248 ../src/empathy.c:70
+#: ../src/empathy-call-window.c:389
+msgid "Disconnected"
+msgstr "Desconectado"
+
+#: ../libempathy-gtk/empathy-chat.c:1621
+msgid "Connected"
+msgstr "Conectado"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Tema:</b>"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Grupo de chat"
+
+#: ../libempathy-gtk/empathy-chat-view.c:433
+msgid "_Copy Link Address"
+msgstr "_Copiar la dirección del enlace"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Open Link"
+msgstr "_Abrir enlace"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:180
+msgid "Personal Information"
+msgstr "Información personal"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+msgid "Edit Contact Information"
+msgstr "Editar información del contacto"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:186
+msgid "Contact Information"
+msgstr "Información del contacto"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:281
+msgid "I would like to add you to my contact list."
+msgstr "Me gustaría añadirte a mi lista de contactos."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:305
+msgid "New Contact"
+msgstr "Contacto nuevo"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Decidir _luego"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Petición de suscripción"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1161
+#, c-format
+msgid "Do you really want to remove the group '%s'?"
+msgstr "¿Realmente quiere quitar el grupo «%s»?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1163
+msgid "Removing group"
+msgstr "Quitando grupo"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1210
+#: ../libempathy-gtk/empathy-contact-list-view.c:1290
+msgid "_Remove"
+msgstr "_Quitar"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1240
+#, c-format
+msgid "Do you really want to remove the contact '%s'?"
+msgstr "¿Realmente quiere quitar el contacto «%s»?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1242
+msgid "Removing contact"
+msgstr "Quitando el contacto"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1247
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Lo siento, no te quiero en mi lista de contactos."
+
+#: ../libempathy-gtk/empathy-contact-menu.c:108
+#: ../src/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_Chat"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:129
+msgid "_Call"
+msgstr "_Llamar"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:168
+#: ../src/empathy-main-window.glade.h:17
+msgid "_View Previous Conversations"
+msgstr "_Ver conversaciones previas"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:196
+msgid "Infor_mation"
+msgstr "Infor_mación"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:223
+#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:694
+msgid "Select"
+msgstr "Seleccionar"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:704
+#: ../src/empathy-main-window.c:628
+msgid "Group"
+msgstr "Grupo"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Información del cliente</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Detalles del contacto</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Contacto</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Grupos</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+#: ../src/empathy-chatrooms-window.glade.h:1
+#: ../src/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Cuenta:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Apodo:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Cumpleaños:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Cliente:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Información del contacto"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "Correo-e:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Nombre completo:"
+
+#. Identifier to connect to Instant Messaging network
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Identifier:"
+msgstr "Identificador:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "Information requested..."
+msgstr "Información solicitada…"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid "OS:"
+msgstr "SO:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Seleccione los grupos en los que quiere que este contacto aparezca, puede "
+"seleccionar más de un grupo o ningún grupo."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Version:"
+msgstr "Versión:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
+msgid "Web site:"
+msgstr "Página web:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:284
+msgid "new server"
+msgstr "servidor nuevo"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:513
+msgid "Server"
+msgstr "Servidor"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:528
+msgid "Port"
+msgstr "Puerto"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:541
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+msgid "Account"
+msgstr "Cuenta"
+
+#: ../libempathy-gtk/empathy-log-window.c:504 ../src/empathy-chat-window.c:276
+msgid "Conversation"
+msgstr "Conversación"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+msgid "Date"
+msgstr "Fecha"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Conversations"
+msgstr "Conversaciones"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Previous Conversations"
+msgstr "Conversaciones anteriores"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:5
+msgid "Search"
+msgstr "Buscar"
+
+#. Searching *for* something
+#: ../libempathy-gtk/empathy-log-window.glade.h:7
+msgid "_For:"
+msgstr "_Para:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Llamar"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+#: ../src/empathy-chat-window.glade.h:2
+msgid "Chat"
+msgstr "Chat"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "ID del contacto:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Conversación nueva"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:688
+msgid "Custom messages..."
+msgstr "Mensajes personalizados…"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Mensaje personalizado…"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Mensaje:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Guardar mensaje"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Estado:"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:88
+msgid "Word"
+msgstr "Palabra"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:265
+msgid "Suggestions for the word"
+msgstr "Sugerencias para la palabra"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Corrector ortográfico"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Sugerencias para la palabra:"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:746
+#: ../libempathy-gtk/empathy-theme-irc.c:294
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:74
+msgid "Classic"
+msgstr "Clásico"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:75
+msgid "Simple"
+msgstr "Simple"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:76
+msgid "Clean"
+msgstr "Limpiar"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:77
+msgid "Blue"
+msgstr "Azul"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1326
+msgid "Unable to open URI"
+msgstr "No se pudo abrir el URI"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Configuración regional actual"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Árabe"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Armenio"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Báltico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Celta"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Centroeuropeo"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Chino simplificado"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Chino tradicional"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Croata"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Cirílico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Cirílico/Ruso"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Cirílico/Ucraniano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Georgiano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Griego"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Gujarati"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Hebreo"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Hebreo visual"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindú"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Islandés"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Japonés"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Coreano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Nórdico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Persa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Rumano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Europa del sur"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Tailandés"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Turco"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Occidental"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnamita"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid "The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+"El contacto que mostrar en la miniaplicación. Si se deja vacío no se "
+"mostrará ningún contacto."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "El avatar del contacto. Si se deja vacío no se mostrará ningún avatar."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megáfono"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:420
+msgid "Talk!"
+msgstr "Hablar"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_Acerca de"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Información"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+#: ../src/empathy-main-window.glade.h:15
+msgid "_Preferences"
+msgstr "_Preferencias"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Presencia"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:106
+msgid "Set your own presence"
+msgstr "Establezca su propia presencia"
+
+#: ../src/empathy.c:73
+msgid "Invalid handle"
+msgstr "Manejador no válido"
+
+#: ../src/empathy.c:76
+msgid "No matching connection"
+msgstr "No hay una conexión coincidente"
+
+#: ../src/empathy.c:79
+msgid "Invalid account"
+msgstr "Cuenta no válida"
+
+#: ../src/empathy.c:82
+msgid "Presence failure"
+msgstr "Fallo de presencia"
+
+#: ../src/empathy.c:85
+msgid "No accounts"
+msgstr "Sin cuentas"
+
+#: ../src/empathy.c:88 ../src/empathy-main-window.c:896
+msgid "Network error"
+msgstr "Error de red"
+
+#: ../src/empathy.c:91
+msgid "Contact does not support voice"
+msgstr "El contacto no soporta voz"
+
+#: ../src/empathy.c:94
+msgid "Lowmem"
+msgstr "Memoria baja"
+
+#: ../src/empathy.c:97
+msgid "Channel request generic error"
+msgstr "Error genérico en la petición del canal"
+
+#: ../src/empathy.c:100
+msgid "Channel banned"
+msgstr "Expulsado del canal"
+
+#: ../src/empathy.c:103
+msgid "Channel full"
+msgstr "Canal lleno"
+
+#: ../src/empathy.c:106
+msgid "Channel invite only"
+msgstr "El canal es de sólo invitación"
+
+#: ../src/empathy.c:109
+msgid "Unknown error code"
+msgstr "Error de código desconocido"
+
+#: ../src/empathy.c:312
+msgid "Don't connect on startup"
+msgstr "No conectarse automáticamente al inicio"
+
+#: ../src/empathy.c:324
+msgid "- Empathy Instant Messenger"
+msgstr "- Mensajería instantánea Empathy"
+
+#: ../src/empathy-about-dialog.c:64
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Empathy es software libre; puede redistribuirlo y /o modificarlo bajo los "
+"términos de la Licencia Pública General tal como la publica la Free Software "
+"Foundation; ya sea en la versión 2 de la Licencia, o (a su elección) "
+"cualquier versión posterior."
+
+#: ../src/empathy-about-dialog.c:68
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Empathy se distribuye con la esperanza de que le sea útil,pero SIN NINGUNA "
+"GARANTÍA; sin incluso la garantía implícita de MERCANTILIDAD o IDONEIDAD "
+"PARA UN PROPÓSITO PARTICULAR. Vea la Licencia Pública General de GNU para "
+"más detalles."
+
+#: ../src/empathy-about-dialog.c:72
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Debería haber recibido una copia de la Licencia Pública General GNU junto "
+"con Gossip ; si no, escriba a la Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 EE. UU."
+
+#: ../src/empathy-about-dialog.c:100
+msgid "An Instant Messaging client for GNOME"
+msgstr "Un cliente de mensajería instantánea para GNOME"
+
+#: ../src/empathy-about-dialog.c:106
+msgid "translator-credits"
+msgstr "Jorge González <jorgegonz@svn.gnome.org>, 2007-2008."
+
+#: ../src/empathy-call-window.c:139
+msgid "Closed"
+msgstr "Cerrado"
+
+#: ../src/empathy-call-window.c:251
+msgid "End this call?"
+msgstr "¿Finalizar esta llamada?"
+
+#: ../src/empathy-call-window.c:253
+msgid "Closing this window will end the call in progress."
+msgstr "Cerrar esta ventana finalizará la llamada en progreso."
+
+#: ../src/empathy-call-window.c:254
+msgid "_End Call"
+msgstr "_Finalizar llamada"
+
+#: ../src/empathy-call-window.c:305
+msgid "Incoming call"
+msgstr "Llamada entrante"
+
+#: ../src/empathy-call-window.c:307
+#, c-format
+msgid "%s is calling you, do you want to answer?"
+msgstr "%s le está llamando, ¿quiere responder?"
+
+#: ../src/empathy-call-window.c:313
+msgid "_Reject"
+msgstr "_Rechazar"
+
+#: ../src/empathy-call-window.c:318
+msgid "_Answer"
+msgstr "Re_spuesta"
+
+#: ../src/empathy-call-window.c:364
+msgid "Empathy Call"
+msgstr "Llamada de Empathy"
+
+#: ../src/empathy-call-window.c:365
+msgid "Readying"
+msgstr "Preparándose"
+
+#: ../src/empathy-call-window.c:374
+#, c-format
+msgid "%s - Empathy Call"
+msgstr "Llamada de Empathy - %s"
+
+#: ../src/empathy-call-window.c:378
+msgid "Ringing"
+msgstr "Sonando"
+
+#: ../src/empathy-call-window.c:391
+msgid "Connecting"
+msgstr "Conectado"
+
+#: ../src/empathy-call-window.glade.h:1
+msgid "#"
+msgstr "#"
+
+#: ../src/empathy-call-window.glade.h:2
+msgid "*"
+msgstr "*"
+
+#: ../src/empathy-call-window.glade.h:3
+msgid "0"
+msgstr "0"
+
+#: ../src/empathy-call-window.glade.h:4
+msgid "1"
+msgstr "1"
+
+#: ../src/empathy-call-window.glade.h:5
+msgid "2"
+msgstr "2"
+
+#: ../src/empathy-call-window.glade.h:6
+msgid "3"
+msgstr "3"
+
+#: ../src/empathy-call-window.glade.h:7
+msgid "4"
+msgstr "4"
+
+#: ../src/empathy-call-window.glade.h:8
+msgid "5"
+msgstr "5"
+
+#: ../src/empathy-call-window.glade.h:9
+msgid "6"
+msgstr "6"
+
+#: ../src/empathy-call-window.glade.h:10
+msgid "7"
+msgstr "7"
+
+#: ../src/empathy-call-window.glade.h:11
+msgid "8"
+msgstr "8"
+
+#: ../src/empathy-call-window.glade.h:12
+msgid "9"
+msgstr "9"
+
+#: ../src/empathy-call-window.glade.h:13
+msgid "<b>Keypad</b>"
+msgstr "<b>Teclado numérico</b>"
+
+#: ../src/empathy-call-window.glade.h:14
+msgid "<b>Volume</b>"
+msgstr "<b>Volumen</b>"
+
+#: ../src/empathy-call-window.glade.h:15
+msgid "Hang Up"
+msgstr "Colgar"
+
+#: ../src/empathy-call-window.glade.h:16
+msgid "Send Video"
+msgstr "Envía vídeo"
+
+#: ../src/empathy-chat-window.c:316
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Conversaciones (%d)"
+
+#: ../src/empathy-chat-window.c:383
+msgid "Topic:"
+msgstr "Tema:"
+
+#: ../src/empathy-chat-window.c:386
+msgid "Typing a message."
+msgstr "Tecleando un mensaje."
+
+#: ../src/empathy-chat-window.glade.h:1
+msgid "C_lear"
+msgstr "_Limpiar"
+
+#: ../src/empathy-chat-window.glade.h:3
+msgid "Insert _Smiley"
+msgstr "Insertar _emoticono"
+
+#: ../src/empathy-chat-window.glade.h:4
+msgid "Invitation _message:"
+msgstr "_Mensaje de invitación:"
+
+#: ../src/empathy-chat-window.glade.h:5
+msgid "Invite"
+msgstr "Invitar"
+
+#: ../src/empathy-chat-window.glade.h:6
+msgid "Move Tab _Left"
+msgstr "Mover solapa a la _izquierda"
+
+#: ../src/empathy-chat-window.glade.h:7
+msgid "Move Tab _Right"
+msgstr "Mover solapa a la _derecha"
+
+#: ../src/empathy-chat-window.glade.h:8
+msgid "Select who would you like to invite:"
+msgstr "Seleccione a quién quiere invitar:"
+
+#: ../src/empathy-chat-window.glade.h:9
+msgid "You have been invited to join a chat conference."
+msgstr "Le han invitado a unirse a una conferencia por chat."
+
+#: ../src/empathy-chat-window.glade.h:10
+msgid "_Contact"
+msgstr "Con_tacto"
+
+#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10
+msgid "_Contents"
+msgstr "_Índice"
+
+#: ../src/empathy-chat-window.glade.h:12
+msgid "_Conversation"
+msgstr "_Conversación"
+
+#: ../src/empathy-chat-window.glade.h:13
+msgid "_Detach Tab"
+msgstr "_Desacoplar solapa"
+
+#: ../src/empathy-chat-window.glade.h:15 ../src/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr "Ay_uda"
+
+#: ../src/empathy-chat-window.glade.h:16
+msgid "_Next Tab"
+msgstr "Solapa _siguiente"
+
+#: ../src/empathy-chat-window.glade.h:17
+msgid "_Previous Tab"
+msgstr "Solapa _anterior"
+
+#: ../src/empathy-chat-window.glade.h:18
+msgid "_Tabs"
+msgstr "_Solapas"
+
+#: ../src/empathy-chatrooms-window.c:262
+msgid "Name"
+msgstr "Nombre"
+
+#: ../src/empathy-chatrooms-window.c:280
+msgid "Room"
+msgstr "Sala"
+
+#: ../src/empathy-chatrooms-window.c:289
+msgid "Auto-Connect"
+msgstr "Autoconectar"
+
+#: ../src/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Editar sala de favoritos"
+
+#: ../src/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Unirse a una sala al _iniciar"
+
+#: ../src/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Unirse a esta sala de chat cuando Empathy se inicie y esté conectado"
+
+#: ../src/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Gestionar salas favoritas"
+
+#: ../src/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Nombre:"
+
+#: ../src/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "_Servidor:"
+
+#: ../src/empathy-chatrooms-window.glade.h:9
+#: ../src/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Sala:"
+
+#: ../src/empathy-filter.c:228
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Nuevo mensaje de %s:\n"
+"%s"
+
+#: ../src/empathy-filter.c:285
+#, c-format
+msgid "Incoming call from %s"
+msgstr "Llamada entrante de %s"
+
+#: ../src/empathy-filter.c:341
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Petición de suscripción de %s"
+
+#: ../src/empathy-filter.c:344
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Mensaje: %s"
+
+#. Tell the user that the tube can't be handled
+#: ../src/empathy-filter.c:452
+#, c-format
+msgid ""
+"%s offered you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+"%s le ofreció una invitación pero no tiene la aplicación externa necesaria "
+"para manejarla."
+
+#: ../src/empathy-filter.c:461
+msgid "Invitation Error"
+msgstr "Error en la invitación"
+
+#: ../src/empathy-filter.c:569
+#, c-format
+msgid ""
+"%s is offering you an invitation. An external application will be started to "
+"handle it."
+msgstr ""
+"%s le está ofreciendo una invitación. Se iniciará una aplicación externa "
+"para manejarla."
+
+#: ../src/empathy-filter.c:574
+#, c-format
+msgid ""
+"%s is offering you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+"%s le está ofreciendo una invitación pero no tiene la aplicación externa "
+"necesaria para manejarla."
+
+#: ../src/empathy-main-window.c:271
+msgid "Show and edit accounts"
+msgstr "Mostrar y editar cuentas"
+
+#: ../src/empathy-main-window.c:611
+msgid "Contact"
+msgstr "Contacto"
+
+#: ../src/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "_Editar cuenta"
+
+#: ../src/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "Falló la autenticación"
+
+#: ../src/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "Error de cifrado"
+
+#: ../src/empathy-main-window.c:905
+msgid "Name in use"
+msgstr "Nombre en uso"
+
+#: ../src/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr "No se proporcionó el certificado"
+
+#: ../src/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr "Certificado sin confianza"
+
+#: ../src/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr "El certificado ha expirado"
+
+#: ../src/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr "El certificado no está activado"
+
+#: ../src/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr "El nombre del equipo del certificado no coincide"
+
+#: ../src/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr "La huella del certificado no coincide"
+
+#: ../src/empathy-main-window.c:926
+msgid "Certificate self-signed"
+msgstr "Certificado firmado consigo mismo"
+
+#: ../src/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "Error del certificado"
+
+#: ../src/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "Error desconocido"
+
+#: ../src/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Lista de contactos"
+
+#: ../src/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Contexto"
+
+#: ../src/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Unir a _favoritos"
+
+#: ../src/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Unirse a _nuevo…"
+
+#: ../src/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Gestionar favoritos"
+
+#: ../src/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Mostrar contactos _desconectados"
+
+#: ../src/empathy-main-window.glade.h:7
+msgid "_Accounts"
+msgstr "_Cuentas"
+
+#: ../src/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "_Añadir contacto…"
+
+#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_Conversación nueva…"
+
+#: ../src/empathy-main-window.glade.h:14
+msgid "_Personal Information"
+msgstr "Información _personal"
+
+#: ../src/empathy-main-window.glade.h:16
+msgid "_Room"
+msgstr "_Sala"
+
+#: ../src/empathy-new-chatroom-dialog.c:290
+msgid "Chat Rooms"
+msgstr "Salas de chat"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Buscar:"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:3
+msgid "Enter the room name to join here or click on one or more rooms in the list."
+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.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+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.glade.h:5
+msgid "Join"
+msgstr "Unirse"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Unirse a nueva"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "A_ctualizar"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:8
+msgid "This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"Esta lista representa todas las salas de chat hospedadas en el servidor al "
+"que ha entrado."
+
+#: ../src/empathy-preferences.c:264
+msgid "Language"
+msgstr "Idioma"
+
+#: ../src/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Apariencia</b>"
+
+#: ../src/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Sonido</b>"
+
+#: ../src/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Comportamiento</b>"
+
+#: ../src/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Lista de contactos</b>"
+
+#: ../src/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Activar la revisión ortográfica para idiomas:</b>"
+
+#: ../src/empathy-preferences.glade.h:6
+msgid "<b>Visual</b>"
+msgstr "<b>Visual</b>"
+
+#: ../src/empathy-preferences.glade.h:7
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>La lista de idiomas refleja sólo los idiomas para los cuales tiene un "
+"diccionario instalado.</small>"
+
+#: ../src/empathy-preferences.glade.h:8
+msgid "Automatically _connect on startup "
+msgstr "_Conectarse automáticamente al inicio"
+
+#: ../src/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Los avatares son imágenes elegidas por el usuario que se muestran en la "
+"lista de contactos"
+
+#: ../src/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "_Tema del chat:"
+
+#: ../src/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Mostrar notificaciones cuando los contactos se _conecten"
+
+#: ../src/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Activar sonidos al _ausentarse"
+
+#: ../src/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Activar sonidos cuando se esté _ocupado"
+
+#: ../src/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "General"
+
+#: ../src/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Notificaciones"
+
+#: ../src/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Preferencias"
+
+#: ../src/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "Mostrar _avatares"
+
+#: ../src/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Mostrar los _emoticonos como imágenes"
+
+#: ../src/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "Mostrar lista de contactos co_mpacta"
+
+#: ../src/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "Ordenar por _nombre"
+
+#: ../src/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "Ordenar por es_tado"
+
+#: ../src/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Revisión ortográfica"
+
+#: ../src/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "Temas"
+
+#: ../src/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr "_Abrir charlas nuevas en ventanas separadas"
+
+#: ../src/empathy-preferences.glade.h:25
+msgid "_Play sound when messages arrive"
+msgstr "_Reproducir sonido cuando lleguen mensajes"
+
+#: ../src/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Estado"
+
+#: ../src/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Salir"
+
+#: ../src/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Mostrar lista de contactos"
+
diff --git a/trunk/po/eu.po b/trunk/po/eu.po
new file mode 100644
index 000000000..59bef7803
--- /dev/null
+++ b/trunk/po/eu.po
@@ -0,0 +1,1762 @@
+# translation of eu.po to Basque
+# translation of empathy.HEAD.po to
+# Copyright (C) 2003 THE gossip'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the gossip package.
+#
+# Mikel Olasagasti <hey_neken@mundurat.net>, 2003.
+# Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>, 2003, 2004, 2006, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: eu\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-03-11 14:20+0100\n"
+"PO-Revision-Date: 2008-03-11 14:20+0100\n"
+"Last-Translator: Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>\n"
+"Language-Team: Basque <itzulpena@euskalgnu.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Empathy berehalako mezularitza"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Bidali eta jaso berehalako mezuak"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Ireki beti berriketa berriak beste leiho batean."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Karakterea goitizenaren atzean gehitzeko, taldeko berriketan goitizena "
+"osatzea (tabulatzailea) erabiltzean."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Berriketako leihoaren gaia"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr "Egiaztatu Empathy-k automatikoki konektatu behar duen abiatzean"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "NetworkManager erabili behar den egiaztatzen du"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Salut kontua sortu behar den egiaztatzen du"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Komaz bereiztu erabiltzea nahi diren hizkuntzen zuzentzaile ortografikoen "
+"zerrenda (adib. de, ca, eu)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Trinkotu kontaktu-zerrenda"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Kontaktu-zerrenda ordenatzeko irizpidea"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Direktorio lehenetsia avatar baten irudia hautatzeko"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Gaitu laster-leihoa kontaktua prest dagoenean"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Gaitu soinua aldentzean"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Gaitu soinua lanpetutakoan"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Gaitu ortografia-egiaztapena"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Ezkutatu leiho nagusia"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Ezkutatu leiho nagusia."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Goitizena osatzeko karakterea"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Ireki berriketa berriak beste leihoetan"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Erakutsi avatar-ak"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Erakutsi leiho nagusia nola ixten den buruzko argibidea"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Erakutsi konektatu gabeko kontaktuak"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Hizkuntzen zuzentzailea"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Azken direktorioa, Avatar baten irudia aukeratu dena."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Gaia berriketan bistaratzeko (berriketako leihoan)."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Erabili aurpegierak"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Erabili jakinarazpen-soinuak"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Erabili gaia berriketa-gelan"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically login to your accounts on "
+"startup."
+msgstr "Empathy abiatzean zure kontuetan saioa automatikoki hasi behar den ala ez"
+
+#: ../data/empathy.schemas.in.h:29
+msgid "Whether or not the Salut account has been created on the first empathy run."
+msgstr "Salut kontua sortu den ala ez (Empathy aurreneko aldiz exekutatzean)."
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"Automatikoki konektatzeko/deskonektatzeko sare-kudeatzailea erabili behar "
+"den edo ez adierazten du."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Idatzitako hitzen zuzenketa ortografikoa landu edo ez (nahi dituzun "
+"hizkuntzetan)."
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Elkarrizketetan aurpegierak irudi grafikoetara bihurtuko diren ala ez "
+"adierazten du."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Mezuak iristean soinua joko duen ala ez adierazten du."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Kanpoan zaudenean soinua joko duen ala ez adierazten du."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Lanpetuta zaudenean soinua joko duen ala ez adierazten du."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Kontaktua prest dagoenean laster-leihoa erakutsi edo ez adierazten du."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Kontaktu-zerrendan eta berriketako leihoetan kontaktuen avatarrak erakutsi "
+"edo ez adierazten du."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+"Kontaktu-zerrendan deskonektatuak dauden kontaktuak erakutsiko dituen ala ez "
+"adierazten du."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Leiho nagusia titulu-barrako 'x' botoiarekin ixteari buruzko elkarrizketa-"
+"koadroa erakutsi ala ez adierazten du."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Kontaktu-zerrenda trinkotuta erakutsi edo ez adierazten du."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Berriketa-geletan gaia erabili edo ez adierazten du."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Zein irizpide erabiliko den kontaktu-zerrenda ordenatzean. Lehenetsia "
+"kontaktuen izenen arabera ordenatzea da \"izena\" balioarekin. \"egoera\" "
+"balioak kontaktu-zerrenda egoeraren arabera ordenatuko du."
+
+#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:154
+msgid "People nearby"
+msgstr "Inguruko jendea"
+
+#: ../libempathy/empathy-utils.c:525
+msgid "Available"
+msgstr "Prest"
+
+#: ../libempathy/empathy-utils.c:527
+msgid "Busy"
+msgstr "Lanpetuta"
+
+#: ../libempathy/empathy-utils.c:530
+msgid "Away"
+msgstr "Aldendua"
+
+#: ../libempathy/empathy-utils.c:532
+msgid "Hidden"
+msgstr "Ezkutatua"
+
+#: ../libempathy/empathy-utils.c:535
+msgid "Offline"
+msgstr "Deskonektatuta"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Empathy software librea da; birbana eta/edo alda dezakezu Software "
+"Foundation-ek argitaratutako GNU Lizentzia Publiko Orokorraren 2. bertsioan, "
+"edo (nahiago baduzu) beste berriago batean, jasotako baldintzak betez gero."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Empathy erabilgarria izango delakoan banatzen da, baina, INOLAKO BERMERIK "
+"GABE; era berean, ez da bermatzen beraren EGOKITASUNA MERKATURATZEKO edo "
+"HELBURU PARTIKULARRETARAKO ERABILTZEKO. Argibide gehiago nahi izanez gero, "
+"ikus GNU Lizentzia Publiko Orokorra."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Empathy programarekin batera GNU Lizentzia Publiko Orokorraren kopia bat "
+"jasoko zenuen; hala ez bada, idatzi hona: Free Software Foundation, Inc., 51 "
+"Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Berehalako mezularitzako bezero bat GNOMErako"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Mikel Olasagasti <hey_neken@mundurat.net>\n"
+"Iñaki Larrañaga Murgoitio <dooteo@euskalgnu.org>"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "Denak"
+
+#: ../libempathy-gtk/empathy-account-widget.c:284
+#: ../libempathy-gtk/empathy-account-widget.c:329
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Aurreratua</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:2
+msgid "generic account settings"
+msgstr "kontu orokorraren ezarpenak"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Ahaztu pasahitza eta garbitu sarrera."
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "ICQ _UIN:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+msgid "ICQ account settings"
+msgstr "ICQ kontuaren ezarpenak"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "_Pasahitza:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Charset:"
+msgstr "_Karaktere-jokoa:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Port:"
+msgstr "_Ataka:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:12
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Zerbitzaria:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr "Sare berria"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Sarea</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Zerbitzariak</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Karaktere-jokoa:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Sortu IRC sare berria"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Editatu hautatutako IRC sarea"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Sarea"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Sarea:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Goitizena:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Pasahitza:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Irteerako mezua:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Benetako izena:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Kendu hautatutako IRC sarea"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:13
+msgid "irc account settings"
+msgstr "irc kontuaren ezarpenak"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Gainidatzi zerbitzariaren ezarpena</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "Saioko _IDa:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "_Lehentasuna:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "_Baliabidea:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Erabili SS_L zaharra"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "_Enkritatzea behar da (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Ez ikusi egin SSL ziurtagirien erroreei"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:13
+msgid "jabber account settings"
+msgstr "jabber kontuaren ezarpenak"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "msn kontuaren ezarpenak"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "_Helb. elek.:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Izena:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_Jabber IDa:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "_Abizenak:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Goitizena:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "A_rgitaratutako izena:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "salut kontuaren ezarpenak"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "_Japoniako zerbitzaria:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "Erabili japoniako _Yahoo"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "Yahoo! account settings"
+msgstr "Yahoo! kontuaren ezarpenak"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Ignore conference and chatroom invitations"
+msgstr "_Ez ikusi egin konferentzi eta berriketa-gelen gonbiteei"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+msgid "_Room List locale:"
+msgstr "_Gelen zerrenda lokala:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:224
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Kontu berri bat gehitzeko, egin klik 'Gehitu' botoian eta sarrera berria "
+"sortuko da konfiguratzen has zaitezen."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:228
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"Kontu berri bat gehitzeko, aurrenik erabiltzea nahi duzun protokolo "
+"bakoitzaren motorra instalatu behar duzu."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:235
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Ez da konturik hautatu</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:236
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Ez baduzu konturik gehitu nahi, egin klik konfiguratzea nahi duzun kontuan "
+"ezkerreko zerrendan."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:242
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Ez da konturik konfiguratu</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:410
+msgid "Enabled"
+msgstr "Gaituta"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:420
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Kontuak"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:903
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Zure %s kontua ezabatzera zoaz.\n"
+"Ziur zaude ezabatzea nahi duzula?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:909
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Elkartutako berriketak eta gelak EZ dira ezabatuko aurrera jarraitzea "
+"erabakitzen baduzu.\n"
+"\n"
+"Beranduago kontua gehitzea erabakitzen baduzu ere, haiek oraindik "
+"erabilgarri egongo dira."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Kontu berria</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Ezarpenak</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "_Sortu"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Kontu berri bat gehitzeko, egin klik 'Gehitu' botoian eta sarrera berria "
+"sortuko da konfiguratzeko.\n"
+"\n"
+"Ez baduzu konturik gehitu nahi, egin klik konfiguratzea nahi duzun kontuan "
+"ezkerreko zerrendan."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Mota:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:459
+msgid "Select Your Avatar Image"
+msgstr "Hautatu zure avatar irudia"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:462
+msgid "No Image"
+msgstr "Irudirik ez"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:522
+msgid "Images"
+msgstr "Irudiak"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:526
+msgid "All Files"
+msgstr "Fitxategi denak"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Egin klik handitzeko"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+msgid "End Call"
+msgstr "Amaitu deia"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "Sarrera"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "Mututu"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "Irteera"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "Bidali bideoa"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Start Call"
+msgstr "Hasi deia"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:7
+msgid "Volume"
+msgstr "Bolumena"
+
+#: ../libempathy-gtk/empathy-chat.c:441
+msgid "Disconnected"
+msgstr "Deskonektatuta"
+
+#: ../libempathy-gtk/empathy-chat.c:565
+msgid "offline"
+msgstr "lineaz kanpo"
+
+#: ../libempathy-gtk/empathy-chat.c:568
+msgid "invalid contact"
+msgstr "kontaktu baliogabea"
+
+#: ../libempathy-gtk/empathy-chat.c:571
+msgid "permission denied"
+msgstr "baimena ukatuta"
+
+#: ../libempathy-gtk/empathy-chat.c:574
+msgid "too long message"
+msgstr "mezua luzeegia"
+
+#: ../libempathy-gtk/empathy-chat.c:577
+msgid "not implemented"
+msgstr "inplementatu gabe"
+
+#: ../libempathy-gtk/empathy-chat.c:580
+msgid "unknown"
+msgstr "ezezaguna"
+
+#: ../libempathy-gtk/empathy-chat.c:584
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Errorea '%s' mezua bidaltzean: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:1041
+msgid "Insert Smiley"
+msgstr "Txertatu aurpegiera"
+
+#: ../libempathy-gtk/empathy-chat.c:1088
+msgid "_Check Word Spelling..."
+msgstr "_Egiaztatu ortografia..."
+
+#: ../libempathy-gtk/empathy-chat.c:1545
+msgid "Connected"
+msgstr "Konektatuta"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Garbitu"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "_Deitu"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "Aldatu g_aia.."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+msgid "Chat"
+msgstr "Berriketa"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "Kontaktuaren _informazioa"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "In_vite..."
+msgstr "_Gonbidatu..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "Txertatu _aurpegiera"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Invitation _message:"
+msgstr "Gonbitearen _mezua:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invite"
+msgstr "Gonbidatu"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Elkartu _berrian..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Eraman fitxa e_zkerrera"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Eraman fitxa e_skuinera"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr "Hautatu gonbidatzea nahi duzuna:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "Berriketako konferentzi batera gonbidatu zaituzte."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "Gehitu _kontaktua..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "_Gehitu gogokoei"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Contents"
+msgstr "_Edukia"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Berriketa"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+msgid "_Detach Tab"
+msgstr "E_zabatu fitxa"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+#: ../libempathy-gtk/empathy-contact-list-view.c:215
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr "_Editatu"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr "_Laguntza"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "_Hurrengo fitxa"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+msgid "_Previous Tab"
+msgstr "_Aurreko fitxa"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Room"
+msgstr "_Gela"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Show Contacts"
+msgstr "_Erakutsi kontaktuak"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Tabs"
+msgstr "_Fitxak"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+#: ../libempathy-gtk/empathy-contact-list-view.c:231
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+msgid "_View Previous Conversations"
+msgstr "_Ikusi aurreko berriketak"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+msgid "gtk-close"
+msgstr "gtk-close"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+msgid "gtk-copy"
+msgstr "gtk-copy"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:30
+msgid "gtk-cut"
+msgstr "gtk-cut"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:31
+msgid "gtk-paste"
+msgstr "gtk-paste"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Copy Link Address"
+msgstr "_Kopiatu estekaren helbidea"
+
+#: ../libempathy-gtk/empathy-chat-view.c:449
+msgid "_Open Link"
+msgstr "_Ireki esteka"
+
+#: ../libempathy-gtk/empathy-chat-window.c:698
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Berriketak (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1293
+msgid "Typing a message."
+msgstr "Mezua idazten."
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "Izena"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "Gela"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr "Konektatu automatikoki"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+msgid "Account:"
+msgstr "Kontua:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Editatu gogoko gela"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Elkartu gelarekin _abiatzean"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Elkartu berriketa-gelarekin Empathy abiatzean eta konektatzen zarenean"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Kudeatu gogoko gelak"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Izena:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "_Zerbitzaria:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Gela:"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:176
+msgid "Personal Information"
+msgstr "Informazio pertsonala"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+msgid "Edit Contact Information"
+msgstr "Editatu kontaktuaren informazioa"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:182
+msgid "Contact Information"
+msgstr "Kontaktuaren informazioa"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:277
+msgid "I would like to add you to my contact list."
+msgstr "Nire kontaktu-zerrendara gehitu nahi zaitut."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:301
+msgid "New Contact"
+msgstr "Kontaktu berria"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Erabaki _beranduago"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Harpidetza eskaera"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:195
+msgid "_Contact"
+msgstr "_Kontaktua"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:199
+msgid "_Group"
+msgstr "_Taldea"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:203
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_Berriketa"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:203
+msgid "Chat with contact"
+msgstr "Egin berriketa kontaktuarekin"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:207
+msgid "Infor_mation"
+msgstr "_Informazioa"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:207
+msgid "View contact information"
+msgstr "Ikusi kontaktuaren informazioa"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:211
+msgid "Re_name"
+msgstr "Al_datu izena"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:211
+msgid "Rename"
+msgstr "Aldatu izena"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:215
+msgid "Edit the groups and name for this contact"
+msgstr "Editatu kontaktuaren taldeak eta izena"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:219
+msgid "_Remove"
+msgstr "_Kendu"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:219
+msgid "Remove contact"
+msgstr "Kendu kontaktua"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:223
+msgid "_Invite to Chat Room"
+msgstr "_Gonbidatu berriketa-gelara"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:223
+msgid "Invite to a currently open chat room"
+msgstr "Gonbidatu unean irekitako berriketa-gelara"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:227
+msgid "_Send File..."
+msgstr "_Bidali fitxategia..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:227
+msgid "Send a file"
+msgstr "Bidali fitxategia"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:231
+msgid "View previous conversations with this contact"
+msgstr "Ikusi kontaktuaren aurreko berriketak"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:236
+msgid "_Call"
+msgstr "_Deitu"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:236
+msgid "Start a voice or video conversation with this contact"
+msgstr "Hasi ahotsezko edo bideozko berriketa kontaktu honekin"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1471
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Ez zaitut nahi nire kontaktu-zerrendan gehiago."
+
+#: ../libempathy-gtk/empathy-contact-widget.c:690
+msgid "Select"
+msgstr "Hautatu"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:700
+#: ../libempathy-gtk/empathy-main-window.c:609
+msgid "Group"
+msgstr "Taldea"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Bezeroaren informazioa</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Kontaktuaren xehetasunak</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Kontaktua</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Taldeak</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Aliasa:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Urtebetetzea:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Bezeroa:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Kontaktuaren informazioa"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "Helb. elek.:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Izen osoa:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "Identifikatzailea:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "Informazioa eskatuta..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "SE:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Hautatu taldeak kontaktu hau talde horietan azaltzeko, talde bat baino "
+"gehiago hauta ditzakezu, edo talderik ez."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Bertsioa:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "Web gunea:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:249
+msgid "Enter the new topic you want to set for this room:"
+msgstr "Idatzi gai berria gela honetan ezartzeko:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:359
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s(e)k gelara elkartzea nahi du"
+
+#: ../libempathy-gtk/empathy-group-chat.c:362
+#, c-format
+msgid "%s has left the room"
+msgstr "%s(e)k gela utzi du"
+
+#: ../libempathy-gtk/empathy-group-chat.c:448
+#, c-format
+msgid "Topic: %s"
+msgstr "Gaia: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:523
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Gaia honela ezarria: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:525
+msgid "No topic defined"
+msgstr "Ez da gairik definitu"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Gaia:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Berriketa-gela"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+msgid "new server"
+msgstr "zerbitzari berria"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:512
+msgid "Server"
+msgstr "Zerbitzaria"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:527
+msgid "Port"
+msgstr "Ataka"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:540
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:499
+msgid "Account"
+msgstr "Kontua"
+
+#: ../libempathy-gtk/empathy-log-window.c:506
+msgid "Conversation"
+msgstr "Berriketa"
+
+#: ../libempathy-gtk/empathy-log-window.c:516
+msgid "Date"
+msgstr "Data"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "Berriketak"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr "Aurreko berriketak"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "Bilatu"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "_Honentzako:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "Berriketa-gela"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Arakatu:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid "Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Idatzi gelaren izena bertara elkartzeko edo egin klik gela batean edo "
+"gehiagotan zerrendan."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Idatzi gela duen zerbitzaria, edo utzi hutsik gela ez badago uneko kontuen "
+"zerbitzarian."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Elkartu"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Elkartu berrian"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "_Freskatu"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid "This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"Zerrenda honek emandako zerbitzarian ostatutako berriketa-gela guztiak "
+"adierazten ditu."
+
+#: ../libempathy-gtk/empathy-main-window.c:266
+msgid "Show and edit accounts"
+msgstr "Erakutsi eta editatu kontuak"
+
+#: ../libempathy-gtk/empathy-main-window.c:630
+msgid "Contact"
+msgstr "Kontaktua"
+
+#: ../libempathy-gtk/empathy-main-window.c:819
+msgid "_Edit account"
+msgstr "_Editatu kontua"
+
+#: ../libempathy-gtk/empathy-main-window.c:902
+msgid "Network error"
+msgstr "Sareko errorea"
+
+#: ../libempathy-gtk/empathy-main-window.c:905
+msgid "Authentication failed"
+msgstr "Autentifikazioak huts egin du"
+
+#: ../libempathy-gtk/empathy-main-window.c:908
+msgid "Encryption error"
+msgstr "Enkriptazioaren errorea"
+
+#: ../libempathy-gtk/empathy-main-window.c:911
+msgid "Name in use"
+msgstr "Izena erabilita"
+
+#: ../libempathy-gtk/empathy-main-window.c:914
+msgid "Certificate not provided"
+msgstr "Ez da ziurtagiririk eman"
+
+#: ../libempathy-gtk/empathy-main-window.c:917
+msgid "Certificate untrusted"
+msgstr "Ziurtagiria ez da fidagarria"
+
+#: ../libempathy-gtk/empathy-main-window.c:920
+msgid "Certificate expired"
+msgstr "Ziurtagiria iraungituta"
+
+#: ../libempathy-gtk/empathy-main-window.c:923
+msgid "Certificate not activated"
+msgstr "Ziurtagiria aktibatu gabe"
+
+#: ../libempathy-gtk/empathy-main-window.c:926
+msgid "Certificate hostname mismatch"
+msgstr "Ziurtagiriaren ostalari-izena ez dator bat"
+
+#: ../libempathy-gtk/empathy-main-window.c:929
+msgid "Certificate fingerprint mismatch"
+msgstr "Ziurtagiriaren hatz-marka ez dator bat"
+
+#: ../libempathy-gtk/empathy-main-window.c:932
+msgid "Certificate self signed"
+msgstr "Ziurtagiria bere buruarekin sinatuta"
+
+#: ../libempathy-gtk/empathy-main-window.c:935
+msgid "Certificate error"
+msgstr "Ziurtagiriaren errorea"
+
+#: ../libempathy-gtk/empathy-main-window.c:938
+msgid "Unknown error"
+msgstr "Errore ezezaguna"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Kontaktuen zerrenda"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Testuingurua"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Elkartu _gogokoetan"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Kudeatu gogokoak"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Erakutsi _konektatu gabeko kontaktuak"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+msgid "_Accounts"
+msgstr "_Kontuak"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_Berriketa berria..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+msgid "_Personal Information"
+msgstr "_Informazio pertsonala"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "_Hobespenak"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "gtk-about"
+msgstr "gtk-about"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "gtk-quit"
+msgstr "gtk-quit"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Deitu"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "Kontaktuaren IDa:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Berriketa berria"
+
+#: ../libempathy-gtk/empathy-preferences.c:281
+msgid "Language"
+msgstr "Hizkuntza"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Itxura</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Audioa</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Portaera</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Kontaktuen zerrenda</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Gaitu hizkuntzen zuzentzailea:</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Aukerak</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Bisuala</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr "<small>Hizkuntzen zerrendak instalatutako hiztegiei dagokie.</small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Automatically _connect on startup "
+msgstr "Automatikoki _konektatu abiatzean "
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Avatarrak, erabiltzaileak aukeratutako irudiak kontaktuen zerrendan agertzen "
+"direnak dira"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Chat Th_eme:"
+msgstr "Berriketa-_gaia:"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Display notifications when contacts come _online"
+msgstr "Bistaratu jakinarazpenak kontaktuak _konektatzen direnean"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _away"
+msgstr "Gaitu soinuak _aldentzean"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "Enable sounds when _busy"
+msgstr "Gaitu soinuak _lanpetutakoan"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "General"
+msgstr "Orokorra"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Notifications"
+msgstr "Jakinarazpenak"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Preferences"
+msgstr "Hobespenak"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _avatars"
+msgstr "Erakutsi _avatarrak"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show _smileys as images"
+msgstr "Erakutsi _aurpegierak irudi gisa"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Show co_mpact contact list"
+msgstr "Erakutsi kontaktu-zerrenda _trinkotua"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by _name"
+msgstr "Ordenatu _izenarekiko"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Sort by s_tate"
+msgstr "Ordenatu _egoerarekiko"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Spell Checking"
+msgstr "Zuzentzailea"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "Themes"
+msgstr "Gaiak"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Ireki berriketa berriak beste leihoetan"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "Jo _soinua mezuak iristean"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "_Erabili berriketa-geletan"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Mezu pertsonalizatuak..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Mezu pertsonalizatua"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Mezua:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Gorde mezua"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Egoera:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:230
+#, c-format
+msgid "%s went offline"
+msgstr "%s deskonektatu da"
+
+#: ../libempathy-gtk/empathy-private-chat.c:244
+#, c-format
+msgid "%s has come online"
+msgstr "%s konektatu da"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "Hitza"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "Hitzari buruzko iradokizuna"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Zuzentzailea"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Hitzaren iradokizuna:"
+
+#: ../libempathy-gtk/empathy-status-icon.c:358
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"%s-(r)en mezu berria:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:427
+#, c-format
+msgid ""
+"Incoming call from %s:\n"
+"%s"
+msgstr ""
+"Sarrerako deia %s-(e)ndik:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:728
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "%s-(e)k harpidetzea eskatu du"
+
+#: ../libempathy-gtk/empathy-status-icon.c:731
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Mezua: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Egoera"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "I_rten"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Erakutsi kontaktu-zerrenda"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:780
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%A, %Y %B %d"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:78
+msgid "Classic"
+msgstr "Klasikoa"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:79
+msgid "Simple"
+msgstr "Soila"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:80
+msgid "Clean"
+msgstr "Garbia"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:81
+msgid "Blue"
+msgstr "Urdina"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Uneko lokala"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Arabiera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Armeniera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Baltikokoa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Zeltiarra"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Europako Erdialdekoa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Txinatar soildua"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Txinatar tradizionala"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Kroaziera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Zirilikoa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Zirilikoa/Errusiarra"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Zirilikoa/Ukrainarra"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Georgiera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Grekoa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Gujaratiera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhia"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Hebreera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Hebrear bisuala"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindiera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Islandiera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Japoniera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Koreera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Nordikoa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Persiera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Errumaniera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Europako Hegoaldekoa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Thailandiera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Turkiera"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Mendebaldekoa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnamera"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid "The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+"Kontaktua applet-ean bistaratzeko. Hutsik utziz gero, ez da kontakturik "
+"bistaratuko."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr ""
+"Kontaktuaren avatarra. Hutsi utziz gero kontaktuak avatarrik ez duela "
+"adierazten da."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megafonoa"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Hitz egin!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "Honi _buruz"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Informazioa"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Presentzia"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "Ezarri zure presentzia"
+
+#: ../src/empathy.c:290
+msgid "- Empathy Instant Messenger"
+msgstr "- Empathy berehalako mezularitza"
+
diff --git a/trunk/po/fi.po b/trunk/po/fi.po
new file mode 100644
index 000000000..6f40ac773
--- /dev/null
+++ b/trunk/po/fi.po
@@ -0,0 +1,1773 @@
+# This file is distributed under the same license as the gossip package.
+# Copyright (C) 2006 Samuli Seppänen and Henna Nykänen.
+#
+# Ilkka Tuohela <hile@iki.fi>, 2006-2007.
+# Samuli Seppänen & Henna Nykänen <sjsepp@utu.fi>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-03-09 08:45+0300\n"
+"PO-Revision-Date: 2006-10-17 20:50+0300\n"
+"Last-Translator: Samuli Seppänen & Henna Nykänen <sjsepp@utu.fi>\n"
+"Language-Team: Finnish <gnome-fi-laatu@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.10.2\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Empathy-pikaviestin"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Lähetä ja vastaanota pikaviestejä"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Avaa aina uusi ikkuna uusille keskusteluille."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Lempinimen jälkeen lisättävä merkki, kun käytetään lempinimen täydennystä "
+"(sarkain) ryhmäkeskustelussa."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Keskusteluikkunan teema"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr "Tarkistaa, yhdistääkö empathy automaattisesti käynnistettäessä"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Tarkistaa, käytetäänkö NetworkManager:ia"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Tarkistaa, onko salut-tili luotu"
+
+#: ../data/empathy.schemas.in.h:7
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Pilkuilla erotettu luettelo kielentarkastuksessa käytettävistä kielistä "
+"(esim. en, fr, nl)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Pienikokoinen tuttavaluettelo"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Tuttavaluettelon järjestystapa"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Oletushakemisto, josta avatar-kuvat haetaan"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Näytä ponnahdusikkuna, kun tuttava on linjoilla"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Käytä ääniä poissa-tilassa"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Käytä ääniä varattu-tilassa"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Ota käyttöön oikeinkirjoituksen tarkistus"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Piilota pääikkuna"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Piilota pääikkuna."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Lempinimen täydennysmerkki"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Avaa uusi ikkuna uusille keskusteluille"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Näytä avatar-kuvat"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Näytä vihje pääikkunan sulkemisesta"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Näytä linjoilta poissa olevat tuttavat"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Kielentarkastuksessa käytetyt kielet"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Viimeisin hakemisto, josta avatar-kuva oli valittu."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Keskusteluikkunoissa käytettävä teema."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Käytä hymiökuvakkeita"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Käytä merkkiääniä"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Käytä teemaa keskusteluhuoneille"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically login to your accounts on "
+"startup."
+msgstr ""
+"Tulisiko empathyn ottaa yhteyttä tileihin automaattisesti, kun kirjaudut "
+"sisään."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first empathy run."
+msgstr "Onko salut-tili luotu suoritettaessa empathyä ensimmäistä kertaa."
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"Käytetäänkö NetworkManager:ia yhdistämään ja katkaisemaan yhteys "
+"automaattisesti."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr "Tarkistetaanko oikeinkirjoitus haluamiasi kieliä vasten."
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Muunnetaanko hymiöt graafisiksi?"
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Annetaanko viestien saapuessa merkkiääni?"
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Käytetäänko merkkiääniä Poissa-tilassa?"
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Käytetäänkö merkkiääniä Varattu-tilassa?"
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Näytetäänkö ponnahdusikkuna, kun tuttava tulee linjoille."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Näytetäänkö avatarit tuttavaluettelossa ja keskusteluikkunoissa."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Näytetäänkö tuttavaluettelossa myös linjoilta poissa olevat tuttavat?"
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Näytetäänkö viesti-ikkuna pääikkunan sulkemisesta suljettaessa ikkuna X-"
+"napista."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Näytetäänkö tuttavaluettelo pienikokoisena."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Käytetäänkö teemaa keskusteluhuoneille."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Millä ehtoa käytetään tuttavaluettelon järjestämiseen. Oletusarvo on "
+"järjestää tuttavan nimen mukaan arvolla \"name\". Luettelo voidaan järjestää "
+"tuttavan tilan mukaan arvolla \"state\"."
+
+#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:155
+msgid "People nearby"
+msgstr "Lähellä olevat ihmiset"
+
+#: ../libempathy/empathy-utils.c:541
+msgid "Available"
+msgstr "Tavoitettavissa"
+
+#: ../libempathy/empathy-utils.c:543
+msgid "Busy"
+msgstr "Varattu"
+
+#: ../libempathy/empathy-utils.c:546
+msgid "Away"
+msgstr "Poissa"
+
+#: ../libempathy/empathy-utils.c:548
+msgid "Hidden"
+msgstr "Piilotettu"
+
+#: ../libempathy/empathy-utils.c:551
+msgid "Offline"
+msgstr "Poissa linjoilta"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Empathy on vapaa ohjelma; sitä on sallittu levittää edelleen ja muuttaa GNU "
+"yleisen lisenssin (GPL lisenssin) ehtojen mukaan sellaisina kuin Free "
+"Software Foundation on ne julkaissut; joko lisenssin version 2, tai "
+"(valinnan mukaan) minkä tahansa myöhemmän version mukaisesti."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Empathyä levitetään siinä toivossa, että se olisi hyödyllinen, mutta ilman "
+"mitään takuuta; ilman edes hiljaista takuuta kaupallisesti hyväksyttävästä "
+"laadusta tai soveltuvuudesta tiettyyn tarkoitukseen. Katso GPL lisenssistä "
+"lisää yksityiskohtia."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Empathyn mukana pitäisi tulla kopio GPL-lisenssistä; jos näin ei ole, "
+"kirjoita osoitteeseen Free Software Foundation Inc., 51 Franklin St, Fifth "
+"Floor, Boston, MA 02110-1301, USA."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Gnomen pikaviestiohjelma"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Samuli Seppänen ja Henna Nykänen, 2006.\n"
+"Ilkka Tuohela, 2006.\n"
+"\n"
+"http://www.gnome.fi/"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "Kaikki"
+
+#: ../libempathy-gtk/empathy-account-widget.c:284
+#: ../libempathy-gtk/empathy-account-widget.c:329
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Lisäasetukset</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Unohda salasana ja tyhjennä kohta."
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "ICQ _UIN:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+msgid "ICQ account settings"
+msgstr "ICQ-tilin asetukset"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "S_alasana:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Charset:"
+msgstr "_Merkistö:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Port:"
+msgstr "_Portti:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:12
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "Pal_velin:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr "Uusi verkko"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Verkko</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Palvelimet</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Merkistö:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Luo uusi IRC-verkko"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Muokkaa valittua IRC-verkkoa"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Verkko"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Verkko:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Nimimerkki:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Salasana:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Lopetusviesti:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Oikea nimi:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Poista valittu IRC-verkko"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:13
+msgid "irc account settings"
+msgstr "irc-tilin asetukset"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Käytä omia asetuksia palvelimen asetusten sijasta</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "_Käyttäjätunnus:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "_Tärkeys:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "Res_urssi:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Käytä vanhaa SS_L-porttia"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "_Vaadi salaus (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "Älä _huomioi SSL-varmenteiden virheitä"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:13
+msgid "jabber account settings"
+msgstr "jabber-tilin asetukset"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "msn-tilin asetukset"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "_Sähköposti:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Etunimi:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_Jabber-tunniste:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "_Sukunimi:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Nimimerkki:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "_Julkaistu nimi:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "salut-tilin asetukset"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "J_apanin palvelin"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "Käytä _Yahoo Japania"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "Yahoo! account settings"
+msgstr "Yahoo!-tilin asetukset"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Ignore conference and chatroom invitations"
+msgstr "Älä _huomioi konferenssi- ja huonekutsuja"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+msgid "_Room List locale:"
+msgstr "_Huoneluettelon maa-asetusto:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:225
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Jos haluat lisätä uuden tilin, voit napsauttaa \"Lisää\"-painiketta ja uusi "
+"kohta lisätään, josta voit määritellä tilin asetukset."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:229
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"Ennen kuin voit lisätä tilin, sinun täytyy asentaa kullekin käytettävälle "
+"protokollalle tarvittava taustajärjestelmä."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:236
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Tiliä ei ole valittu</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Jos et halua lisätä uutta tiliä, valitse vasemmalla olevasta luettelosta "
+"tili, jonka asetuksia haluat muuttaa."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:243
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Tilejä ei ole määritelty</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:411
+msgid "Enabled"
+msgstr "Käytössä"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:421
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Käyttäjätilit"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:904
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Olet poistamassa %s-tilisi!\n"
+"Haluatko varmasti jatkaa?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:910
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Liitettyjä keskusteluja ja keskusteluhuoneita ei poisteta, jos päätät "
+"jatkaa.\n"
+"\n"
+"Jos päätät myöhemmin lisätä tilin takaisin, ovat vanhat keskustelut ja "
+"keskusteluhuoneet jälleen käytettävissä."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Uusi tili</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Asetukset</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "_Luo"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Jos haluat lisätä uuden tilin, napsauta \"Lisää\"-painiketta ja määrittele "
+"tilin asetukset luetteloon lisätystä kohdasta.\n"
+"\n"
+"Jos et halua lisätä uutta tiliä, muokkaa olemassaolevaa tiliä napsauttamalla "
+"sen kohtaa vasemmalla olevasta luettelosta."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Tyyppi:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:449
+msgid "Select Your Avatar Image"
+msgstr "Valitse avatar-kuvasi"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:452
+msgid "No Image"
+msgstr "Ei kuvaa"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:512
+msgid "Images"
+msgstr "Kuvat"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:516
+msgid "All Files"
+msgstr "Kaikki tiedostot"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Suurenna napsauttamalla"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+msgid "End Call"
+msgstr "Lopeta puhelu"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "Saapuva"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "Vaimenna"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "Lähtevä"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "Lähetä videota"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Start Call"
+msgstr "Aloita puhelu"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:7
+msgid "Volume"
+msgstr "Äänenvoimakkuus"
+
+#: ../libempathy-gtk/empathy-chat.c:441
+msgid "Disconnected"
+msgstr "Ei yhteyttä"
+
+#: ../libempathy-gtk/empathy-chat.c:565
+msgid "offline"
+msgstr "poissa linjoilta"
+
+#: ../libempathy-gtk/empathy-chat.c:568
+msgid "invalid contact"
+msgstr "virheellinen yhteystieto"
+
+#: ../libempathy-gtk/empathy-chat.c:571
+msgid "permission denied"
+msgstr "lupa evätty"
+
+#: ../libempathy-gtk/empathy-chat.c:574
+msgid "too long message"
+msgstr "liian pitkä viesti"
+
+#: ../libempathy-gtk/empathy-chat.c:577
+msgid "not implemented"
+msgstr "ei toteutettu"
+
+#: ../libempathy-gtk/empathy-chat.c:580
+msgid "unknown"
+msgstr "tuntematon"
+
+#: ../libempathy-gtk/empathy-chat.c:584
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Virhe lähetettäessä viestiä \"%s\": %s"
+
+#: ../libempathy-gtk/empathy-chat.c:1041
+msgid "Insert Smiley"
+msgstr "Lisää hymiö"
+
+#: ../libempathy-gtk/empathy-chat.c:1088
+msgid "_Check Word Spelling..."
+msgstr "_Tarkasta oikeinkirjoitus..."
+
+#: ../libempathy-gtk/empathy-chat.c:1545
+msgid "Connected"
+msgstr "Yhdistetty"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Tyhjennä"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "_Soita"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "Muuta _aihetta..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+msgid "Chat"
+msgstr "Keskustelu"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "_Yhteystiedot"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "Cu_t"
+msgstr "_Leikkaa"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "In_vite..."
+msgstr "_Kutsu..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Insert _Smiley"
+msgstr "Lisää _hymiö"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invitation _message:"
+msgstr "Kutsu_viesti:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+msgid "Invite"
+msgstr "Kutsu"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Liity _uuteen..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Left"
+msgstr "Siirrä välilehti _vasemmalle"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Move Tab _Right"
+msgstr "Siirrä välilehti _oikealle"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "Select who would you like to invite:"
+msgstr "Valitse ketkä haluat kutsua:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+msgid "You have been invited to join a chat conference."
+msgstr "Olet saanut kutsun ryhmäkeskusteluun."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "Lisää _tuttava..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Add To Favorites"
+msgstr "Lisää _suosikkeihin"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Close"
+msgstr "_Sulje"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Sisältö"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Conversation"
+msgstr "_Keskustelu"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+msgid "_Copy"
+msgstr "_Kopioi"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Detach Tab"
+msgstr "_Irrota välilehti"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "_Muokkaa"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "O_hje"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Next Tab"
+msgstr "_Seuraava välilehti"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Paste"
+msgstr "_Liitä"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Previous Tab"
+msgstr "_Edellinen välilehti"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "_Huone"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+msgid "_Show Contacts"
+msgstr "_Näytä tuttavat"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:30
+msgid "_Tabs"
+msgstr "V_älilehdet"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:31
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr "_Näytä edelliset keskustelut"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Copy Link Address"
+msgstr "_Kopioi linkin osoite"
+
+#: ../libempathy-gtk/empathy-chat-view.c:449
+msgid "_Open Link"
+msgstr "_Avaa linkki"
+
+#: ../libempathy-gtk/empathy-chat-window.c:699
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Keskustelut (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1294
+msgid "Typing a message."
+msgstr "Kirjoittaa viestiä."
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "Nimi"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "Huone"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr "Yhdistä automaattisesti"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+msgid "Account:"
+msgstr "Käyttäjätili:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Muokkaa suosikkihuonetta"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Yhdistä _keskusteluhuoneeseen käynnistettäessä"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Yhdistä tähän keskusteluhuoneeseen, kun yhteys on muodostettu"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Hallitse suosikkihuoneita"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Nimi:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "_Palvelin:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Keskusteluhuone:"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:176
+msgid "Personal Information"
+msgstr "Henkilökohtaiset tiedot"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+msgid "Edit Contact Information"
+msgstr "Muokkaa yhteystietoja"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:182
+msgid "Contact Information"
+msgstr "Yhteystiedot"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:277
+msgid "I would like to add you to my contact list."
+msgstr "Haluaisin liittää sinut tuttavaluettelooni."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:301
+msgid "New Contact"
+msgstr "Uusi tuttava"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "_Päätä myöhemmin"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Liittymispyyntö"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:197
+msgid "_Contact"
+msgstr "_Tuttavat"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:201
+msgid "_Group"
+msgstr "_Ryhmä"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr "_Keskustele"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+msgid "Chat with contact"
+msgstr "Keskustele tuttavan kanssa"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "Infor_mation"
+msgstr "_Tietoja"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "View contact information"
+msgstr "Näytä yhteystiedot"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Re_name"
+msgstr "Nimeä _uudelleen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Rename"
+msgstr "Nimeä uudelleen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+msgid "Edit the groups and name for this contact"
+msgstr "Muokkaa yhteystiedon ryhmiä ja nimeä"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "_Remove"
+msgstr "_Poista"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "Remove contact"
+msgstr "_Poista tuttavan yhteystiedot"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "_Invite to Chat Room"
+msgstr "K_utsu keskusteluhuoneeseen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "Invite to a currently open chat room"
+msgstr "Kutsu avoinna olevaan keskusteluhuoneeseen"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "_Send File..."
+msgstr "_Lähetä tiedosto..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "Send a file"
+msgstr "Lähetä tiedosto"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+msgid "View previous conversations with this contact"
+msgstr "Näytä edelliset keskustelut tämän tuttavan kanssa"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "_Call"
+msgstr "_Soita"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "Start a voice or video conversation with this contact"
+msgstr "Aloita puhelu tai videoneuvottelu tämän tuttavan kanssa"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1469
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Anteeksi mutta en halua sinua enää tuttavaluettelooni."
+
+#: ../libempathy-gtk/empathy-contact-widget.c:688
+msgid "Select"
+msgstr "Valitse"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:698
+#: ../libempathy-gtk/empathy-main-window.c:609
+msgid "Group"
+msgstr "Ryhmä"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Tietoja asiakasohjelmasta</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Tuttavan yksityiskohdat</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Tuttava</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Ryhmät</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Nimimerkki:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Syntymäpäivä:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Asiakasohjelma:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Yhteystiedot"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "Sähköposti:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Koko nimi:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "Tunniste:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "Pyydetään tietoja..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "Käyttöjärjestelmä:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Valitse ryhmät, joissa haluat tämän yhteystiedon näkyvän. Voit valita useita "
+"ryhmiä tai olla valitsematta yhtään ryhmää."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Versio:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "WWW-sivusto:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:251
+msgid "Enter the new topic you want to set for this room:"
+msgstr "Anna tälle ryhmälle asetettava uusi aihe:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:361
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s on saapunut huoneeseen"
+
+#: ../libempathy-gtk/empathy-group-chat.c:364
+#, c-format
+msgid "%s has left the room"
+msgstr "%s on poistunut huoneesta"
+
+#: ../libempathy-gtk/empathy-group-chat.c:445
+#, c-format
+msgid "Topic: %s"
+msgstr "Aihe: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:574
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Aihe asetettu: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:576
+msgid "No topic defined"
+msgstr "Aihetta ei ole annettu"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Aihe:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Ryhmäkeskustelu"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+msgid "new server"
+msgstr "uusi palvelin"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:512
+msgid "Server"
+msgstr "Palvelin:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:527
+msgid "Port"
+msgstr "Portti:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:540
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:499
+msgid "Account"
+msgstr "Käyttäjätili"
+
+#: ../libempathy-gtk/empathy-log-window.c:506
+msgid "Conversation"
+msgstr "Keskustelu"
+
+#: ../libempathy-gtk/empathy-log-window.c:516
+msgid "Date"
+msgstr "Päivämäärä"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "Keskustelut"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr "Aikaisemmat keskustelut"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "Etsi"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "_Ajalta:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "Keskusteluhuoneet"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Selaa:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Anna liityttävän huoneen nimi tai napsauta yhtä tai useampaa huonetta "
+"luettelosta."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Anna palvelin, jolta huone löytyy, tai jätä tyhjäksi jos huone on tilin "
+"nykyisellä palvelimella"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Liity"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Liity uuteen"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "_Päivitä"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"Tässä luettelossa ovat kaikki huoneet palvelimelta, johon olet kirjautunut"
+
+#: ../libempathy-gtk/empathy-main-window.c:266
+msgid "Show and edit accounts"
+msgstr "Näytä ja muokkaa tilejä"
+
+#: ../libempathy-gtk/empathy-main-window.c:630
+msgid "Contact"
+msgstr "Tuttava"
+
+#: ../libempathy-gtk/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "Muokkaa _tiliä"
+
+#: ../libempathy-gtk/empathy-main-window.c:896
+msgid "Network error"
+msgstr "Verkkovirhe"
+
+#: ../libempathy-gtk/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "Todennus epäonninstui"
+
+#: ../libempathy-gtk/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "Salausvirhe"
+
+#: ../libempathy-gtk/empathy-main-window.c:905
+msgid "Name in use"
+msgstr "Nimi on käytössä"
+
+#: ../libempathy-gtk/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr "Varmennetta ei ole annettu"
+
+#: ../libempathy-gtk/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr "Varmenne ei ole luotettu"
+
+#: ../libempathy-gtk/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr "Varmenne on vanhentunut"
+
+#: ../libempathy-gtk/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr "Varmenne ei ole vielä aktivoitu"
+
+#: ../libempathy-gtk/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr "Varmenteen verkkonimi ei täsmää"
+
+#: ../libempathy-gtk/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr "Varmenteen sormenjälki ei täsmää"
+
+#: ../libempathy-gtk/empathy-main-window.c:926
+msgid "Certificate self signed"
+msgstr "Itseallekirjoitettu varmenne"
+
+#: ../libempathy-gtk/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "Varmennevirhe"
+
+#: ../libempathy-gtk/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "Tuntematon virhe"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Tuttavaluettelo"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Yhteys"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Liity _suosikkeihin"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Hallitse suosikkeja"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Näytä _poissa linjoilta olevat tuttavat"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_Tietoja"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Käyttäjätilit"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "Uusi _keskustelu..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "_Henkilötiedot"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "_Asetukset"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Lopeta"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Soita"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "Tuttavan tunniste:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Uusi keskustelu"
+
+#: ../libempathy-gtk/empathy-preferences.c:247
+msgid "Language"
+msgstr "Kieli"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Ulkoasu</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Ääni</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Toiminta</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Tuttavaluettelo</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Käytä kielentarkistusta kielille:</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Valinnat</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Ulkoasu</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>Luettelo kielistä sisältää ainoastaan ne kielet, joille "
+"tietokoneessasi on asennettu sanakirja.</small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Automatically _connect on startup "
+msgstr "Yhdistä _käynnistettäessä "
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "Avatarit ovat käyttäjän valitsemia kuvia tuttavaluettelossa"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Chat Th_eme:"
+msgstr "Keskustelun _teema:"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Display notifications when contacts come _online"
+msgstr "Näytä huomautuksia, kun tuttavat saapuvat _linjoille"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _away"
+msgstr "Merkkiäänet poissa-tilassa"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "Enable sounds when _busy"
+msgstr "Merkkiäänet varattu-tilassa"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "General"
+msgstr "Yleinen"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Notifications"
+msgstr "Huomautukset"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Preferences"
+msgstr "Asetukset"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _avatars"
+msgstr "Näytä _avattaret"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show _smileys as images"
+msgstr "Näytä _hymiöt hymiökuvakkeina"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Show co_mpact contact list"
+msgstr "Näytä _pieni tuttavaluettelo"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by _name"
+msgstr "Järjestä _nimen mukaan"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Sort by s_tate"
+msgstr "Järjestä _tilan mukaan"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Spell Checking"
+msgstr "Kielentarkastus"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "Themes"
+msgstr "Teemat"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Avaa uusi ikkuna uusille keskusteluille"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "_Merkkiääni viestin saapuessa"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "_Käytä keskusteluhuoneille"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Itse määritellyt viestit..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Itse määriteltyviesti"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Viesti:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Tallenna viesti"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Tila:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:229
+#, c-format
+msgid "%s went offline"
+msgstr "%s poistui linjoilta"
+
+#: ../libempathy-gtk/empathy-private-chat.c:243
+#, c-format
+msgid "%s has come online"
+msgstr "%s on kirjautunut sisään"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "Sana"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "Korjausehdotukset"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Kielentarkastus"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Korjausehdotuksia:"
+
+#: ../libempathy-gtk/empathy-status-icon.c:358
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Uusi viesti käyttäjältä %s:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:423
+#, c-format
+msgid ""
+"Incoming call from %s:\n"
+"%s"
+msgstr ""
+"Puhelu käyttäjältä %s:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:727
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Liittymispyyntö käyttäjältä %s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:730
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Viesti: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Tila"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Näytä tuttavaluettelo"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:780
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%A %d. %Bta %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:78
+msgid "Classic"
+msgstr "Perinteinen"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:79
+msgid "Simple"
+msgstr "Yksinkertainen"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:80
+msgid "Clean"
+msgstr "Siisti"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:81
+msgid "Blue"
+msgstr "Sininen"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Nykyinen maa-asetusto"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "arabia"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "armenia"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "baltti"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "keltti"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "keskieurooppalainen"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "kiina, yksinkertaistettu"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "kiina, perinteinen"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "kroatia"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "kyrillinen"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "kyrillinen, Venäjä"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "kyrillinen, Ukraina"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "georgia"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "kreikka"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "gujarati"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "heprea"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "heprea, visuaalinen"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "hindi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "islanti"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "japani"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "korea"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "pohjoismainen"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "farsi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "romania"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "etelä-eurooppa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "thai"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "turkki"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "länsimaalainen"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "vietnam"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+"Sovelmassa näytettävä tuttava. Tyhjä tarkoittaa, ettei tuttavaa näytetä."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr ""
+"Tuttavan avatar-tunniste. Tyhjä tarkoittaa, ettei käyttäjällä ole avatarta."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megafoni"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Puhu!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Tietoja"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Läsnäolo"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "Aseta läsnäolosi tila"
+
+#: ../src/empathy.c:291
+msgid "- Empathy Instant Messenger"
+msgstr "- Empathy-pikaviestiohjelma"
+
+#~ msgid "Call from %s"
+#~ msgstr "Puhelu (%s)"
+
+#~ msgid "Disable"
+#~ msgstr "Poista käytöstä"
+
+#~ msgid "_New Message..."
+#~ msgstr "_Uusi viesti..."
+
+#~ msgid "New Message"
+#~ msgid_plural "New Messages"
+#~ msgstr[0] "Uusi viesti"
+#~ msgstr[1] "Uusia viestejä"
+
+#~ msgid "Chat Room"
+#~ msgstr "Keskusteluhuone"
+
+#~ msgid ""
+#~ "Subscription requested for %s\n"
+#~ "Message: %s"
+#~ msgstr ""
+#~ "Käyttäjä %s pyytää yhteyttä\n"
+#~ "Viesti: %s"
diff --git a/trunk/po/fr.po b/trunk/po/fr.po
new file mode 100644
index 000000000..0670d5c56
--- /dev/null
+++ b/trunk/po/fr.po
@@ -0,0 +1,1794 @@
+# French translation of empathy.
+# Copyright (C) 2003-2008 The Free Software Foundation, Inc.
+# This file is distributed under the same license as the empathy package.
+#
+# Frédéric Brin <duckx@mezimail.com>, 2003.
+# Lionel Henry <yoplait@tuxfamily.org>, 2003.
+# Laurent Richard <laurent.richard@lilit.be>, 2004.
+# Christophe Merlet <redfox@redfoxcenter.org>, 2004.
+# Audrey Simons <asimons@redhat.com>, 2004.
+# Quentin Delance <quentin.delance@laposte.net>, 2006.
+# Claude Paroz <claude@2xlibre.net>, 2007.
+# Jonathan Ernst <jonathan@ernstfamily.ch>, 2007.
+# Damien Durand <splinux@fedoraproject.org>, 2007.
+# Robert-André Mauchin <zebob.m@pengzone.org>, 2007-2008.
+# Frederic Peters <fpeters@0d.be>, 2007.
+# Laurent Bigonville <bigon@bigon.be>, 2007.
+# Stéphane Raimbault <stephane.raimbault@gmail.com>, 2007.
+# Christophe Benz <christophe.benz@gmail.com>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy 0.11\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-03-05 21:33+0100\n"
+"PO-Revision-Date: 2008-03-05 21:35+0100\n"
+"Last-Translator: Robert-André Mauchin <zebob.m@pengzone.org>\n"
+"Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Messagerie instantanée Empathy"
+
+# Utilisation de l'infinitif sur les infobulles du Bureau
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Envoyer et recevoir des messages instantanés"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+"Toujours ouvrir une fenêtre de discussion séparée pour les nouvelles "
+"discussions."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Caractère à ajouter à la suite du pseudonyme lors de l'utilisation de l'auto-"
+"complètement du pseudonyme (tab) dans un groupe de discussion."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Thème de la fenêtre de discussion"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr "Cochez si Empathy doit se connecter au démarrage"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Cochez si NetworkManager devrait être utilisé"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Cochez si le compte Salut est créé"
+
+#: ../data/empathy.schemas.in.h:7
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Liste séparée par des virgules des langues à utiliser pour la correction "
+"orthographique (par ex. : en, fr, nl)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Liste compacte de contacts"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Critère de tri pour la liste de contacts"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Répertoire par défaut où choisir un avatar"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Afficher une fenêtre popup quand le contact est disponible"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Activer les sons lorsque vous êtes absent"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Activer les sons lorsque vous êtes indisponible"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Activer le correcteur orthographique"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Masquer la fenêtre principale"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Masque la fenêtre principale."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Caractère d'auto-complètement du pseudonyme"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Ouvrir les nouvelles discussions dans des fenêtres séparées"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Afficher les avatars"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Afficher une astuce sur la fermeture de la fenêtre principale"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Afficher les contacts déconnectés"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Langues de la correction orthographique"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Dernier répertoire où un avatar a été choisi."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Le thème utilisé pour l'affichage dans les fenêtres de discussion."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Utiliser des frimousses graphiques"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Utiliser des sons de notification"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Utiliser des thèmes pour les salles de discussion"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically login to your accounts on "
+"startup."
+msgstr ""
+"Indique si Empathy doit se connecter automatiquement à vos comptes au "
+"démarrage."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first empathy run."
+msgstr ""
+"Indique si le compte Salut à bien été créé au premier lancement d'Empathy."
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"Indique si NetworkManager doit être utilisé pour se déconnecter ou se "
+"reconnecter automatiquement."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Indique s'il faut vérifier l'orthographe des mots saisis selon les langues "
+"choisies."
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Indique s'il faut changer les frimousses en images graphiques dans les "
+"conversations."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Indique s'il faut jouer un son quand un message arrive."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Indique s'il faut émettre des sons en cas d'absence."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Indique s'il faut émettre des sons en cas d'indisponibilité."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+"Indique s'il faut afficher une fenêtre popup lorsqu'un contact devient "
+"disponible."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Indique s'il faut afficher les avatars des contacts dans la liste des "
+"contacts et les fenêtres de discussion."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+"Indique s'il faut afficher les contacts qui sont déconnectés dans la liste "
+"des contacts."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Indique s'il faut afficher la boîte de dialogue au sujet de la fermeture de "
+"la fenêtre principale avec le bouton « x » dans la barre de titre."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Indique s'il faut afficher la liste des contacts en mode compact."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Indique s'il faut utiliser les thèmes pour les salles de discussion."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Quel critère utiliser pour le tri de la liste des contacts. Le comportement "
+"par défaut est de trier selon le nom du contact (valeur: « name »). Une "
+"valeur « state » triera la liste des contacts selon leur état."
+
+#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:149
+msgid "People nearby"
+msgstr "Personnes à proximité"
+
+#: ../libempathy/empathy-utils.c:541
+msgid "Available"
+msgstr "Disponible"
+
+#: ../libempathy/empathy-utils.c:543
+msgid "Busy"
+msgstr "Occupé"
+
+#: ../libempathy/empathy-utils.c:546
+msgid "Away"
+msgstr "Absent"
+
+#: ../libempathy/empathy-utils.c:548
+msgid "Hidden"
+msgstr "Masqué"
+
+#: ../libempathy/empathy-utils.c:551
+msgid "Offline"
+msgstr "Déconnecté"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Empathy est un logiciel libre ; vous pouvez le redistribuer et/ou le "
+"modifier selon les termes de la Licence Publique Générale GNU, telle que "
+"publiée par la Free Software Foundation ; version 2 de la licence ou (à "
+"votre discrétion) toute version ultérieure."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Empathy est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE "
+"GARANTIE ; sans même la garantie implicite de VALEUR MARCHANDE ou "
+"D'ADÉQUATION À UN BESOIN PARTICULIER. Pour plus de détails, voir la Licence "
+"Publique Générale GNU."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Un exemplaire de la Licence Publique Générale GNU doit être fourni avec "
+"Empathy ; si ce n'est pas le cas, écrivez à la Free Software Foundation, "
+"Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Un client de messagerie instantanée pour GNOME"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Frédéric Brin <duckx@mezimail.com>\n"
+"Lionel Henry <yoplait@tuxfamily.org>\n"
+"Laurent Richard <laurent.richard@lilit.be>\n"
+"Christophe Merlet <redfox@redfoxcenter.org>\n"
+"Audrey Simons <asimons@redhat.com>\n"
+"Quentin Delance <quentin.delance@laposte.net>\n"
+"Claude Paroz <claude@2xlibre.net>\n"
+"Jonathan Ernst <jonathan@ernstfamily.ch>\n"
+"Damien Durand <splinux@fedoraproject.org>\n"
+"Robert-André Mauchin <zebob.m@pengzone.org>\n"
+"Frederic Peters <fpeters@0d.be>\n"
+"Laurent Bigonville <bigon@bigon.be>\n"
+"Stéphane Raimbault <stephane.raimbault@gmail.com>\n"
+"Christophe Benz <christophe.benz@gmail.com>"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "Toutes"
+
+#: ../libempathy-gtk/empathy-account-widget.c:276
+#: ../libempathy-gtk/empathy-account-widget.c:321
+#, c-format
+msgid "%s:"
+msgstr "%s :"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Avancés</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Oublier le mot de passe et effacer la zone."
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "_UIN ICQ :"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+msgid "ICQ account settings"
+msgstr "Paramètres de compte ICQ"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "Mot de _passe :"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Charset:"
+msgstr "Jeu de _caractères :"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Port:"
+msgstr "_Port :"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:12
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Serveur :"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr "Nouveau réseau"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Réseau</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Serveurs</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Jeu de caractères :"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Crée un nouveau réseau IRC"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Modifie le réseau IRC sélectionné"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Réseau"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Réseau :"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Pseudonyme :"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Mot de passe :"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Message de départ :"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Nom réel :"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Supprime le réseau IRC sélectionné"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:13
+msgid "irc account settings"
+msgstr "paramètres de compte irc"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Outrepasser les paramètres du serveur</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "I_dentifiant de connexion :"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "Pri_orité :"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "Resso_urce :"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Utiliser l'ancien SS_L"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "Chiffr_ement requis (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Ignorer les erreurs de certificat SSL"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:13
+msgid "jabber account settings"
+msgstr "paramètres de compte jabber"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "paramètres de compte msn"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "_Adresse électronique :"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Prénom :"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_Identifiant Jabber :"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "_Nom :"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Pseudonyme :"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "Nom _publié :"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "paramètres de compte salut"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "Serveur j_aponais :"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "Utiliser _Yahoo Japan"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "Yahoo! account settings"
+msgstr "Paramètres de compte Yahoo!"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Ignore conference and chatroom invitations"
+msgstr "_Ignorer les invitations à des réunions ou à des salles de discussion"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+msgid "_Room List locale:"
+msgstr "Locale de la liste des _salles :"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:225
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Pour ajouter un nouveau compte, vous pouvez cliquer sur le bouton "
+"« Ajouter » et vous pourrez alors configurer cette nouvelle entrée."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:229
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"Pour ajouter un nouveau compte, vous devez d'abord installer le moteur "
+"correspondant à chaque protocole que vous voulez utiliser."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:236
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Aucun compte sélectionné</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Si vous ne souhaitez pas créer de compte, cliquez simplement dans la liste "
+"de gauche sur le compte que vous voulez configurer."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:243
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Aucun compte configuré</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:411
+msgid "Enabled"
+msgstr "Activé"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:421
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Comptes"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:904
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Vous êtes sur le point de supprimer votre compte %s !\n"
+"Voulez-vous vraiment continuer ?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:910
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Toutes les salles de conversation et de discussion associées ne seront PAS "
+"supprimées si vous décidez de continuez.\n"
+"\n"
+"Si vous décidez de recréer ce compte plus tard, elles seront toujours "
+"disponibles."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Nouveau compte</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Paramètres</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "C_réer"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Pour ajouter un nouveau compte, vous pouvez cliquer sur le bouton "
+"« Ajouter » et vous pourrez alors configurer cette nouvelle entrée.\n"
+"\n"
+"Si vous ne souhaitez pas créer de compte, cliquez simplement dans la liste "
+"de gauche sur le compte que vous voulez configurer."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Type :"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:449
+msgid "Select Your Avatar Image"
+msgstr "Sélection de l'image d'avatar"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:452
+msgid "No Image"
+msgstr "Aucune image"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:512
+msgid "Images"
+msgstr "Images"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:516
+msgid "All Files"
+msgstr "Tous les fichiers"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Cliquer pour agrandir"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+msgid "End Call"
+msgstr "Fin d'appel"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "Entrée"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "Sourdine"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "Sortie"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "Envoyer la vidéo"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Start Call"
+msgstr "Début d'appel"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:7
+msgid "Volume"
+msgstr "Volume"
+
+#: ../libempathy-gtk/empathy-chat.c:445
+msgid "Disconnected"
+msgstr "Déconnecté"
+
+#: ../libempathy-gtk/empathy-chat.c:580
+msgid "offline"
+msgstr "déconnecté"
+
+#: ../libempathy-gtk/empathy-chat.c:583
+msgid "invalid contact"
+msgstr "contact non valide"
+
+#: ../libempathy-gtk/empathy-chat.c:586
+msgid "permission denied"
+msgstr "permission refusée"
+
+#: ../libempathy-gtk/empathy-chat.c:589
+msgid "too long message"
+msgstr "message trop long"
+
+#: ../libempathy-gtk/empathy-chat.c:592
+msgid "not implemented"
+msgstr "non implémenté"
+
+#: ../libempathy-gtk/empathy-chat.c:595
+msgid "unknown"
+msgstr "inconnu"
+
+#: ../libempathy-gtk/empathy-chat.c:599
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Erreur à l'envoi du message « %s » : %s"
+
+#: ../libempathy-gtk/empathy-chat.c:1056
+msgid "Insert Smiley"
+msgstr "Insérer une frimousse"
+
+#: ../libempathy-gtk/empathy-chat.c:1103
+msgid "_Check Word Spelling..."
+msgstr "_Vérifier l'orthographe..."
+
+#: ../libempathy-gtk/empathy-chat.c:1558
+msgid "Connected"
+msgstr "Connecté"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Nettoyer"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "Appe_ler"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "Modifier le _sujet..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+msgid "Chat"
+msgstr "Discuter"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "Infor_mations du contact"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "Cu_t"
+msgstr "Co_uper"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "In_vite..."
+msgstr "In_viter..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Insert _Smiley"
+msgstr "Insérer une _frimousse"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invitation _message:"
+msgstr "_Message d'invitation :"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+msgid "Invite"
+msgstr "Inviter"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Rejoindre _nouveau"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Left"
+msgstr "Déplacer l'onglet à _gauche"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Move Tab _Right"
+msgstr "Déplacer l'onglet à _droite"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "Select who would you like to invite:"
+msgstr "Sélectionnez la personne à inviter :"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+msgid "You have been invited to join a chat conference."
+msgstr "Vous avez été invité(e) à joindre une salle de discussion"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "A_jouter un contact..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Add To Favorites"
+msgstr "_Ajouter aux favoris..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Close"
+msgstr "_Fermer"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Sommaire"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Conversation"
+msgstr "_Conversation"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+msgid "_Copy"
+msgstr "_Copier"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Detach Tab"
+msgstr "_Détacher l'onglet"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "É_diter"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "Aid_e"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Next Tab"
+msgstr "Onglet _suivant"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Paste"
+msgstr "C_oller"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Previous Tab"
+msgstr "Onglet _précédent"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "_Salle"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+msgid "_Show Contacts"
+msgstr "Afficher les contacts"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:30
+msgid "_Tabs"
+msgstr "_Onglets"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:31
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr "_Afficher les conversations précédentes"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Copy Link Address"
+msgstr "_Copier l'adresse du lien"
+
+#: ../libempathy-gtk/empathy-chat-view.c:449
+msgid "_Open Link"
+msgstr "_Ouvrir le lien"
+
+#: ../libempathy-gtk/empathy-chat-window.c:699
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Conversations (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1299
+msgid "Typing a message."
+msgstr "Saisie d'un message."
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "Nom"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "Salle"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr "Connexion automatique"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+msgid "Account:"
+msgstr "Compte :"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Éditer les salles favorites"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Joindre la salle au _démarrage"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr ""
+"Joindre cette salle de discussion quand Empathy démarre et que vous êtes "
+"connecté"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Gérer les salles favorites"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Nom :"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "_Serveur :"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "Sall_e :"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:176
+msgid "Personal Information"
+msgstr "Informations personnelles"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+msgid "Edit Contact Information"
+msgstr "Modifier les informations du contact"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:182
+msgid "Contact Information"
+msgstr "Informations du contact"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:277
+msgid "I would like to add you to my contact list."
+msgstr "Je voudrais vous ajouter à ma liste de contacts."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:301
+msgid "New Contact"
+msgstr "Nouveau contact"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Décider plus _tard"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Requête d'abonnement"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:197
+msgid "_Contact"
+msgstr "_Contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:201
+msgid "_Group"
+msgstr "_Groupe"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr "_Discuter"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+msgid "Chat with contact"
+msgstr "Discuter avec un contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "Infor_mation"
+msgstr "Infor_mations"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "View contact information"
+msgstr "Voir les informations sur le contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Re_name"
+msgstr "Re_nommer"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Rename"
+msgstr "Renommer"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+msgid "Edit the groups and name for this contact"
+msgstr "Éditer les groupes et le nom de ce contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "_Remove"
+msgstr "_Supprimer"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "Remove contact"
+msgstr "Supprimer le contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "_Invite to Chat Room"
+msgstr "_Inviter dans la salle de discussion"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "Invite to a currently open chat room"
+msgstr "Inviter dans une salle de discussion actuellement ouverte"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "_Send File..."
+msgstr "_Envoyer un fichier..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "Send a file"
+msgstr "Envoie un fichier"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+msgid "View previous conversations with this contact"
+msgstr "Affiche les conversations précédentes avec ce contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "_Call"
+msgstr "_Appeler"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "Start a voice or video conversation with this contact"
+msgstr "Démarre une conversation audio ou vidéo avec ce contact"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1469
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Désolé, je ne te veux plus dans ma liste de contacts."
+
+#: ../libempathy-gtk/empathy-contact-widget.c:688
+msgid "Select"
+msgstr "Sélectionner"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:698
+#: ../libempathy-gtk/empathy-main-window.c:609
+msgid "Group"
+msgstr "Groupe"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Informations du client</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Détails sur le contact</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Contact</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Groupes</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Alias :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Anniversaire :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Client :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Informations sur le contact"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "Adresse électronique :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Nom complet :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "Identifiant :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "Demande des informations en cours..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "OS :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Sélectionnez les groupes auxquels ce contact appartiendra ; vous pouvez "
+"sélectionner plus d'un groupe ou aucun groupe."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Version :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "Site Web :"
+
+#: ../libempathy-gtk/empathy-group-chat.c:251
+msgid "Enter the new topic you want to set for this room:"
+msgstr "Saisissez le nouveau sujet à définir pour cette salle :"
+
+#: ../libempathy-gtk/empathy-group-chat.c:361
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s a rejoint la salle"
+
+#: ../libempathy-gtk/empathy-group-chat.c:364
+#, c-format
+msgid "%s has left the room"
+msgstr "%s a quitté la salle"
+
+#: ../libempathy-gtk/empathy-group-chat.c:445
+#, c-format
+msgid "Topic: %s"
+msgstr "Sujet : %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:574
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Sujet défini : %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:576
+msgid "No topic defined"
+msgstr "Pas de sujet défini"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Sujet :</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Groupe de discussion"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+msgid "new server"
+msgstr "nouveau serveur"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:512
+msgid "Server"
+msgstr "Serveur"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:527
+msgid "Port"
+msgstr "Port"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:540
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:499
+msgid "Account"
+msgstr "Compte"
+
+#: ../libempathy-gtk/empathy-log-window.c:506
+msgid "Conversation"
+msgstr "Conversation"
+
+#: ../libempathy-gtk/empathy-log-window.c:516
+msgid "Date"
+msgstr "Date"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "Conversations"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr "Conversations précédentes"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "Rechercher"
+
+# Search est le titre de l'onglet, et est suivi de _For placé devant la zone de
+# texte à rechercher, j'ai donc essayé d'adapter au mieux.
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "ce _terme :"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "Salles de discussion"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Parcourir :"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Saisissez le nom de salle à rejoindre ou cliquez sur une ou plusieurs salles "
+"dans la liste."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Saisissez le serveur qui héberge la salle ou laissez-le vide si la salle est "
+"sur le même serveur que le compte actuel"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Joindre"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Joindre une nouvelle salle"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "_Actualiser"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"Cette liste représente toutes les salles de discussion hébergées sur le "
+"serveur actuel."
+
+#: ../libempathy-gtk/empathy-main-window.c:266
+msgid "Show and edit accounts"
+msgstr "Afficher et modifier les comptes"
+
+#: ../libempathy-gtk/empathy-main-window.c:630
+msgid "Contact"
+msgstr "Contact"
+
+#: ../libempathy-gtk/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "Mo_difier le compte"
+
+#: ../libempathy-gtk/empathy-main-window.c:896
+msgid "Network error"
+msgstr "Erreur réseau"
+
+#: ../libempathy-gtk/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "L'authentification a échoué"
+
+#: ../libempathy-gtk/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "Erreur de chiffrement"
+
+#: ../libempathy-gtk/empathy-main-window.c:905
+msgid "Name in use"
+msgstr "Nom déjà utilisé"
+
+#: ../libempathy-gtk/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr "Certificat non fourni"
+
+#: ../libempathy-gtk/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr "Certificat non validé"
+
+#: ../libempathy-gtk/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr "Le certificat a expiré"
+
+#: ../libempathy-gtk/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr "Certificat non activé"
+
+#: ../libempathy-gtk/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr "Le nom de l'hôte du certificat ne correspond pas"
+
+#: ../libempathy-gtk/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr "L'empreinte du certificat ne correspond pas"
+
+#: ../libempathy-gtk/empathy-main-window.c:926
+msgid "Certificate self signed"
+msgstr "Certificat auto-signé"
+
+#: ../libempathy-gtk/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "Erreur de certificat"
+
+#: ../libempathy-gtk/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "Erreur inconnue"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Liste des contacts"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Contexte"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Joindre les _favoris"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Gérer les favoris"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Afficher les contacts _déconnectés"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "À _propos"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Comptes"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_Nouvelle conversation..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "_Informations personnelles"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "_Préférences"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Quitter"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Appel"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "Identifiant du contact :"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Nouvelle conversation"
+
+#: ../libempathy-gtk/empathy-preferences.c:247
+msgid "Language"
+msgstr "Langue"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Apparence</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Audio</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Comportement</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Liste des contacts</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Activer la correction orthographique pour les langues :</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Options</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Aspect</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>La liste de langues ne contient que les langues pour lesquelles vous "
+"avez un dictionnaire installé.</small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Automatically _connect on startup "
+msgstr "Se _connecter automatiquement au démarrage"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Les avatars sont des images choisies par l'utilisateur et visibles dans la "
+"liste de contacts"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Chat Th_eme:"
+msgstr "_Thème de la fenêtre de discussion :"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Display notifications when contacts come _online"
+msgstr "Afficher des notifications quand les contacts se c_onnectent"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _away"
+msgstr "Activer les sons lorsque vous êtes _absent"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "Enable sounds when _busy"
+msgstr "Activer les sons lorsque vous êtes _occupé"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "General"
+msgstr "Général"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Notifications"
+msgstr "Notifications"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Preferences"
+msgstr "Préférences"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _avatars"
+msgstr "Afficher les _avatars"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show _smileys as images"
+msgstr "Convertir les _frimousses en images"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Show co_mpact contact list"
+msgstr "Afficher la liste co_mpacte des contacts"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by _name"
+msgstr "Trié par _nom"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Sort by s_tate"
+msgstr "Trié par é_tat"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Spell Checking"
+msgstr "Correction orthographique"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "Themes"
+msgstr "Thèmes"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Ouvrir les nouvelles discussions dans des fenêtres séparées"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "_Jouer un son lors de la réception des messages"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "_Utiliser pour les salles de discussion"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Messages personnalisés..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Message personnalisé"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Message :"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Enregistrer le message"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "État :"
+
+#: ../libempathy-gtk/empathy-private-chat.c:229
+#, c-format
+msgid "%s went offline"
+msgstr "%s s'est déconnecté"
+
+#: ../libempathy-gtk/empathy-private-chat.c:243
+#, c-format
+msgid "%s has come online"
+msgstr "%s s'est connecté"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "Mot"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "Suggestions pour le mot"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Correcteur orthographique"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Suggestions pour le mot :"
+
+#: ../libempathy-gtk/empathy-status-icon.c:369
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Nouveau message de %s\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:434
+#, c-format
+msgid ""
+"Incoming call from %s:\n"
+"%s"
+msgstr ""
+"Appel entrant de %s :\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:738
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Demande d'abonnement de %s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:741
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Message : %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "État"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Afficher la liste des contacts"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:780
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:78
+msgid "Classic"
+msgstr "Classique"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:79
+msgid "Simple"
+msgstr "Simple"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:80
+msgid "Clean"
+msgstr "Propre"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:81
+msgid "Blue"
+msgstr "Bleu"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Locale actuelle"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Arabe"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Arménien"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Balte"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Celtique"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Europe centrale"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Chinois simplifié"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Chinois traditionnel"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Croate"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Cyrillique"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Cyrillique/Russe"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Cyrillique/Ukrainien"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Géorgien"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Grec"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Gujarâtî"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhī"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Hébreu"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Hébreu visuel"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindî"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Islandais"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Japonais"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Coréen"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Nordique"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Perse"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Roumain"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Europe méridionale"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Thaï"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Turc"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Occidental"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnamien"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+"Le contact à afficher dans l'applet. Laissez vide pour n'afficher aucun "
+"contact."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr ""
+"Le jeton de l'avatar du contact. Si le contact n'a pas d'avatar, cette "
+"valeur reste vide."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Mégaphone"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Parlez !"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Informations"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Présence"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "Définissez votre présence"
+
+#: ../src/empathy.c:205
+msgid "- Empathy Instant Messenger"
+msgstr "- Messagerie instantanée Empathy"
diff --git a/trunk/po/ga.po b/trunk/po/ga.po
new file mode 100644
index 000000000..58d4b4775
--- /dev/null
+++ b/trunk/po/ga.po
@@ -0,0 +1,1141 @@
+# Irish (gaeilge) translations for gossip
+# Copyright (C) 2004 Alastair McKinstry <mckinstry@computer.org>
+# This file is distributed under the same license as the gossip package.
+# Alastair McKinstry <mckinstry@computer.org>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2004-01-02 07:20+0000\n"
+"Last-Translator: Alastair McKinstry <mckinstry@computer.org>\n"
+"Language-Team: Irish <gaeilge-gnulinux@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Gossip - Caint"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "_Taispeán Líosta Tadhall"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Gossip - Caint"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "_Taispeán Líosta Tadhall"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show hint about closing the main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether to show the contact list in compact mode or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr ""
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr ""
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr ""
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Taispeán Líosta Tadhall"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "Gossip - Caint"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "_Taispeán Líosta Tadhall"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "Ceangail"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+msgid "_About"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "Ceangail"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "_Ealu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Ealu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+#, fuzzy
+msgid "_Room"
+msgstr "_Seomra:"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Taispeán Líosta Tadhall"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+msgid "Disable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+msgid "<b>No Account Selected</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+msgid "<b>No Accounts Configured</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+msgid "<b>Account</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "Gossip - Caint"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "Ceangail"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "G_lan"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "Ainm:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+msgid "_Type:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "_Pasfhocal:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+msgid "Use encryption (SS_L)"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "_Pasfhocal:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Freastalaí:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+#, fuzzy
+msgid "Disconnected"
+msgstr "Ceangail"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+#, fuzzy
+msgid "Connected"
+msgstr "Ceangail"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "G_lan"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+msgid "Cu_t"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+msgid "In_vite..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+msgid "Invitation _message:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+#, fuzzy
+msgid "_Show Contacts"
+msgstr "_Taispeán Líosta Tadhall"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "Gossip - Caint"
+msgstr[1] "Gossip - Caint"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Gossip - Caint"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "Ceangail"
+msgstr[1] "Ceangail"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "Gossip - Caint"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "Gossip - Caint"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "Chat with contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "Infor_mation"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "View contact information"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "Ainm:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "_Leasainm:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "Edit the groups and name for this contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "_Remove"
+msgstr "S_críos"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "_Scríos"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "Gossip - Caint"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "Send a file"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "View previous conversations with this contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "_Taispeán Líosta Tadhall"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "Ceangail"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+msgid "Notifications"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+msgid "Preferences"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "_Taispeán Líosta Tadhall"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "Gossip - Caint"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr ""
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "G_lan"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+msgid "Are you sure you want to clear the list?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+#, fuzzy
+msgid "Clear List"
+msgstr "G_lan"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "Gossip - Caint"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "Gossip - Caint"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "G_lan"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr ""
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "Earraidh gan aithne"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Earraidh gan aithne"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Earraidh gan aithne"
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Gossip - Caint"
+
+#~ msgid "Home"
+#~ msgstr "Baile"
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "Ceangail"
+
+#~ msgid "Connect"
+#~ msgstr "Ceangail"
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "Gossip - Caint"
+#~ msgstr[1] "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Ainm:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Seomra:"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "Ceangail"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Earraidh gan aithne"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "Ceangail"
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Ceangail"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "AINM-CÚNTAS"
+
+#~ msgid "[default]"
+#~ msgstr "[gnáth]"
+
+#, fuzzy
+#~ msgid "Chat Rooms"
+#~ msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "[gnáth]"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "_Leasainm:"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "Ceangail"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "Group Chat"
+#~ msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "Ainm:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "Freastalaí:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "_Leasainm:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Seomra:"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "Ceangail"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Ceangail"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "Edit Groups"
+#~ msgstr "Gossip - Caint"
+
+#~ msgid "Name:"
+#~ msgstr "Ainm:"
+
+#, fuzzy
+#~ msgid "Search"
+#~ msgstr "_Cuardaigh..."
+
+#, fuzzy
+#~ msgid "Spell Checker"
+#~ msgstr "Gossip - Caint"
+
+#~ msgid "Version:"
+#~ msgstr "Leagan:"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Ceangail"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Leagan:"
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "_Pasfhocal:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "Ainm:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Leasainm:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Pasfhocal:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Ainm:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Gossip - Caint"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Gossip - Caint"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#, fuzzy
+#~ msgid "Nickname:"
+#~ msgstr "_Leasainm:"
+
+#~ msgid "Server:"
+#~ msgstr "Freastalaí:"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Níl"
+
+#~ msgid "_Search..."
+#~ msgstr "_Cuardaigh..."
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Tá"
+
+#, fuzzy
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - Caint"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "Leagan:"
+
+#~ msgid "Details:"
+#~ msgstr "Sonraí:"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "Ó:"
+
+#~ msgid "To:"
+#~ msgstr "Do:"
+
+#~ msgid "C_onnect"
+#~ msgstr "C_eangail"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "_Add"
+#~ msgstr "_Suim"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
diff --git a/trunk/po/gl.po b/trunk/po/gl.po
new file mode 100644
index 000000000..1c8b9559d
--- /dev/null
+++ b/trunk/po/gl.po
@@ -0,0 +1,1934 @@
+# translation of gl.po to Galego
+# translation of empathy.HEAD.gl.po to
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Ignacio Casal Quinteiro <icq@svn.gnome.org>, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: gl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-14 11:19+0200\n"
+"PO-Revision-Date: 2008-05-14 11:31+0200\n"
+"Last-Translator: Ignacio Casal Quinteiro <icq@svn.gnome.org>\n"
+"Language-Team: Galego <proxecto@trasno.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Mensaxería na Internet de Empathy"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Envíe e reciba mensaxes instantáneas"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Abrir sempre nunha ventá de conversa separada para conversas novas."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Carácter a engadir despois do alcume cando se usa completado de alcume "
+"(separador) na conversa de grupo."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Tema da ventá de conversa"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should auto-connect on startup"
+msgstr "Comproba se Empathy debería conectarse automaticamente ao inicio"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Comproba se se debería usar NetworkManager"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Comproba se se creou a conta Salut"
+
+#: ../data/empathy.schemas.in.h:7
+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 na revisión ortográfica "
+"(ex. en, gl, es)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Lista compacta de contactos"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Criterio de ordenamento da lista de contactos"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Directorio predeterminado para seleccionar un avatar"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Activar ventá emerxente cando un contacto está dispoñible"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Activar son ao ausentarse"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Activar son cando se está ocupado"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Activar corrector ortográfico"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Ocultar a ventá principal"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Ocultar a ventá principal."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Carácter de completado de alcume"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Abrir conversas novas en ventás separadas"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Mostrar avatares"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Mostrar consello sobre como pechar a ventá principal"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Mostrar os contactos desconectados"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Linguas para revisión ortográfica"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "O último directorio do que foi escollido un avatar."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "O tema que se usará para mostrar a conversa nas ventás de conversas."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Usar emoticonas gráficas"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Usar sons de notificación"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Usar tema para salas de conversas"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically log in to your accounts on "
+"startup."
+msgstr ""
+"Indica ou non se Empathy debería inciar sesión automaticamente nas súas ao "
+"inicio."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first Empathy run."
+msgstr ""
+"Indica se a conta Salut creouse cando executou por primeira vez Empathy."
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"Indica ou non se se debería usar network manager para desconectar/reconectar "
+"automaticamente."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Indica se se debe ou non revisar as palabras tecleadas con respecto aos "
+"idiomas cos que quere comprobalo."
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Indica se debe ou non converter as emoticonas en imaxes gráficas nas "
+"conversas."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Indica se debe reproducir un son cando cheguen mensaxes."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Indica se debe ou non reproducir sons cando esté ausente."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Indica se debe ou non reproducir sons cando esté ocupado."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+"Indica se debe ou non mostrar unha ventá emerxente cando un contacto volva a "
+"estar dispoñible."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Indica se debe ou non mostrar os avatares para os contactos na lista de "
+"contactos e ventás de conversas."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+"Indica se debe ou non mostrar os contactos que están deconectados na lista "
+"de contactos"
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Indica se debe ou non mostrar unha mensaxe de diálogo sobre como pechar a "
+"ventá principal co botón 'x' na barra de título."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Indica se debe ou non mostrar a lista de contactos en modo compacto."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Indica se debe ou non usar o tema para salas de conversa."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Que criterio usar ao ordenar a lista de contactos. O criterio por defecto é "
+"ordenar polo nome do contacto co valor \"name\". Un valor de \"state\" "
+"ordenará a lista polo estado."
+
+#: ../libempathy/empathy-tp-contact-list.c:665 ../src/empathy.c:244
+msgid "People nearby"
+msgstr "Xente máis próxima"
+
+#: ../libempathy/empathy-utils.c:466
+msgid "Available"
+msgstr "Dispoñible"
+
+#: ../libempathy/empathy-utils.c:468
+msgid "Busy"
+msgstr "Ocupado"
+
+#: ../libempathy/empathy-utils.c:471
+msgid "Away"
+msgstr "Ausente"
+
+#: ../libempathy/empathy-utils.c:473
+msgid "Hidden"
+msgstr "Oculto"
+
+#: ../libempathy/empathy-utils.c:476
+msgid "Offline"
+msgstr "Desconectado"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:335
+msgid "All"
+msgstr "Todo"
+
+#: ../libempathy-gtk/empathy-account-widget.c:284
+#: ../libempathy-gtk/empathy-account-widget.c:329
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Avanzado</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Olvidar o contrasinal e limpar a entrada."
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "_Contrasinal:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+msgid "Screen _Name:"
+msgstr "_Nome en pantalla:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Port:"
+msgstr "_Porto:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+#: ../src/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Servidor:"
+
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "I_D de sesión:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "_UIN ICQ:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "_Charset:"
+msgstr "_Conxunto de caracteres:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:245
+msgid "New Network"
+msgstr "Nova rede"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Rede</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Servidores</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Conxunto de caracteres:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Crear unha rede IRC nova"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Editar a rede IRC seleccionada"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Rede"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Rede:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Alcume:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Contrasinal:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Mensaxe de saída:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Nome real:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Eliminar a rede IRC seleccionada"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Substituír a configuración do servidor</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "Pri_oridade:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "Rec_urso:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Usar antigo SS_L"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "É n_ecesario cifrado (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Ignorar erros do certificado SSL"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_Email:"
+msgstr "_Correo-e:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Nome: "
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "ID _Jabber:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "Ape_lidos:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../src/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "Alcu_me:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "Nome _publicado:"
+
+#. look up the DNS SRV record at the service's domain for the host name of a STUN server.
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+msgid "Discover STUN"
+msgstr "Descubrir STUN"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+msgid "Stun Server:"
+msgstr "Servidor Stun:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+msgid "Stun port:"
+msgstr "Porto Stun:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+msgid "_Username:"
+msgstr "Nome de _usuario:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "Servidor X_aponés:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "Usar _Yahoo Japan"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Ignore conference and chatroom invitations"
+msgstr "_Ignorar invitacións a conferencias e salas de conversas"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Room List locale:"
+msgstr "Configuración da lista de _salas:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:226
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Para engadir unha nova conta, pode premer no botón 'Engadir' e crearase unha "
+"nova entrada para que a configure."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:230
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"Para engadir unha nova conta, primeiro debe instalar un \"backend\" para "
+"cada protocolo que queira usar."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Ningunha conta seleccionada</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:238
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Se non quere engadir unha conta, simplemente prema na conta que quere "
+"configurar na lista da esquerda."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:244
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Non hai ningunha conta configurada</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:424
+msgid "Enabled"
+msgstr "Activado"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:434
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Contas"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:916
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Vai a eliminar a súa conta %s!\n"
+"Está seguro de que quere proceder?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:922
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Calquer conversa ou sala de conversa asociada NON se eliminará se decide "
+"proceder.\n"
+"\n"
+"Debería decidir engadir a conta máis tarde, estarán aínda dispoñibles."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Nova conta</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Axustes</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "Cr_ear"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Para engadir unha nova conta, pode premer no botón 'Engadir' e crearase unha "
+"nova entrada para que a configure.\n"
+"\n"
+"Se non quere engadir unha conta, simplemente prema na conta que quere "
+"configurar na lista da esquerda."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Tipo:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:457
+msgid "Select Your Avatar Image"
+msgstr "Seleccione o seu Avatar"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:460
+msgid "No Image"
+msgstr "Sen imaxe"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:520
+msgid "Images"
+msgstr "Imaxes"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:524
+msgid "All Files"
+msgstr "Todos os ficheiros"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:294
+msgid "Click to enlarge"
+msgstr "Prema para agrandar"
+
+#: ../libempathy-gtk/empathy-chat.c:493
+msgid "offline"
+msgstr "desconectado"
+
+#: ../libempathy-gtk/empathy-chat.c:496
+msgid "invalid contact"
+msgstr "contacto inválido"
+
+#: ../libempathy-gtk/empathy-chat.c:499
+msgid "permission denied"
+msgstr "permiso denegado"
+
+#: ../libempathy-gtk/empathy-chat.c:502
+msgid "too long message"
+msgstr "mensaxe demasiado longa"
+
+#: ../libempathy-gtk/empathy-chat.c:505
+msgid "not implemented"
+msgstr "sen implementar"
+
+#: ../libempathy-gtk/empathy-chat.c:508
+msgid "unknown"
+msgstr "descoñecido"
+
+#: ../libempathy-gtk/empathy-chat.c:512
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Erro enviando a mensaxe '%s': %s"
+
+#: ../libempathy-gtk/empathy-chat.c:542
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Tema establecido a: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:544
+msgid "No topic defined"
+msgstr "Tema sen definir"
+
+#: ../libempathy-gtk/empathy-chat.c:950
+msgid "Insert Smiley"
+msgstr "Inserir emoticona"
+
+#: ../libempathy-gtk/empathy-chat.c:997
+msgid "_Check Word Spelling..."
+msgstr "_Comprobar ortografía..."
+
+#: ../libempathy-gtk/empathy-chat.c:1099
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s uniuse á sala"
+
+#: ../libempathy-gtk/empathy-chat.c:1102
+#, c-format
+msgid "%s has left the room"
+msgstr "%s deixou a sala"
+
+#: ../libempathy-gtk/empathy-chat.c:1216 ../src/empathy.c:126
+#: ../src/empathy-call-window.c:389
+msgid "Disconnected"
+msgstr "Desconectado"
+
+#: ../libempathy-gtk/empathy-chat.c:1588
+msgid "Connected"
+msgstr "Conectado"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Tema:</b>"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Grupo de conversa"
+
+#: ../libempathy-gtk/empathy-chat-view.c:430
+msgid "_Copy Link Address"
+msgstr "_Copiar o enderezo da ligazón"
+
+#: ../libempathy-gtk/empathy-chat-view.c:438
+msgid "_Open Link"
+msgstr "_Abrir ligazón"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:180
+msgid "Personal Information"
+msgstr "Información persoal"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+msgid "Edit Contact Information"
+msgstr "Editar a información do contacto"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:186
+msgid "Contact Information"
+msgstr "Información do contacto"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:281
+msgid "I would like to add you to my contact list."
+msgstr "Gustaríame engadirte á miña lista de contactos."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:305
+msgid "New Contact"
+msgstr "Novo contacto"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Decidir _despois"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Solicitude de subscrición"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1164
+#, c-format
+msgid "Do you really want to remove the group '%s'?"
+msgstr "Está seguro de que quere eliminar o grupo '%s'?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1166
+msgid "Removing group"
+msgstr "Eliminando grupo"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1213
+#: ../libempathy-gtk/empathy-contact-list-view.c:1293
+msgid "_Remove"
+msgstr "_Eliminar"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1243
+#, c-format
+msgid "Do you really want to remove the contact '%s'?"
+msgstr "Está seguro de que quere eliminar o contacto '%s'?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1245
+msgid "Removing contact"
+msgstr "Eliminando contacto"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1250
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Síntoo, non te quero na miña lista de contactos máis."
+
+#: ../libempathy-gtk/empathy-contact-menu.c:108
+#: ../src/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_Conversa"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:129
+msgid "_Call"
+msgstr "_Chamar"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:168
+#: ../src/empathy-main-window.glade.h:17
+msgid "_View Previous Conversations"
+msgstr "_Ver conversas anteriores"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:196
+msgid "Infor_mation"
+msgstr "Infor_mación"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:223
+#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:694
+msgid "Select"
+msgstr "Seleccionar"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:704
+#: ../src/empathy-main-window.c:628
+msgid "Group"
+msgstr "Grupo"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Información de cliente</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Detalles do contacto</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Contacto</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Grupos</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+#: ../src/empathy-chatrooms-window.glade.h:1
+#: ../src/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Conta:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Alcume:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Cumpreanos:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Cliente:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Información do contacto"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "Correo-e:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Nome completo:"
+
+#. Identifier to connect to Instant Messaging network
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Identifier:"
+msgstr "Identificador:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "Information requested..."
+msgstr "Información solicitada..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid "OS:"
+msgstr "SO:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Seleccione os grupos nos que quere que apareza este contacto, pode "
+"seleccionar máis de un ou ningún grupo."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Version:"
+msgstr "Versión:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
+msgid "Web site:"
+msgstr "Sitio web:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:284
+msgid "new server"
+msgstr "servidor novo"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:513
+msgid "Server"
+msgstr "Servidor"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:528
+msgid "Port"
+msgstr "Porto"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:541
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+msgid "Account"
+msgstr "Conta"
+
+#: ../libempathy-gtk/empathy-log-window.c:504 ../src/empathy-chat-window.c:275
+msgid "Conversation"
+msgstr "Conversa"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+msgid "Date"
+msgstr "Data"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Conversations"
+msgstr "Conversas"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Previous Conversations"
+msgstr "Conversas anteriores"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:5
+msgid "Search"
+msgstr "Buscar"
+
+#. Searching *for* something
+#: ../libempathy-gtk/empathy-log-window.glade.h:7
+msgid "_For:"
+msgstr "_Por:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Chamar"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+#: ../src/empathy-chat-window.glade.h:2
+msgid "Chat"
+msgstr "Conversa"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "ID de contacto:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Nova conversa"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:685
+msgid "Custom messages..."
+msgstr "Mensaxes personalizadas..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Mensaxe personalizada"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Mensaxe:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Gardar mensaxe"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Estado:"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:88
+msgid "Word"
+msgstr "Palabra"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:265
+msgid "Suggestions for the word"
+msgstr "Suxestións para a palabra"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Comprobador ortográfico"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Suxestións para a palabra:"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:745
+#: ../libempathy-gtk/empathy-theme-irc.c:293
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:73
+msgid "Classic"
+msgstr "Clásico"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:74
+msgid "Simple"
+msgstr "Sinxela"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:75
+msgid "Clean"
+msgstr "Limpar"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:76
+msgid "Blue"
+msgstr "Azul"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1326
+msgid "Unable to open URI"
+msgstr "Non se puido abrir a URI"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Configuración rexional actual"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Árabe"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Armenio"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Báltico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Celta"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Chinés tradicional"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Croata"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Cirílico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Cirílico/Ruso"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+#, fuzzy
+msgid "Cyrillic/Ukrainian"
+msgstr "Círilico/Ucraniano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Xeorxiano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Grego"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Guxarati"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Hebreo"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Hebreo visual"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindú"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Islandés"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Xaponés"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Coreano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Nórdico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Persa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Rumano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Europa do sur"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Tailandés"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Turco"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Occidental"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnamita"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+"O contacto a mostrar na applet. Se se deixa baleiro non se mostrará ningún "
+"contacto."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr ""
+"O avatar do contacto. Se se deixa baleiro non se mostrará ningún avatar."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megáfono"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Falar!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_Sobre"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Información"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+#: ../src/empathy-main-window.glade.h:15
+msgid "_Preferences"
+msgstr "_Preferencias"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Presencia"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:106
+msgid "Set your own presence"
+msgstr "Establecer a súa presencia"
+
+#: ../src/empathy.c:129
+msgid "Invalid handle"
+msgstr "Manexador inválido"
+
+#: ../src/empathy.c:132
+msgid "No matching connection"
+msgstr "Non hai unha conexión coincidinte"
+
+#: ../src/empathy.c:135
+msgid "Invalid account"
+msgstr "Conta inválida"
+
+#: ../src/empathy.c:138
+msgid "Presence failure"
+msgstr "Fallo de presencia"
+
+#: ../src/empathy.c:141
+msgid "No accounts"
+msgstr "Sen contas"
+
+#: ../src/empathy.c:144 ../src/empathy-main-window.c:896
+msgid "Network error"
+msgstr "Erro da rede"
+
+#: ../src/empathy.c:147
+msgid "Contact does not support voice"
+msgstr "O contacto non soporta voz"
+
+#: ../src/empathy.c:150
+msgid "Lowmem"
+msgstr "Memoria baixa"
+
+#: ../src/empathy.c:153
+msgid "Channel request generic error"
+msgstr "Erro xenérico na petición do canal"
+
+#: ../src/empathy.c:156
+msgid "Channel banned"
+msgstr "Expulsado do canal"
+
+#: ../src/empathy.c:159
+msgid "Channel full"
+msgstr "Canal cheo"
+
+#: ../src/empathy.c:162
+msgid "Channel invite only"
+msgstr "O canal é só de invitación"
+
+#: ../src/empathy.c:165
+msgid "Unknown error code"
+msgstr "Erro de código descoñecido"
+
+#: ../src/empathy.c:369
+msgid "Don't connect on startup"
+msgstr "Non conectarse automaticamente ao inicio"
+
+#: ../src/empathy.c:381
+msgid "- Empathy Instant Messenger"
+msgstr "- Mensaxería instantánea de Empathy"
+
+#: ../src/empathy-about-dialog.c:64
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"O Empathy é software libre; pode redistribuílo ou modificadlo baixo os "
+"termos da Licenza Pública Xeral de GNU publicada pola Free Software "
+"Foundation; xa sexa na versión 2 da Licenza como (segundo a súa escolla) en "
+"calquera versión posterior."
+
+#: ../src/empathy-about-dialog.c:68
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"O Empathy distribúese coa esperanza de que sexa útil, mais SEN NINGUNHA "
+"GARANTÍA; mesmo sen a garantía implícita de COMERCIALIZACIÓN ou IDONEIDADE "
+"PARA UN PROPÓSITO PARTICULAR. Para máis detalles vexa a Licenza Pública "
+"Xeral de GNU."
+
+#: ../src/empathy-about-dialog.c:72
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Debeu recibir unha copia da Licenza Pública Xeral de GNU xunto co Nautilus; "
+"en caso contrario, escriba á Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+
+#: ../src/empathy-about-dialog.c:100
+msgid "An Instant Messaging client for GNOME"
+msgstr "Un cliente de mensaxería instantánea para Gnome"
+
+#: ../src/empathy-about-dialog.c:106
+msgid "translator-credits"
+msgstr "Ignacio Casal Quinteiro <nacho.resa@gmail.com>"
+
+#: ../src/empathy-call-window.c:139
+msgid "Closed"
+msgstr "Pechado"
+
+#: ../src/empathy-call-window.c:251
+msgid "End this call?"
+msgstr "Rematar esta chamada?"
+
+#: ../src/empathy-call-window.c:253
+msgid "Closing this window will end the call in progress."
+msgstr "Pechar esta ventá, rematará a chamada en progreso."
+
+#: ../src/empathy-call-window.c:254
+msgid "_End Call"
+msgstr "_Rematar chamada"
+
+#: ../src/empathy-call-window.c:305
+msgid "Incoming call"
+msgstr "Chamada entrante"
+
+#: ../src/empathy-call-window.c:307
+#, c-format
+msgid "%s is calling you, do you want to answer?"
+msgstr "%s estalle chamando, quere responder?"
+
+#: ../src/empathy-call-window.c:313
+msgid "_Reject"
+msgstr "_Rexeitar"
+
+#: ../src/empathy-call-window.c:318
+msgid "_Answer"
+msgstr "Re_sposta"
+
+#: ../src/empathy-call-window.c:364
+msgid "Empathy Call"
+msgstr "Chamada de Empathy"
+
+#: ../src/empathy-call-window.c:365
+msgid "Readying"
+msgstr "Preparándose"
+
+#: ../src/empathy-call-window.c:374
+#, c-format
+msgid "%s - Empathy Call"
+msgstr "Chamada de Empathy - %s"
+
+#: ../src/empathy-call-window.c:378
+msgid "Ringing"
+msgstr "Soando"
+
+#: ../src/empathy-call-window.c:391
+msgid "Connecting"
+msgstr "Conectando"
+
+#: ../src/empathy-call-window.glade.h:1
+msgid "#"
+msgstr "#"
+
+#: ../src/empathy-call-window.glade.h:2
+msgid "*"
+msgstr "*"
+
+#: ../src/empathy-call-window.glade.h:3
+msgid "0"
+msgstr "0"
+
+#: ../src/empathy-call-window.glade.h:4
+msgid "1"
+msgstr "1"
+
+#: ../src/empathy-call-window.glade.h:5
+msgid "2"
+msgstr "2"
+
+#: ../src/empathy-call-window.glade.h:6
+msgid "3"
+msgstr "3"
+
+#: ../src/empathy-call-window.glade.h:7
+msgid "4"
+msgstr "4"
+
+#: ../src/empathy-call-window.glade.h:8
+msgid "5"
+msgstr "5"
+
+#: ../src/empathy-call-window.glade.h:9
+msgid "6"
+msgstr "6"
+
+#: ../src/empathy-call-window.glade.h:10
+msgid "7"
+msgstr "7"
+
+#: ../src/empathy-call-window.glade.h:11
+msgid "8"
+msgstr "8"
+
+#: ../src/empathy-call-window.glade.h:12
+msgid "9"
+msgstr "9"
+
+#: ../src/empathy-call-window.glade.h:13
+msgid "<b>Keypad</b>"
+msgstr "<b>Teclado numérico</b>"
+
+#: ../src/empathy-call-window.glade.h:14
+msgid "<b>Volume</b>"
+msgstr "<b>Volume</b>"
+
+#: ../src/empathy-call-window.glade.h:15
+msgid "Hang Up"
+msgstr "Colgar"
+
+#: ../src/empathy-call-window.glade.h:16
+msgid "Send Video"
+msgstr "Envía vídeo"
+
+#: ../src/empathy-chat-window.c:315
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Conversas (%d)"
+
+#: ../src/empathy-chat-window.c:382
+msgid "Topic:"
+msgstr "Tema:"
+
+#: ../src/empathy-chat-window.c:385
+msgid "Typing a message."
+msgstr "Escribindo unha mensaxe."
+
+#: ../src/empathy-chat-window.glade.h:1
+msgid "C_lear"
+msgstr "_Limpar"
+
+#: ../src/empathy-chat-window.glade.h:3
+msgid "Insert _Smiley"
+msgstr "Inserir _emoticona"
+
+#: ../src/empathy-chat-window.glade.h:4
+msgid "Invitation _message:"
+msgstr "_Mensaxe de invitación:"
+
+#: ../src/empathy-chat-window.glade.h:5
+msgid "Invite"
+msgstr "Invitar"
+
+#: ../src/empathy-chat-window.glade.h:6
+msgid "Move Tab _Left"
+msgstr "Mover separador á _esquerda"
+
+#: ../src/empathy-chat-window.glade.h:7
+msgid "Move Tab _Right"
+msgstr "Mover separador á _dereita"
+
+#: ../src/empathy-chat-window.glade.h:8
+msgid "Select who would you like to invite:"
+msgstr "Seleccione a quen quere invitar:"
+
+#: ../src/empathy-chat-window.glade.h:9
+msgid "You have been invited to join a chat conference."
+msgstr "Invitáronlle a unirse a unha conferencia."
+
+#: ../src/empathy-chat-window.glade.h:10
+msgid "_Contact"
+msgstr "_Contacto"
+
+#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10
+msgid "_Contents"
+msgstr "_Contidos"
+
+#: ../src/empathy-chat-window.glade.h:12
+msgid "_Conversation"
+msgstr "_Conversa"
+
+#: ../src/empathy-chat-window.glade.h:13
+msgid "_Detach Tab"
+msgstr "_Desacoplar separador"
+
+#: ../src/empathy-chat-window.glade.h:15 ../src/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr "A_xuda"
+
+#: ../src/empathy-chat-window.glade.h:16
+msgid "_Next Tab"
+msgstr "Segui_nte separador"
+
+#: ../src/empathy-chat-window.glade.h:17
+msgid "_Previous Tab"
+msgstr "Separador an_terior"
+
+#: ../src/empathy-chat-window.glade.h:18
+msgid "_Tabs"
+msgstr "_Separadores"
+
+#: ../src/empathy-chatrooms-window.c:262
+msgid "Name"
+msgstr "Nome"
+
+#: ../src/empathy-chatrooms-window.c:280
+msgid "Room"
+msgstr "Sala"
+
+#: ../src/empathy-chatrooms-window.c:289
+msgid "Auto-Connect"
+msgstr "Conectar automaticamente"
+
+#: ../src/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Editar sala favorita"
+
+#: ../src/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Unirse a unha sala ao _iniciar"
+
+#: ../src/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Unirse a esta sala cando se inicie Empathy e esté conectado"
+
+#: ../src/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Xestionar as salas favoritas"
+
+#: ../src/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "N_ome:"
+
+#: ../src/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "S_ervidor:"
+
+#: ../src/empathy-chatrooms-window.glade.h:9
+#: ../src/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Sala:"
+
+#: ../src/empathy-main-window.c:271
+msgid "Show and edit accounts"
+msgstr "Mostrar e editar contas"
+
+#: ../src/empathy-main-window.c:611
+msgid "Contact"
+msgstr "Contacto"
+
+#: ../src/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "_Editar conta"
+
+#: ../src/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "Fallou a autenticación"
+
+#: ../src/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "Erro de cifrado"
+
+#: ../src/empathy-main-window.c:905
+msgid "Name in use"
+msgstr "Nome en uso"
+
+#: ../src/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr "Non se proporcionou ningún certificado"
+
+#: ../src/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr "Certificado non fiable"
+
+#: ../src/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr "Certificado caducado"
+
+#: ../src/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr "Certificado non activado"
+
+#: ../src/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr "O nome do host do certificado non coincide"
+
+#: ../src/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr "A pegada do certificado non coincide"
+
+#: ../src/empathy-main-window.c:926
+msgid "Certificate self-signed"
+msgstr "O certificado está asinado por si mesmo"
+
+#: ../src/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "Erro de certificado"
+
+#: ../src/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "Erro descoñecido"
+
+#: ../src/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Lista de contactos"
+
+#: ../src/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Contexto"
+
+#: ../src/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Unir a _favoritos"
+
+#: ../src/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Unirse a _novo..."
+
+#: ../src/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Xestionar favoritos"
+
+#: ../src/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Mostrar contactos _desconectados"
+
+#: ../src/empathy-main-window.glade.h:7
+msgid "_Accounts"
+msgstr "_Contas"
+
+#: ../src/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "_Engadir contacto..."
+
+#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_Nova conversa..."
+
+#: ../src/empathy-main-window.glade.h:14
+msgid "_Personal Information"
+msgstr "Información _persoal"
+
+#: ../src/empathy-main-window.glade.h:16
+msgid "_Room"
+msgstr "_Sala"
+
+#: ../src/empathy-new-chatroom-dialog.c:290
+msgid "Chat Rooms"
+msgstr "Salas de conversa"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Examinar:"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Introduza o nome da sala á que se quere unir aquí ou prema nunha ou máis "
+"salas na lista."
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Introduza o servidor que aloxa a sala ou déixeo baleiro se a sala está na "
+"conta do servidor actual"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Unirse"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Unirse a nova"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "Ac_tualizar"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"Esta lista representa todas as salas de conversas que están no servidor no "
+"que entrou."
+
+#: ../src/empathy-preferences.c:264
+msgid "Language"
+msgstr "Lingua"
+
+#: ../src/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Aparencia</b>"
+
+#: ../src/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Son</b>"
+
+#: ../src/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Comportamento</b>"
+
+#: ../src/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Lista de contactos</b>"
+
+#: ../src/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Activar corrección ortográfica para as linguas:</b>"
+
+#: ../src/empathy-preferences.glade.h:6
+msgid "<b>Visual</b>"
+msgstr "<b>Visual</b>"
+
+#: ../src/empathy-preferences.glade.h:7
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>A lista de linguas reflexa só as linguas para as cales ten instalado "
+"un dicionario.</small>"
+
+#: ../src/empathy-preferences.glade.h:8
+msgid "Automatically _connect on startup "
+msgstr "_Conectar automaticamente ao inicio"
+
+#: ../src/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Os avatares son imaxes escollidas polo usuario que se mostran na lista de "
+"contactos"
+
+#: ../src/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "T_ema da conversa:"
+
+#: ../src/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Mostrar notificacións cando se _conecten os contactos"
+
+#: ../src/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Activar sons cando está _ausente"
+
+#: ../src/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Activar sons cando está _ocupado"
+
+#: ../src/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "Xeral"
+
+#: ../src/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Notificacións"
+
+#: ../src/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Preferencias"
+
+#: ../src/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "Mostrar _avatares"
+
+#: ../src/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Mostrar _emoticonas como imaxes"
+
+#: ../src/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "Mostrar lista de contactos co_mpacta"
+
+#: ../src/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "Ordenar por _nome"
+
+#: ../src/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "Ordenar por e_stado"
+
+#: ../src/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Comprobación ortográfica"
+
+#: ../src/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "Temas"
+
+#: ../src/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr "_Abrir as conversas novas en ventás separadas"
+
+#: ../src/empathy-preferences.glade.h:25
+msgid "_Play sound when messages arrive"
+msgstr "_Reproducir son cando cheguen mensaxes"
+
+#: ../src/empathy-status-icon.c:400
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Mensaxe nova de %s:\n"
+"%s"
+
+#: ../src/empathy-status-icon.c:440
+#, c-format
+msgid "Incoming call from %s"
+msgstr "Chamada entrante de %s"
+
+#. Tell the user that the tube can't be handled
+#: ../src/empathy-status-icon.c:469
+#, c-format
+msgid ""
+"%s offered you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+
+#: ../src/empathy-status-icon.c:478
+msgid "Invitation Error"
+msgstr "Erro na invitación"
+
+#: ../src/empathy-status-icon.c:503
+#, c-format
+msgid ""
+"%s is offering you an invitation. An external application will be started to "
+"handle it."
+msgstr ""
+
+#: ../src/empathy-status-icon.c:508
+#, c-format
+msgid ""
+"%s is offering you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+
+#: ../src/empathy-status-icon.c:553
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Solicitude de subscrición de %s"
+
+#: ../src/empathy-status-icon.c:556
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Mensaxe: %s"
+
+#: ../src/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Estado"
+
+#: ../src/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Saír"
+
+#: ../src/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Mostrar lista de contactos"
+
+#~ msgid "jabber account settings"
+#~ msgstr "axustes da conta jabber"
+
+#~ msgid "msn account settings"
+#~ msgstr "axustes da conta msn"
+
+#~ msgid "salut account settings"
+#~ msgstr "axustes da conta salut"
+
+#~ msgid "Input"
+#~ msgstr "Entrada"
+
+#~ msgid "Mute"
+#~ msgstr "Silenciar"
+
+#~ msgid "Output"
+#~ msgstr "Saída"
+
+#~ msgid "Volume"
+#~ msgstr "Volume"
+
+#~ msgid "Ca_ll"
+#~ msgstr "C_hamar"
+
+#~ msgid "Change _Topic..."
+#~ msgstr "Cambiar _tema..."
+
+#~ msgid "Contact Infor_mation"
+#~ msgstr "Infor_mación do contacto"
+
+#~ msgid "Cu_t"
+#~ msgstr "Cor_tar"
+
+#~ msgid "In_vite..."
+#~ msgstr "In_vitar..."
+
+#~ msgid "_Add To Favorites"
+#~ msgstr "_Engadir a favoritos"
+
+#~ msgid "_Copy"
+#~ msgstr "_Copiar"
+
+#~ msgid "_Paste"
+#~ msgstr "_Pegar"
+
+#~ msgid "_Show Contacts"
+#~ msgstr "_Mostrar contactos"
+
+#~ msgid "_Group"
+#~ msgstr "_Grupo"
+
+#~ msgid "Chat with contact"
+#~ msgstr "Conversar con contacto"
+
+#~ msgid "View contact information"
+#~ msgstr "Ver a información do contacto"
+
+#~ msgid "Re_name"
+#~ msgstr "Re_nomear"
+
+#~ msgid "Edit the groups and name for this contact"
+#~ msgstr "Editar grupos e nome para este contacto"
+
+#~ msgid "_Invite to Chat Room"
+#~ msgstr "_Invitar á sala de conversa"
+
+#~ msgid "Invite to a currently open chat room"
+#~ msgstr "Invitar á sala de conversa aberta actualmente"
+
+#~ msgid "_Send File..."
+#~ msgstr "_Enviar ficheiro..."
+
+#~ msgid "Send a file"
+#~ msgstr "Enviar un ficheiro"
+
+#~ msgid "View previous conversations with this contact"
+#~ msgstr "Ver as conversas previas deste contacto"
+
+#~ msgid "Start a voice or video conversation with this contact"
+#~ msgstr "Inicia unha conversa de voz ou vídeo con este contacto"
+
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Introduza o novo tema que quere establecer nesta sala:"
+
+#~ msgid "<b>Options</b>"
+#~ msgstr "<b>Opcións</b>"
+
+#~ msgid "_Use for chat rooms"
+#~ msgstr "_Usar para salas de conversa"
+
+#~ msgid "%s went offline"
+#~ msgstr "%s desconectouse"
+
+#~ msgid "%s has come online"
+#~ msgstr "%s conectouse"
diff --git a/trunk/po/he.po b/trunk/po/he.po
new file mode 100644
index 000000000..7ab0ad573
--- /dev/null
+++ b/trunk/po/he.po
@@ -0,0 +1,1877 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-01 23:23+0000\n"
+"PO-Revision-Date: 2008-02-23 19:56+0200\n"
+"Last-Translator: Mark Krapivner <mark125@gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Poedit-Language: Hebrew\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "‏Empathy - מסרים מיידיים"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "שלח וקבל מסרים מיידיים"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Always open a separate chat window for new chats."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Chat window theme"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should auto-connect on startup"
+msgstr "Checks if Empathy should auto-connect on startup"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Checks if NetworkManager should be used"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Checks if Salut account is created"
+
+#: ../data/empathy.schemas.in.h:7
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Compact contact list"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Contact list sort criterium"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Default directory to select an avatar image from"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Enable popup when contact is available"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Enable sound when away"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Enable sound when busy"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Enable spell checker"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Hide main window"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Hide the main window."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Nick completed character"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Open new chats in separate windows"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Show avatars"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Show hint about closing the main window"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Show offline contacts"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Spell checking languages"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "The last directory that an avatar image was chosen from."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "The theme that is used to display the conversation in chat windows."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Use graphical smileys"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Use notification sounds"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Use theme for chat rooms"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically log in to your accounts on "
+"startup."
+msgstr ""
+"Whether or not Empathy should automatically log in to your accounts on "
+"startup."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first Empathy run."
+msgstr ""
+"Whether or not the Salut account has been created on the first Empathy run."
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Whether or not to convert smileys into graphical images in conversations."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Whether or not to play a sound when messages arrive."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Whether or not to play sounds when away."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Whether or not to play sounds when busy."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Whether or not to show a popup when a contact becomes available."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Whether or not to show contacts that are offline in the contact list."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Whether to show the contact list in compact mode or not."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Whether to use the theme for chat rooms or not."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+
+#: ../libempathy/empathy-tp-contact-list.c:669 ../src/empathy.c:188
+msgid "People nearby"
+msgstr ""
+
+#: ../libempathy/empathy-utils.c:466
+msgid "Available"
+msgstr "זמין"
+
+#: ../libempathy/empathy-utils.c:468
+msgid "Busy"
+msgstr "עסוק"
+
+#: ../libempathy/empathy-utils.c:471
+msgid "Away"
+msgstr "מרוחק"
+
+#: ../libempathy/empathy-utils.c:473
+msgid "Hidden"
+msgstr "מוסתר"
+
+#: ../libempathy/empathy-utils.c:476
+msgid "Offline"
+msgstr "מנותק"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:334
+msgid "All"
+msgstr "הכל"
+
+#: ../libempathy-gtk/empathy-account-widget.c:284
+#: ../libempathy-gtk/empathy-account-widget.c:329
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>מתקדם</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "סיסמ_ה:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+msgid "Screen _Name:"
+msgstr "שם _מסך:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Port:"
+msgstr "_שער:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+#: ../src/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_שרת:"
+
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "מזהה משת_מש:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "_Charset:"
+msgstr "קידוד _תוים:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:245
+msgid "New Network"
+msgstr "רשת חדשה"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>רשת</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>שרתים</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "קידוד תוים:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "צור רשת IRC חדשה"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "ערוך רשת IRC מסומנת"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "רשת"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "רשת:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "כינוי:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "סיסמה:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "הודאת יציאה:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "שם אמיתי:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "הסר רשת IRC מסומנת"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>עקןף הגדרת שרת</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "עדי_פות:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "_משאב:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "השתמש ב-SS_L ישן"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "_נדרשת הצפנה (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "ה_תעלם משגיאות בתעודות SSL"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_Email:"
+msgstr "_דוא\"ל:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "שם _פרטי:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "מזהה Jabber:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "שם _משפחה"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../src/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_כינוי"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr ""
+
+#. look up the DNS SRV record at the service's domain for the host name of a STUN server.
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+msgid "Discover STUN"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+msgid "Stun Server:"
+msgstr "שרת Stun:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+msgid "Stun port:"
+msgstr "שער Stun:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+msgid "_Username:"
+msgstr "ש_ם משתמש:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "שרת _יפן:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "השתמש ב-_Yahoo יפן"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Ignore conference and chatroom invitations"
+msgstr "ה_תעלם מהזמנות לשיחות ועידה וחדרי שיחה"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Room List locale:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:226
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:230
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"על מנת להוסיף חשבון חדש עליך להתקין מנוע לכל פרוטוקול שבו ברצונך להשתמש."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>לא נבחרו חשבונות</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:238
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:244
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>לא הוגדרו חשבונות</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:424
+msgid "Enabled"
+msgstr "מופעל"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:434
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "חשבונות"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:916
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"חשבון ה-%s שלך עומד להיות מוסר!\n"
+"להסיר את החשבון?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:922
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>חשבון חדש</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>הגדרות</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "_צור"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "סוג:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:457
+msgid "Select Your Avatar Image"
+msgstr "בחר את התמונה האישית שלך"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:460
+msgid "No Image"
+msgstr "ללא תמונה"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:520
+msgid "Images"
+msgstr "תמונות"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:524
+msgid "All Files"
+msgstr "כל הקבצים"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:294
+msgid "Click to enlarge"
+msgstr "לחץ כדי להגדיל"
+
+#: ../libempathy-gtk/empathy-chat.c:526
+msgid "offline"
+msgstr "מנותק"
+
+#: ../libempathy-gtk/empathy-chat.c:529
+msgid "invalid contact"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:532
+msgid "permission denied"
+msgstr "איש קשר לא תקין"
+
+#: ../libempathy-gtk/empathy-chat.c:535
+msgid "too long message"
+msgstr "הודעה ארוכה מדי"
+
+#: ../libempathy-gtk/empathy-chat.c:538
+msgid "not implemented"
+msgstr "לא ממומש"
+
+#: ../libempathy-gtk/empathy-chat.c:541
+msgid "unknown"
+msgstr "לא ידוע"
+
+#: ../libempathy-gtk/empathy-chat.c:545
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "שגיאה בשליחת ההודעה '%s': ‏%s"
+
+#: ../libempathy-gtk/empathy-chat.c:575
+#, c-format
+msgid "Topic set to: %s"
+msgstr "הנושא נקבע ל: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:577
+msgid "No topic defined"
+msgstr "לא נקבע נושא"
+
+#: ../libempathy-gtk/empathy-chat.c:983
+msgid "Insert Smiley"
+msgstr "הכנס סמיילי"
+
+#: ../libempathy-gtk/empathy-chat.c:1030
+msgid "_Check Word Spelling..."
+msgstr "ב_דוק איות..."
+
+#: ../libempathy-gtk/empathy-chat.c:1131
+#, c-format
+msgid "%s has joined the room"
+msgstr "‏%s הצטרף לחדר"
+
+#: ../libempathy-gtk/empathy-chat.c:1134
+#, c-format
+msgid "%s has left the room"
+msgstr "‏%s עזב את החדר"
+
+#: ../libempathy-gtk/empathy-chat.c:1248 ../src/empathy.c:70
+#: ../src/empathy-call-window.c:389
+msgid "Disconnected"
+msgstr "מנותק"
+
+#: ../libempathy-gtk/empathy-chat.c:1621
+msgid "Connected"
+msgstr "מחובר"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>נושא:</b>"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Group Chat"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat-view.c:433
+msgid "_Copy Link Address"
+msgstr "העתק _מיקום קישור"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Open Link"
+msgstr "_פתח קישור"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:180
+msgid "Personal Information"
+msgstr "מידע אישי"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+msgid "Edit Contact Information"
+msgstr "ערוך מידע איש קשר"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:186
+msgid "Contact Information"
+msgstr "מידע איש קשר"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:281
+msgid "I would like to add you to my contact list."
+msgstr "הייתי רוצה להוסיף אותך לרשימת אנשי הקשר שלי."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:305
+msgid "New Contact"
+msgstr "איש קשר חדש"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1161
+#, c-format
+msgid "Do you really want to remove the group '%s'?"
+msgstr "להסיר את הקבוצה '%s'?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1163
+msgid "Removing group"
+msgstr "מסיר קבוצה"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1210
+#: ../libempathy-gtk/empathy-contact-list-view.c:1290
+msgid "_Remove"
+msgstr "_הסר"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1240
+#, c-format
+msgid "Do you really want to remove the contact '%s'?"
+msgstr "להסיר את איש הקשר '%s'?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1242
+msgid "Removing contact"
+msgstr "מסיר איש קשר"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1247
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "מצטער, אני יותר לא רוצה אותך ברשימת אנשי הקשר שלי."
+
+#: ../libempathy-gtk/empathy-contact-menu.c:108
+#: ../src/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_שיחה"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:129
+msgid "_Call"
+msgstr "_שיחה"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:168
+#: ../src/empathy-main-window.glade.h:17
+msgid "_View Previous Conversations"
+msgstr "_צפייה בשיחות קודמות"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:196
+msgid "Infor_mation"
+msgstr "_מידע"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:223
+#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr "_עריכה"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:694
+msgid "Select"
+msgstr "בחר"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:704
+#: ../src/empathy-main-window.c:628
+msgid "Group"
+msgstr "קבוצה"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>מידע לקוח</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>מידע איש קשר</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>איש קשר</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>קבוצות</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+#: ../src/empathy-chatrooms-window.glade.h:1
+#: ../src/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "חשבון:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "כינוי:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "יום הולדת:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "לקוח:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "נתוני איש קשר"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "דוא\"ל:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "שם מלא:"
+
+#. Identifier to connect to Instant Messaging network
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Identifier:"
+msgstr "מזהה:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "Information requested..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid "OS:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Version:"
+msgstr "גרסה:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
+msgid "Web site:"
+msgstr "אתר אינטרנט:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:284
+msgid "new server"
+msgstr "שרת חדש"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:513
+msgid "Server"
+msgstr "שרת"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:528
+msgid "Port"
+msgstr "שער"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:541
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+msgid "Account"
+msgstr "חשבון"
+
+#: ../libempathy-gtk/empathy-log-window.c:504 ../src/empathy-chat-window.c:276
+msgid "Conversation"
+msgstr "שיחה"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+msgid "Date"
+msgstr "תאריך"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Conversations"
+msgstr "שיחות"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Previous Conversations"
+msgstr "שיחות קודמות"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:5
+msgid "Search"
+msgstr "חיפוש"
+
+#. Searching *for* something
+#: ../libempathy-gtk/empathy-log-window.glade.h:7
+msgid "_For:"
+msgstr "_ערך:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+#: ../src/empathy-chat-window.glade.h:2
+msgid "Chat"
+msgstr "שיחה"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr ""
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:688
+msgid "Custom messages..."
+msgstr "הודעות מותאמות אישית..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "הודעה מותאמת אישית"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "הודעה:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "שמור הודעה"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "מצב:"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:88
+msgid "Word"
+msgstr "מילה"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:265
+msgid "Suggestions for the word"
+msgstr "הצעות עבור המילה"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "בודק איות"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "הצעות עבור המילה:"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:746
+#: ../libempathy-gtk/empathy-theme-irc.c:294
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:74
+msgid "Classic"
+msgstr "קלאסי"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:75
+msgid "Simple"
+msgstr "פשוט"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:76
+msgid "Clean"
+msgstr "נקי"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:77
+msgid "Blue"
+msgstr "כחול"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1326
+msgid "Unable to open URI"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "מיקום נוכחי"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "ערבית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "ארמנית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "בלטית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "סלטית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "מרכז אירופאי"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "סינית מפושטת"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "סינית מסורתית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "קרואטית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "קירילי"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "קירילי/רוסי"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "קרילי/אוקראיני"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "גאורגית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "יוונית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "גוג'אראטית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "גורמוקית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "עברית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "עברית ויזואלית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "הינדית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "איסלנדית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "יפנית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "קוראנית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "נורדי"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "פרסית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "רומנית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "דרום אירופאית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "תאילנדית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "טורקית"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "יוניקוד"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "מערבי"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "ויאטנמית"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+"The contact to display in the applet. Empty means no contact is displayed."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "The contact's avatar token. Empty means contact has no avatar."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megaphone"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:420
+msgid "Talk!"
+msgstr "דבר!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_אודות"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_מידע"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+#: ../src/empathy-main-window.glade.h:15
+msgid "_Preferences"
+msgstr "_העדפות"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Presence"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:106
+msgid "Set your own presence"
+msgstr ""
+
+#: ../src/empathy.c:73
+msgid "Invalid handle"
+msgstr ""
+
+#: ../src/empathy.c:76
+msgid "No matching connection"
+msgstr ""
+
+#: ../src/empathy.c:79
+msgid "Invalid account"
+msgstr "חשבון לא תקין"
+
+#: ../src/empathy.c:82
+#, fuzzy
+msgid "Presence failure"
+msgstr "Presence"
+
+#: ../src/empathy.c:85
+msgid "No accounts"
+msgstr "אין חשבונות"
+
+#: ../src/empathy.c:88 ../src/empathy-main-window.c:896
+msgid "Network error"
+msgstr "שגיאת רשת"
+
+#: ../src/empathy.c:91
+#, fuzzy
+msgid "Contact does not support voice"
+msgstr "Contact list sort criterium"
+
+#: ../src/empathy.c:94
+msgid "Lowmem"
+msgstr ""
+
+#: ../src/empathy.c:97
+msgid "Channel request generic error"
+msgstr ""
+
+#: ../src/empathy.c:100
+msgid "Channel banned"
+msgstr ""
+
+#: ../src/empathy.c:103
+msgid "Channel full"
+msgstr ""
+
+#: ../src/empathy.c:106
+msgid "Channel invite only"
+msgstr ""
+
+#: ../src/empathy.c:109
+msgid "Unknown error code"
+msgstr "מספר שגיאה לא ידוע"
+
+#: ../src/empathy.c:312
+msgid "Don't connect on startup"
+msgstr "אל תתחבר בהפעלה"
+
+#: ../src/empathy.c:324
+msgid "- Empathy Instant Messenger"
+msgstr "- Empathy Instant Messenger"
+
+#: ../src/empathy-about-dialog.c:64
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+
+#: ../src/empathy-about-dialog.c:68
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+
+#: ../src/empathy-about-dialog.c:72
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+
+#: ../src/empathy-about-dialog.c:100
+msgid "An Instant Messaging client for GNOME"
+msgstr "לקוח מסרים מיידיים עבור GNOME"
+
+#: ../src/empathy-about-dialog.c:106
+msgid "translator-credits"
+msgstr ""
+"מארק קרפיבנר <mark125@gmail.com>\n"
+"\n"
+"פרוייקט תרגום GNOME לעברית:\n"
+"‏http://gnome-il.berlios.de"
+
+#: ../src/empathy-call-window.c:139
+msgid "Closed"
+msgstr "סגור"
+
+#: ../src/empathy-call-window.c:251
+msgid "End this call?"
+msgstr "לסיים את השיחה?"
+
+#: ../src/empathy-call-window.c:253
+msgid "Closing this window will end the call in progress."
+msgstr ""
+
+#: ../src/empathy-call-window.c:254
+msgid "_End Call"
+msgstr "_סיים שיחה"
+
+#: ../src/empathy-call-window.c:305
+msgid "Incoming call"
+msgstr "שיחה נכנסת"
+
+#: ../src/empathy-call-window.c:307
+#, c-format
+msgid "%s is calling you, do you want to answer?"
+msgstr ""
+
+#: ../src/empathy-call-window.c:313
+msgid "_Reject"
+msgstr "_דחה"
+
+#: ../src/empathy-call-window.c:318
+msgid "_Answer"
+msgstr ""
+
+#: ../src/empathy-call-window.c:364
+#, fuzzy
+msgid "Empathy Call"
+msgstr "התחל שיחה"
+
+#: ../src/empathy-call-window.c:365
+msgid "Readying"
+msgstr ""
+
+#: ../src/empathy-call-window.c:374
+#, c-format
+msgid "%s - Empathy Call"
+msgstr ""
+
+#: ../src/empathy-call-window.c:378
+msgid "Ringing"
+msgstr "מצלצל"
+
+#: ../src/empathy-call-window.c:391
+msgid "Connecting"
+msgstr "מתחבר"
+
+#: ../src/empathy-call-window.glade.h:1
+msgid "#"
+msgstr "#"
+
+#: ../src/empathy-call-window.glade.h:2
+msgid "*"
+msgstr "*"
+
+#: ../src/empathy-call-window.glade.h:3
+msgid "0"
+msgstr "0"
+
+#: ../src/empathy-call-window.glade.h:4
+msgid "1"
+msgstr "1"
+
+#: ../src/empathy-call-window.glade.h:5
+msgid "2"
+msgstr "2"
+
+#: ../src/empathy-call-window.glade.h:6
+msgid "3"
+msgstr "3"
+
+#: ../src/empathy-call-window.glade.h:7
+msgid "4"
+msgstr "4"
+
+#: ../src/empathy-call-window.glade.h:8
+msgid "5"
+msgstr "5"
+
+#: ../src/empathy-call-window.glade.h:9
+msgid "6"
+msgstr "6"
+
+#: ../src/empathy-call-window.glade.h:10
+msgid "7"
+msgstr "7"
+
+#: ../src/empathy-call-window.glade.h:11
+msgid "8"
+msgstr "8"
+
+#: ../src/empathy-call-window.glade.h:12
+msgid "9"
+msgstr "9"
+
+#: ../src/empathy-call-window.glade.h:13
+msgid "<b>Keypad</b>"
+msgstr "<b>לוח מקשים</b>"
+
+#: ../src/empathy-call-window.glade.h:14
+msgid "<b>Volume</b>"
+msgstr "<b>עוצמה</b>"
+
+#: ../src/empathy-call-window.glade.h:15
+msgid "Hang Up"
+msgstr "נתק"
+
+#: ../src/empathy-call-window.glade.h:16
+msgid "Send Video"
+msgstr "שלח וידאו"
+
+#: ../src/empathy-chat-window.c:316
+#, c-format
+msgid "Conversations (%d)"
+msgstr "שיחות (%d)"
+
+#: ../src/empathy-chat-window.c:383
+msgid "Topic:"
+msgstr "נושא:"
+
+#: ../src/empathy-chat-window.c:386
+msgid "Typing a message."
+msgstr "מקליד הודעה."
+
+#: ../src/empathy-chat-window.glade.h:1
+msgid "C_lear"
+msgstr "נ_קה"
+
+#: ../src/empathy-chat-window.glade.h:3
+msgid "Insert _Smiley"
+msgstr "הכנס _סמיילי"
+
+#: ../src/empathy-chat-window.glade.h:4
+msgid "Invitation _message:"
+msgstr "הודעת הזמ_נה:"
+
+#: ../src/empathy-chat-window.glade.h:5
+msgid "Invite"
+msgstr ""
+
+#: ../src/empathy-chat-window.glade.h:6
+msgid "Move Tab _Left"
+msgstr "הזז לשונית _שמאלה"
+
+#: ../src/empathy-chat-window.glade.h:7
+msgid "Move Tab _Right"
+msgstr "הזז לשונית _ימינה"
+
+#: ../src/empathy-chat-window.glade.h:8
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../src/empathy-chat-window.glade.h:9
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../src/empathy-chat-window.glade.h:10
+msgid "_Contact"
+msgstr "_איש קשר"
+
+#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10
+msgid "_Contents"
+msgstr "_תכנים"
+
+#: ../src/empathy-chat-window.glade.h:12
+msgid "_Conversation"
+msgstr "_שיחה"
+
+#: ../src/empathy-chat-window.glade.h:13
+msgid "_Detach Tab"
+msgstr "_נתק לשונית"
+
+#: ../src/empathy-chat-window.glade.h:15 ../src/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr "_עזרה"
+
+#: ../src/empathy-chat-window.glade.h:16
+msgid "_Next Tab"
+msgstr "_לשונית הבאה"
+
+#: ../src/empathy-chat-window.glade.h:17
+msgid "_Previous Tab"
+msgstr "_לשונית קודמת"
+
+#: ../src/empathy-chat-window.glade.h:18
+msgid "_Tabs"
+msgstr "_לשוניות"
+
+#: ../src/empathy-chatrooms-window.c:262
+msgid "Name"
+msgstr "שם"
+
+#: ../src/empathy-chatrooms-window.c:280
+msgid "Room"
+msgstr "חדר"
+
+#: ../src/empathy-chatrooms-window.c:289
+msgid "Auto-Connect"
+msgstr "חיבור אוטומטי"
+
+#: ../src/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "ערוך חדר מועדף"
+
+#: ../src/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr ""
+
+#: ../src/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr ""
+
+#: ../src/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr ""
+
+#: ../src/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "ש_ם:"
+
+#: ../src/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "ש_רת:"
+
+#: ../src/empathy-chatrooms-window.glade.h:9
+#: ../src/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_חדר:"
+
+#: ../src/empathy-filter.c:228
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+
+#: ../src/empathy-filter.c:285
+#, c-format
+msgid "Incoming call from %s"
+msgstr ""
+
+#: ../src/empathy-filter.c:341
+#, c-format
+msgid "Subscription requested by %s"
+msgstr ""
+
+#: ../src/empathy-filter.c:344
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"הודעה: %s"
+
+#. Tell the user that the tube can't be handled
+#: ../src/empathy-filter.c:452
+#, c-format
+msgid ""
+"%s offered you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+
+#: ../src/empathy-filter.c:461
+msgid "Invitation Error"
+msgstr "שגיאת הזמנה"
+
+#: ../src/empathy-filter.c:569
+#, c-format
+msgid ""
+"%s is offering you an invitation. An external application will be started to "
+"handle it."
+msgstr ""
+
+#: ../src/empathy-filter.c:574
+#, c-format
+msgid ""
+"%s is offering you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+
+#: ../src/empathy-main-window.c:271
+msgid "Show and edit accounts"
+msgstr "הצג וערוך חשבונות"
+
+#: ../src/empathy-main-window.c:611
+msgid "Contact"
+msgstr "איש קשר"
+
+#: ../src/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "_ערוך חשבון"
+
+#: ../src/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr ""
+
+#: ../src/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "שגיטת הצפנה"
+
+#: ../src/empathy-main-window.c:905
+msgid "Name in use"
+msgstr ""
+
+#: ../src/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr ""
+
+#: ../src/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr ""
+
+#: ../src/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr ""
+
+#: ../src/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr ""
+
+#: ../src/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr ""
+
+#: ../src/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr ""
+
+#: ../src/empathy-main-window.c:926
+msgid "Certificate self-signed"
+msgstr ""
+
+#: ../src/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "שגיטת תעודה"
+
+#: ../src/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "שגיאה לא ידועה"
+
+#: ../src/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr ""
+
+#: ../src/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr ""
+
+#: ../src/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr ""
+
+#: ../src/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr ""
+
+#: ../src/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "נהל מועדפים"
+
+#: ../src/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "הצג אנשי קשר _מנותקים"
+
+#: ../src/empathy-main-window.glade.h:7
+msgid "_Accounts"
+msgstr "_חשבונות"
+
+#: ../src/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "_הוסף איש קשר..."
+
+#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_שיחה חדשה..."
+
+#: ../src/empathy-main-window.glade.h:14
+msgid "_Personal Information"
+msgstr "מידע _אישי"
+
+#: ../src/empathy-main-window.glade.h:16
+msgid "_Room"
+msgstr "_חדר"
+
+#: ../src/empathy-new-chatroom-dialog.c:290
+msgid "Chat Rooms"
+msgstr "חדרי שיחה"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "עיין:"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "רע_נן"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+
+#: ../src/empathy-preferences.c:264
+msgid "Language"
+msgstr "שפה"
+
+#: ../src/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>מראה</b>"
+
+#: ../src/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>צליל</b>"
+
+#: ../src/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>התנהגות</b>"
+
+#: ../src/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>רשימת אנשי קשר</b>"
+
+#: ../src/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>הפעל בדיקת איות עבור השפות:</b>"
+
+#: ../src/empathy-preferences.glade.h:6
+msgid "<b>Visual</b>"
+msgstr "<b>חזותי</b>"
+
+#: ../src/empathy-preferences.glade.h:7
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr "<small>ברשימת השפות מוצגות שפות שעבורן מותקנים אצלך מילונים.</small>"
+
+#: ../src/empathy-preferences.glade.h:8
+msgid "Automatically _connect on startup "
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "ער_כת נושא לשיחה:"
+
+#: ../src/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "כללי"
+
+#: ../src/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "התרעות"
+
+#: ../src/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "העדפות"
+
+#: ../src/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "הצג _תמנות אישיות"
+
+#: ../src/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr ""
+
+#: ../src/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "מיין לפי _שם"
+
+#: ../src/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "מיין לפי מצ_ב"
+
+#: ../src/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "בדיקת איות"
+
+#: ../src/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "ערכות נושא"
+
+#: ../src/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr "_פתח שיחות חדשות בחלונות נפרדים"
+
+#: ../src/empathy-preferences.glade.h:25
+msgid "_Play sound when messages arrive"
+msgstr "_נגן צליל כשמתקבלת הודעה"
+
+#: ../src/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "מצב"
+
+#: ../src/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "יצי_אה"
+
+#: ../src/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_הצג רשימת אנשי קשר"
+
+#~ msgid "jabber account settings"
+#~ msgstr "הגדרות חשבון jabber"
+
+#~ msgid "msn account settings"
+#~ msgstr "הגדרות חשבון msn"
+
+#~ msgid "salut account settings"
+#~ msgstr "הגדרות חשבון salut"
+
+#~ msgid "Input"
+#~ msgstr "קלט"
+
+#~ msgid "Mute"
+#~ msgstr "השתק"
+
+#~ msgid "Output"
+#~ msgstr "פלט"
+
+#~ msgid "Cu_t"
+#~ msgstr "ג_זור"
+
+#~ msgid "In_vite..."
+#~ msgstr "הז_מן..."
+
+#~ msgid "_Add To Favorites"
+#~ msgstr "_הוסף למועדפים"
+
+#~ msgid "_Copy"
+#~ msgstr "_העתק"
+
+#~ msgid "_Paste"
+#~ msgstr "_הדבק"
+
+#~ msgid "_Show Contacts"
+#~ msgstr "_הצג אנשי קשר"
+
+#~ msgid "_Group"
+#~ msgstr "_קבוצה"
+
+#~ msgid "Re_name"
+#~ msgstr "שנה _שם"
+
+#~ msgid "Rename"
+#~ msgstr "שנה שם"
+
+#~ msgid "_Invite to Chat Room"
+#~ msgstr "_הזמן לחדר שיחה"
+
+#~ msgid "_Send File..."
+#~ msgstr "_שלח קובץ..."
+
+#~ msgid "Send a file"
+#~ msgstr "שלח קובץ"
+
+#~ msgid "Start a voice or video conversation with this contact"
+#~ msgstr "התחל שיחת קול או וידאו עם איש קשר הזה"
+
+#~ msgid "<b>Options</b>"
+#~ msgstr "<b>אפשרויות</b>"
+
+#~ msgid "_Use for chat rooms"
+#~ msgstr "_שימוש בחדרי שיחה"
+
+#~ msgid "%s went offline"
+#~ msgstr "‏%s התנתק"
+
+#~ msgid "%s has come online"
+#~ msgstr "‏%s התחבר"
+
+#~ msgid "irc account settings"
+#~ msgstr "הגדרות חשבון irc"
diff --git a/trunk/po/hr.po b/trunk/po/hr.po
new file mode 100644
index 000000000..da1b5692c
--- /dev/null
+++ b/trunk/po/hr.po
@@ -0,0 +1,1144 @@
+# Translation of Empathy to Croatian
+# Copyright (C) Senko Rasic <senko.rasic@collabora.co.uk>
+# This file is distributed under the same license as the Empathy package.
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy.HEAD.hr\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-08-25 23:46+0200\n"
+"PO-Revision-Date: 2007-08-25 20:40+CET\n"
+"Last-Translator: Senko Rasic <senko.rasic@collabora.co.uk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Empathy Instant Komunikacija"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Instant Messenger"
+msgstr "Instant Komunikacija"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Compact contact list"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable spell checker"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show hint about closing the main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid "Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether to show the contact list in compact mode or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/empathy-presence.c:184 ../libempathy/empathy-presence.c:283
+msgid "Offline"
+msgstr "Odspojen"
+
+#: ../libempathy/empathy-presence.c:274
+msgid "Available"
+msgstr "Dostupan"
+
+#: ../libempathy/empathy-presence.c:276
+msgid "Busy"
+msgstr "Zauzet"
+
+#: ../libempathy/empathy-presence.c:279
+msgid "Away"
+msgstr "Odsutan"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Program za instant komunikaciju za GNOME"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr "Senko Rašić <senko.rasic@collabora.co.uk>, 2007"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:391
+msgid "All"
+msgstr "Svi"
+
+#: ../libempathy-gtk/empathy-account-widget-generic.c:144
+#: ../libempathy-gtk/empathy-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+msgid "Forget password and clear the entry."
+msgstr "Zaboravi lozinku i obriši unos."
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "Login I_D:"
+msgstr "Korisničko ime:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+msgid "Pass_word:"
+msgstr "Lozinka:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+msgid "Reso_urce:"
+msgstr "Resurs:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+msgid "Use encryption (SS_L)"
+msgstr "Koristi enkripciju (SS_L)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "_Port:"
+msgstr "_Port:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Poslužitelj:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "jabber account settings"
+msgstr "postavke jabber računa"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:224
+msgid "Disable"
+msgstr "Onemogući"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:227
+msgid "Enable"
+msgstr "Omogući"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:261
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Nije odabran niti jedan korisnički račun</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Za dodavanje novog korisničkog računa kliknite na 'Dodaj' gumb, koji će "
+"kreirati novi račun kojeg možete podesiti.\n"
+"\n"
+"Ako ne želite dodati korisnički račun, jednostavno odaberite račun koji želite "
+"podesiti u listi lijevo."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:272
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Nema podešenih korisničkih računa</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Za dodavanje novog korisničkog računa kliknite na 'Dodaj' gumb, koji će "
+"kreirati novi račun kojeg možete podesiti."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:367
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr "Korisnički računi"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:862
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr "Jeste li sigurni da želite obrisati vaš %s korisnički račun?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:868
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Razgovori i sobe NEĆE biti maknuti čak i ukoliko nastavite.\n"
+"\n"
+"Ako kasnije odlučite vratiti korisnički račun, oni će i dalje biti dostupni."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>Account</b>"
+msgstr "<b>Korisnički račun</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>New Account</b>"
+msgstr "<b>Novi korisnički račun</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "<b>Settings</b>"
+msgstr "<b>Postavke</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr "Jedinstveno ime pod kojim ćete pamtiti ovaj korisnički račun."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:7
+msgid "Cr_eate"
+msgstr "Stvori"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr "Imendio "
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Za dodavanje novog korisničkog računa kliknite na 'Dodaj' gumb, koji će "
+"kreirati novi račun kojeg možete podesiti.\n"
+"\n"
+"Ako ne želite dodati korisnički račun, jednostavno odaberite račun koji želite "
+"podesiti u listi lijevo."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:13
+msgid "_Name:"
+msgstr "Ime:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:14
+msgid "_Type:"
+msgstr "_Tip:"
+
+#: ../libempathy-gtk/empathy-chat.c:331
+msgid "Disconnected"
+msgstr "Odspojen"
+
+#: ../libempathy-gtk/empathy-chat.c:875
+msgid "Insert Smiley"
+msgstr "Ubaci smješka"
+
+#: ../libempathy-gtk/empathy-chat.c:923
+msgid "_Check Word Spelling..."
+msgstr "_Provjeri pravopis…"
+
+#: ../libempathy-gtk/empathy-chat.c:1347
+msgid "Connected"
+msgstr "Spojen"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Obriši"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr "Promijeni _Temu..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Chat"
+msgstr "Razgovor"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr "Infor_macije o kontaktu"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Cu_t"
+msgstr "Izreži"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "In_vite..."
+msgstr "Pozovi..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "Ubaci _smješka"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Invitation _message:"
+msgstr "_Pozivna poruka:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invite"
+msgstr "Pozovi"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Nova _soba…"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Pomakni karticu _Lijevo"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Pomakni karticu _Desno"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr "Odaberite kog želite pozvati:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "Pozvani ste da se pridružite sobi za razgovor."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "_Dodaj kontakt…"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "Dodaj u _Favorite"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Close"
+msgstr "_Zatvori"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Razgovor"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+msgid "_Copy"
+msgstr "_Kopiraj"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Odspoji karticu"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+#: ../libempathy-gtk/empathy-contact-list-view.c:216
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "_Uredi"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "Slijedeća kartica"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+msgid "_Paste"
+msgstr "_Zalijepi"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "Prethodna kartica"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "_Soba"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr "_Pokaži kontakte"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Kartice"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+#: ../libempathy-gtk/empathy-contact-list-view.c:232
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr "_Prikaži prethodne razgovore"
+
+#: ../libempathy-gtk/empathy-chat-view.c:557
+msgid "_Copy Link Address"
+msgstr "_Kopiraj adresu linka"
+
+#: ../libempathy-gtk/empathy-chat-view.c:565
+msgid "_Open Link"
+msgstr "_Otvori link"
+
+#: ../libempathy-gtk/empathy-chat-view.c:902
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-chat-window.c:703
+#: ../libempathy-gtk/empathy-chat-window.c:733
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "Nova poruka"
+msgstr[1] "Nove poruke"
+msgstr[2] "Novih poruka"
+
+#: ../libempathy-gtk/empathy-chat-window.c:709
+msgid "Chat Room"
+msgstr "Soba za razgovor"
+
+#: ../libempathy-gtk/empathy-chat-window.c:714
+#: ../libempathy-gtk/empathy-chat-window.c:737
+#: ../libempathy-gtk/empathy-log-window.c:525
+#, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "Razgovor"
+msgstr[1] "Razgovora (%d)"
+msgstr[2] "Razgovora (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1288
+msgid "Typing a message."
+msgstr "Piše poruku."
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:251
+msgid "Name"
+msgstr "Ime"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:269
+msgid "Room"
+msgstr "Soba"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:278
+msgid "Auto Connect"
+msgstr "Automatsko spajanje"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Korisnički račun:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Uredi favorizirane sobe"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Pridruži se sobi prilikom pokretanja"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Spoji se u ovu sobu prilikom pokretanja Empathya ako si spojen"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Uređivanje favoriziranih soba"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Naziv:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "_Poslužitelj:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Nadimak:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Soba:"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:169
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Informacije o kontaktu"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:217
+msgid "I would like to add you to my contact list."
+msgstr "Želim Vas dodati na svoju listu kontakata."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:241
+msgid "New contact"
+msgstr "Novi kontakt"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Odlučite kasnije"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Zahtjev za pretplatom"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:196
+msgid "_Contact"
+msgstr "_Kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:200
+msgid "_Group"
+msgstr "_Grupa"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:204
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr "_Razgovor"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:204
+msgid "Chat with contact"
+msgstr "Razgovor s kontaktom"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:208
+msgid "Infor_mation"
+msgstr "Infor_macija"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:208
+msgid "View contact information"
+msgstr "Pregled informacija o kontaktu"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:212
+msgid "Re_name"
+msgstr "Pro_mijeni ime"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:212
+msgid "Rename"
+msgstr "Promijeni ime"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:216
+msgid "Edit the groups and name for this contact"
+msgstr "Uredite grupe i ime za ovaj kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:220
+msgid "_Remove"
+msgstr "_Makni"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:220
+msgid "Remove contact"
+msgstr "Makni kontakt iz liste"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:224
+msgid "_Invite to Chat Room"
+msgstr "_Pozovi u sobu za razgovor"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:224
+msgid "Invite to a currently open chat room"
+msgstr "Pozovi u trenutno otvorenu sobu za razgovor"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:228
+msgid "_Send File..."
+msgstr "_Pošalji datoteku…"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:228
+msgid "Send a file"
+msgstr "Pošalji datoteku"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:232
+msgid "View previous conversations with this contact"
+msgstr "Pogledaj prethodne razgovore s ovim kontaktom"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1488
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Žao mi je, ali ne želim Vas više u svojoj listi kontakata."
+
+#: ../libempathy-gtk/empathy-contact-widget.c:561
+msgid "Select"
+msgstr "Odaberite"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:571
+#: ../libempathy-gtk/empathy-main-window.c:612
+msgid "Group"
+msgstr "Grupa"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Informacije o kontaktu</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Detalji kontakta</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Kontakt</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Grupe</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Alias:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Rođendan:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Klijent:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "Elektronska pošta:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Puno ime:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "Identifikator:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "Informacija zatražena..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "OS:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Odaberite grupe u kojima želite da se ovaj kontakt pojavi. Možete odabrati "
+"i više od jedne, ili niti jednu grupu."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Verzija:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "Web stranica:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:252
+msgid "Enter the new topic you want to set for this room:"
+msgstr "Unesite novu temu koju želite postaviti za ovu sobu:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:360
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s se pridružio sobi"
+
+#: ../libempathy-gtk/empathy-group-chat.c:376
+#, c-format
+msgid "%s has left the room"
+msgstr "%s je izašao iz sobe"
+
+#: ../libempathy-gtk/empathy-group-chat.c:455
+#, c-format
+msgid "Topic: %s"
+msgstr "Tema: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:572
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Tema postavljena na: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Tema:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Grupni razgovor"
+
+#: ../libempathy-gtk/empathy-log-window.c:518
+msgid "Account"
+msgstr "Korisnički račun"
+
+#: ../libempathy-gtk/empathy-log-window.c:535
+msgid "Date"
+msgstr "Datum"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "Razgovori"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Search"
+msgstr "Traži"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "View Previous Conversations"
+msgstr "Pregled prethodnih razgovora"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "_Za:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:310
+msgid "Chat Rooms"
+msgstr "Sobe za razgovor"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Pretraži:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid "Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Unesite ime sobe kojoj se želite pridružiti, ili odaberite jednu ili više soba iz liste."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Unesite adresu poslužitelja na kojem je ova soba, ili ostavite prazno ako je "
+"soba na poslužitelju trenutnog korisničkog računa"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Pridruži se"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Nova soba"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "Osvježi"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid "This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"Ovaj popis sadrži sve sobe za razgovor na poslužitelju kojeg ste odabrali."
+
+#: ../libempathy-gtk/empathy-main-window.c:277
+msgid "Show and edit accounts"
+msgstr "Prikaži i uredi korisničke račune"
+
+#: ../libempathy-gtk/empathy-main-window.c:633
+msgid "Contact"
+msgstr "Kontakt"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List - Empathy"
+msgstr "Lista kontakata - Empathy"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Kontekst"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Pridruži se _odabranim sobama"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr "Uredi odabrane sobe…"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Prikaži kontakte koji nisu na mreži"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+msgid "_About"
+msgstr "_O"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Korisnički računi"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Sadržaj"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "Pomoć"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Nova poruka…"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "_Osobni podaci"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Postavke"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Kraj"
+
+#: ../libempathy-gtk/empathy-preferences.c:250
+msgid "Language"
+msgstr "Jezik"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Izgled</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Zvuk</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Ponašanje</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Lista kontakata</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr "<b>Jezici</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Opcije</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Izgled</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>Lista jezika sadrži samo jezike za koje ste instalirali riječnik.</small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Avatari su slike koje korisnici za sebe odaberu, za prikaz u listi kontakata"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "T_ema razgovora:"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Prikaži obavjesti kad kontakt dođe na mrežu"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Omogući zvukove dok je korisnik odsutan"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Omogući zvukove dok je korisnik zauzet"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "Općenito"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Obavjesti"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Postavke"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "Prikazuj _avatare"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Prikazuj _smješke kao slike"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "Prikaži kompaktnu listu kontakata"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "Sortiraj po _imenu"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "Sortiraj po s_tanju"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Provjera pravopisa"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "Teme"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr "_Uključi provjeru pravopisa"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Otvori nove razgovore u posebnim prozorima"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "_Sviraj zvuk kad stigne nova poruka"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "_Koristi za sobe za razgovor"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:664
+msgid "Custom message..."
+msgstr "Osobna poruka…"
+
+#. Clear list
+#: ../libempathy-gtk/empathy-presence-chooser.c:686
+msgid "Clear List..."
+msgstr "Obriši listu…"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:765
+msgid "Are you sure you want to clear the list?"
+msgstr "Jeste li sigurni da želite obrisati listu?"
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:769
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+"Ovo će maknuti sve osobne poruke koje ste dodali u listu statusnih poruka."
+
+#: ../libempathy-gtk/empathy-presence-chooser.c:774
+msgid "Clear List"
+msgstr "Obriši listu"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Unesite statusnu poruku:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Status Message Presets"
+msgstr "Prekonfigurirane statusne poruke"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "_Add to status message list"
+msgstr "_Dodaj u listu statusnih poruka"
+
+#: ../libempathy-gtk/empathy-private-chat.c:185
+#, c-format
+msgid "%s went offline"
+msgstr "%s se odspojio s mreže"
+
+#: ../libempathy-gtk/empathy-private-chat.c:199
+#, c-format
+msgid "%s has come online"
+msgstr "%s je došao na mrežu"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "Riječ"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "Sugestije za riječ"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Provjera pravopisa"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Sugestije za riječ:"
+
+#: ../libempathy-gtk/empathy-status-icon.c:300
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Nova poruka od %s:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:549
+#, c-format
+msgid ""
+"Subscription requested for %s\n"
+"Message: %s"
+msgstr ""
+"Zahtjev za pretplatu za %s\n"
+"Poruka: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Status"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Prikaži listu kontakata"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:87
+msgid "Classic"
+msgstr "Klasik"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:88
+msgid "Simple"
+msgstr "Jednostavno"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:89
+msgid "Clean"
+msgstr "Čisto"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:90
+msgid "Blue"
+msgstr "Plavo"
+
+#: ../src/empathy.c:165
+msgid "Don't connect on startup"
+msgstr "Nemoj se spojiti pri pokretanju"
+
+#: ../src/empathy.c:176
+msgid "- Empathy Instant Messenger"
+msgstr "- Empathy instant komunikacija"
+
+
diff --git a/trunk/po/hu.po b/trunk/po/hu.po
new file mode 100644
index 000000000..1e7214d53
--- /dev/null
+++ b/trunk/po/hu.po
@@ -0,0 +1,1767 @@
+# Hungarian translation of gossip
+# This file is distributed under the same license as the gossip package.
+# Copyright (C) 2005, 2006, 2007, 2008, Free Software Foundation, Inc.
+#
+# Gabor Kelemen <kelemeng@gnome.hu>, 2005, 2006, 2007, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-04-26 16:49+0000\n"
+"PO-Revision-Date: 2008-04-26 18:59+0200\n"
+"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
+"Language-Team: Hungarian <gnome@fsf.hu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Empathy azonnali üzenő"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Azonnali üzenetek küldése és fogadása"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Mindig külön ablakot nyisson az új csevegéseknek."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Becenévhez fűzendő karakter becenévkiegészítés (tab) használatakor csoportos "
+"csevegésben."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Csevegőablak témája"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr "Ellenőrzi, hogy az Empathy automatikusan csatlakozzon-e induláskor"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Ellenőrzi hogy használandó-e a Hálózatkezelő"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Ellenőrzi a Salut fiók létrehozását"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"A helyesírás-ellenőrző által használandó nyelvek vesszővel elválasztott "
+"listája (például en, fr, hu)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Tömör partnerlista"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Partnerlista rendezési feltétele"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Alapértelmezett könyvtár avatar kép kiválasztásához"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Felugró ablak engedélyezése partner elérhetővé válásakor"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Hang engedélyezése, ha távol vagyok"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Hang engedélyezése, ha elfoglalt vagyok"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Helyesírás-ellenőrző engedélyezése"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Főablak elrejtése"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "A főablak elrejtése."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Kiegészített becenevet jelző karakter"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Új csevegések megnyitása külön ablakokban"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Avatarok mutatása"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Tanács megjelenítése a főablak bezárásakor"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Kilépett partnerek mutatása"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Helyesírás-ellenőrző nyelvei"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Az utolsó könyvtár, amelyből egy avatar kép kiválasztásra került."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "A társalgás megjelenítésére használt téma a csevegőablakokban."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Grafikus hangulatjelek használata"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Értesítő hangok használata"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Téma használata a csevegőszobákhoz"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically login to your accounts on "
+"startup."
+msgstr "Az Empathy automatikusan bejelentkezzen-e a fiókjaiba induláskor."
+
+#: ../data/empathy.schemas.in.h:29
+msgid "Whether or not the Salut account has been created on the first empathy run."
+msgstr "A Salut fiók létrejött-e az Empathy első futtatásakor."
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr "A Hálózatkezelő használandó-e az automatikus bontáshoz/újracsatlakozáshoz."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr "A beírt szavak ellenőrzése az ellenőrizni kívánt nyelveken."
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether or not to convert smileys into graphical images in conversations."
+msgstr "Hangulatjelek képekké alakítása társalgások közben."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Lejátsszon-e hangot üzenetek érkezésekor?"
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Lejátsszon-e hangot ha Ön távol van?"
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Lejátsszon-e hangot ha Ön elfoglalt?"
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Megjelenjen-e egy felugró ablak egy partner elérhetővé válásakor?"
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Megjelenjenek-e az avatarok a partnerekhez a partnerlistában és "
+"csevegőablakokban?"
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Kilépett partnerek mutatása a partnerlistában."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr "Megjelenjen-e párbeszédablak a főablak bezárásakor a címsor X gombjával."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Megjelenjen-e a partnerlista tömör módban."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "A téma használata csevegőszobákhoz."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"A partnerlista rendezéséhez használandó feltétel. A lehetséges értékek: "
+"„name” (név, ez az alapértelmezett) és „state” (állapot)."
+
+#: ../libempathy/empathy-tp-contact-list.c:676 ../src/empathy.c:189
+msgid "People nearby"
+msgstr "Közeli emberek"
+
+#: ../libempathy/empathy-utils.c:471
+msgid "Available"
+msgstr "Elérhető"
+
+#: ../libempathy/empathy-utils.c:473
+msgid "Busy"
+msgstr "Elfoglalt"
+
+#: ../libempathy/empathy-utils.c:476
+msgid "Away"
+msgstr "Távol"
+
+#: ../libempathy/empathy-utils.c:478
+msgid "Hidden"
+msgstr "Rejtett"
+
+#: ../libempathy/empathy-utils.c:481
+msgid "Offline"
+msgstr "Kilépett"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:334
+msgid "All"
+msgstr "Minden"
+
+#: ../libempathy-gtk/empathy-account-widget.c:286
+#: ../libempathy-gtk/empathy-account-widget.c:331
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Haladó</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "A jelszó elfelejtése és a mező törlése."
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "_Jelszó:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+msgid "Screen _Name:"
+msgstr "Megjelenő _név:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Port:"
+msgstr "_Port:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+#: ../src/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Kiszolgáló:"
+
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "Bejelentkezési a_zonosító:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "ICQ _UIN:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "_Charset:"
+msgstr "_Karakterkészlet:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr "Új hálózat"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Hálózat</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Kiszolgálók</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Karakterkészlet:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Új IRC hálózat létrehozása"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Kijelölt IRC hálózat szerkesztése"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Hálózat"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Hálózat:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Becenév:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Jelszó:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Kilépési üzenet:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Valódi név:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "A kijelölt IRC hálózat eltávolítása"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Kiszolgáló beállításainak felülbírálása</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "_Prioritás:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "_Erőforrás:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Régi SS_L használata"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "_Titkosítás szükséges (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "SSL tanúsítvány_hibák figyelmen kívül hagyása"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_Email:"
+msgstr "_E-mail:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Utónév: "
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_Jabber azonosító:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "_Vezetéknév:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../src/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Becenév:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "_Közzétett név:"
+
+#. look up the DNS SRV record at the service's domain for the host name of a STUN server.
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+msgid "Discover STUN"
+msgstr "STUN feltérképezése"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+msgid "Stun Server:"
+msgstr "STUN kiszolgáló:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+msgid "Stun port:"
+msgstr "Stun port:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+msgid "_Username:"
+msgstr "_Felhasználónév:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "_Japán kiszolgáló:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "A _Yahoo Japan használata"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Ignore conference and chatroom invitations"
+msgstr "Konferencia- és csevegőszoba-meghívások _figyelmen kívül hagyása"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Room List locale:"
+msgstr "Sz_obalista területi beállítása:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:226
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Új fiók hozzáadásához kattintson a Hozzáadás gombra és létrejön egy új "
+"bejegyzés a beállítás elkezdéséhez."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:230
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"Új fiók létrehozásához először telepítenie kell egy háttérprogramot minden "
+"használandó protokollhoz."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Nincs kiválasztva fiók</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:238
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Ha nem kíván fiókot hozzáadni, akkor kattintson a beállítani kívánt fiókra a "
+"bal oldali listában."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:244
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Nincsenek beállítva fiókok</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:425
+msgid "Enabled"
+msgstr "Engedélyezve"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:435
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Fiókok"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:918
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"A(z) %s fiókjának eltávolítására készül!\n"
+"Biztosan folytatni akarja?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:924
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"A társított társalgások és csevegőszobák NEM kerülnek törlésre ha a "
+"folytatást választja.\n"
+"\n"
+"Ha később a fiók visszaállítása mellett dönt, akkor ezek elérhetővé válnak."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Új fiók</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Beállítások</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "_Létrehozás"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Új fiók hozzáadásához kattintson a Hozzáadás gombra és létrejön egy új "
+"bejegyzés a beállítás elkezdéséhez.\n"
+"\n"
+"Ha nem kíván fiókot hozzáadni, akkor kattintson a beállítani kívánt fiókra a "
+"bal oldali listában."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Típus:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:458
+msgid "Select Your Avatar Image"
+msgstr "Válassza ki az avatarját"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:461
+msgid "No Image"
+msgstr "Nincs kép"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:521
+msgid "Images"
+msgstr "Képek"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:525
+msgid "All Files"
+msgstr "Minden fájl"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Kattintson ide a nagyításhoz"
+
+#: ../libempathy-gtk/empathy-chat.c:274 ../src/empathy.c:70
+#: ../src/empathy-call-window.c:358
+msgid "Disconnected"
+msgstr "Kapcsolat bontva"
+
+#: ../libempathy-gtk/empathy-chat.c:552
+msgid "offline"
+msgstr "kilépett"
+
+#: ../libempathy-gtk/empathy-chat.c:555
+msgid "invalid contact"
+msgstr "érvénytelen partner"
+
+#: ../libempathy-gtk/empathy-chat.c:558
+msgid "permission denied"
+msgstr "hozzáférés megtagadva"
+
+#: ../libempathy-gtk/empathy-chat.c:561
+msgid "too long message"
+msgstr "túl hosszú üzenet"
+
+#: ../libempathy-gtk/empathy-chat.c:564
+msgid "not implemented"
+msgstr "nincs megvalósítva"
+
+#: ../libempathy-gtk/empathy-chat.c:567
+msgid "unknown"
+msgstr "ismeretlen"
+
+#: ../libempathy-gtk/empathy-chat.c:571
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "hiba a(z) „%s” üzenet elküldésekor: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:601
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Téma beállítva: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:603
+msgid "No topic defined"
+msgstr "Nincs megadva témakör"
+
+#: ../libempathy-gtk/empathy-chat.c:1009
+msgid "Insert Smiley"
+msgstr "Hangulatjel beszúrása"
+
+#: ../libempathy-gtk/empathy-chat.c:1056
+msgid "_Check Word Spelling..."
+msgstr "Szó _helyesírásának ellenőrzése..."
+
+#: ../libempathy-gtk/empathy-chat.c:1157
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s belépett a szobába"
+
+#: ../libempathy-gtk/empathy-chat.c:1160
+#, c-format
+msgid "%s has left the room"
+msgstr "%s elhagyta a szobát"
+
+#: ../libempathy-gtk/empathy-chat.c:1626
+msgid "Connected"
+msgstr "Kapcsolódva"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Téma:</b>"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Csoport"
+
+#: ../libempathy-gtk/empathy-chat-view.c:433
+msgid "_Copy Link Address"
+msgstr "Hivatkozás cí_mének másolása"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Open Link"
+msgstr "_Hivatkozás megnyitása"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:180
+msgid "Personal Information"
+msgstr "Személyes információk"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+msgid "Edit Contact Information"
+msgstr "Partnerinformációk szerkesztése"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:186
+msgid "Contact Information"
+msgstr "Partnerinformációk"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:281
+msgid "I would like to add you to my contact list."
+msgstr "Szeretném hozzáadni Önt a partnerlistámhoz."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:305
+msgid "New Contact"
+msgstr "Új partner"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "_Döntés később"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Feliratkozási kérés"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1162
+#, c-format
+msgid "Do you really want to remove the group '%s' ?"
+msgstr "Valóban el kívánja távolítani a(z) „%s” csoportot?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1164
+msgid "Removing group"
+msgstr "Csoport eltávolítása"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1211
+#: ../libempathy-gtk/empathy-contact-list-view.c:1291
+msgid "_Remove"
+msgstr "_Eltávolítás"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1241
+#, c-format
+msgid "Do you really want to remove the contact '%s' ?"
+msgstr "Valóban el kívánja távolítani „%s” partnert?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1243
+msgid "Removing contact"
+msgstr "Partner eltávolítása"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1248
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Elnézést, már nem szeretném a partnerlistámon látni."
+
+#: ../libempathy-gtk/empathy-contact-widget.c:694
+msgid "Select"
+msgstr "Kijelölés"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:704
+#: ../src/empathy-main-window.c:628
+msgid "Group"
+msgstr "Csoport"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Kliensinformációk</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Partner részletei</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Partner</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Csoportok</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+#: ../src/empathy-chatrooms-window.glade.h:1
+#: ../src/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Felhasználói fiók:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Álnév:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Születésnap:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Kliens:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Partnerinformációk"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "E-mail:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Teljes név:"
+
+#. Identifier to connect to Instant Messaging network
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Identifier:"
+msgstr "Azonosító:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "Information requested..."
+msgstr "Információk lekérve..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid "OS:"
+msgstr "OS:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Válassza ki azokat a csoportokat, amelyekben a partner megjelenjen, "
+"kiválaszthat nulla vagy több csoportot is."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Version:"
+msgstr "Verzió:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
+msgid "Web site:"
+msgstr "Weboldal:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+msgid "new server"
+msgstr "új kiszolgáló"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:516
+msgid "Server"
+msgstr "Kiszolgáló"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:531
+msgid "Port"
+msgstr "Port"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:544
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+msgid "Account"
+msgstr "Fiók"
+
+#: ../libempathy-gtk/empathy-log-window.c:504 ../src/empathy-chat-window.c:276
+msgid "Conversation"
+msgstr "Társalgás"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+msgid "Date"
+msgstr "Dátum"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Conversations"
+msgstr "Társalgások"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Previous Conversations"
+msgstr "Korábbi társalgások"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:5
+msgid "Search"
+msgstr "Keresés"
+
+#. Searching *for* something
+#: ../libempathy-gtk/empathy-log-window.glade.h:7
+msgid "_For:"
+msgstr "_Ehhez:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Hívás"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+#: ../src/empathy-chat-window.glade.h:2
+msgid "Chat"
+msgstr "Csevegés"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "Partnerazonosító:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Új társalgás"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Egyéni üzenetek..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Egyéni üzenet"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Üzenet:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Üzenet mentése"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Állapot:"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:88
+msgid "Word"
+msgstr "Szó"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:265
+msgid "Suggestions for the word"
+msgstr "Javaslat a szóra"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Helyesírás-ellenőrző"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Javaslatok a szóhoz:"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:747
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%y. %B %e %A"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:74
+msgid "Classic"
+msgstr "Klasszikus"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:75
+msgid "Simple"
+msgstr "Egyszerű"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:76
+msgid "Clean"
+msgstr "Tiszta"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:77
+msgid "Blue"
+msgstr "Kék"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1327
+msgid "Unable to open uri"
+msgstr "Az URI nem nyitható meg"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Jelenlegi területi beállítás"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Arab"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Örmény"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Balti"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Kelta"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Közép-európai"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Egyszerűsített kínai"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Hagyományos kínai"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Horvát"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Cirill"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Cirill/orosz"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Cirill/ukrán"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Grúz"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Görög"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Gudzsarati"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Héber"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Héber (vizuális)"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Izlandi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Japán"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Koreai"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Északi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Perzsa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Román"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Dél-európai"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Thai"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Török"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Nyugati"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnami"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid "The contact to display in the applet. Empty means no contact is displayed."
+msgstr "A kisalkalmazásban megjelenítendő partner. Ha üres, akkor nem jelenik meg."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "A partner avatarja. Ha üres, akkor a partnernek nincs avatarja."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megaphone"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:420
+msgid "Talk!"
+msgstr "Beszéljen!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_Névjegy"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Információk"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+#: ../src/empathy-main-window.glade.h:15
+msgid "_Preferences"
+msgstr "_Beállítások"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Jelenlét"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:106
+msgid "Set your own presence"
+msgstr "Saját jelenlétének beállítása"
+
+#: ../src/empathy.c:73
+msgid "Invalid handle"
+msgstr "Érvénytelen becenév"
+
+#: ../src/empathy.c:76
+msgid "No matching connection"
+msgstr "Nincs megfelelő kapcsolat"
+
+#: ../src/empathy.c:79
+msgid "Invalid account"
+msgstr "Érvénytelen fiók"
+
+#: ../src/empathy.c:82
+msgid "Presence failure"
+msgstr "Jelenléthiba"
+
+#: ../src/empathy.c:85
+msgid "No accounts"
+msgstr "Nincsenek fiókok"
+
+#: ../src/empathy.c:88 ../src/empathy-main-window.c:896
+msgid "Network error"
+msgstr "Hálózati hiba"
+
+#: ../src/empathy.c:91
+msgid "Contact does not support voice"
+msgstr "A partner nem támogatja a hangátvitelt"
+
+#: ../src/empathy.c:94
+msgid "Lowmem"
+msgstr "Kevés memória"
+
+#: ../src/empathy.c:97
+msgid "Channel request generic error"
+msgstr "Általános csatornakérési hiba"
+
+#: ../src/empathy.c:100
+msgid "Channel banned"
+msgstr "A csatorna letiltva"
+
+#: ../src/empathy.c:103
+msgid "Channel full"
+msgstr "A csatorna megtelt"
+
+#: ../src/empathy.c:106
+msgid "Channel invite only"
+msgstr "A csatorna meghívásos"
+
+#: ../src/empathy.c:109
+msgid "Unknown error code"
+msgstr "Ismeretlen hibakód"
+
+#: ../src/empathy.c:318
+msgid "Don't connect on startup"
+msgstr "Ne kapcsolódjon indításkor"
+
+#: ../src/empathy.c:330
+msgid "- Empathy Instant Messenger"
+msgstr "– Empathy azonnali üzenő"
+
+#: ../src/empathy-about-dialog.c:64
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Az Empathy szabad szoftver, terjesztheti és/vagy módosíthatja a Free "
+"Software Foundation által kiadott GNU General Public License második (vagy "
+"bármely későbbi) változatában foglaltak alapján."
+
+#: ../src/empathy-about-dialog.c:68
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Az Empathy programot abban a reményben terjesztjük, hogy hasznos lesz, de "
+"nem vállalunk SEMMIFÉLE GARANCIÁT, még olyan értelemben sem, hogy a program "
+"alkalmas-e a KÖZREADÁSRA vagy EGY BIZONYOS FELADAT ELVÉGZÉSÉRE. További "
+"részletekért tanulmányozza a GNU GPL licencet."
+
+#: ../src/empathy-about-dialog.c:72
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Az Empathy programhoz a GNU General Public License egy példánya is jár, ha "
+"nem kapta meg, írjon a Free Software Foundation Inc.-nek. Levélcímük: 51 "
+"Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+
+#: ../src/empathy-about-dialog.c:100
+msgid "An Instant Messaging client for GNOME"
+msgstr "Egy azonnaliüzenő-kliens a GNOME-hoz"
+
+#: ../src/empathy-about-dialog.c:106
+msgid "translator-credits"
+msgstr "Kelemen Gábor <kelemeng@gnome.hu>"
+
+#: ../src/empathy-call-window.c:270
+msgid "End this call?"
+msgstr "Befejezi a hívást?"
+
+#: ../src/empathy-call-window.c:272
+msgid "Closing this window will end the call in progress."
+msgstr "Az ablak bezárása befejezi a folyamatban lévő hívást."
+
+#: ../src/empathy-call-window.c:273
+msgid "_End Call"
+msgstr "Hívás be_fejezése"
+
+#: ../src/empathy-call-window.c:332
+msgid "Empathy Call"
+msgstr "Empathy hívás"
+
+#: ../src/empathy-call-window.c:333
+msgid "Readying"
+msgstr "Előkészítés"
+
+#: ../src/empathy-call-window.c:344
+#, c-format
+msgid "%s - Empathy Call"
+msgstr "%s – Empathy hívás"
+
+#: ../src/empathy-call-window.c:348
+msgid "Ringing"
+msgstr "Kicseng"
+
+#: ../src/empathy-call-window.c:360
+msgid "Connecting"
+msgstr "Kapcsolódás"
+
+#: ../src/empathy-call-window.c:389
+msgid "Closed"
+msgstr "Lezárva"
+
+#. Output video label
+#: ../src/empathy-call-window.c:449
+msgid "No video output"
+msgstr "Nincs videokimenet"
+
+#: ../src/empathy-call-window.glade.h:1
+msgid "<b>Volume</b>"
+msgstr "<b>Hangerő</b>"
+
+#: ../src/empathy-call-window.glade.h:2
+msgid "End Call"
+msgstr "Hívás befejezése"
+
+#: ../src/empathy-call-window.glade.h:3
+msgid "Send Video"
+msgstr "Videó küldése"
+
+#: ../src/empathy-call-window.glade.h:4
+msgid "Start Call"
+msgstr "Hívás kezdeményezése"
+
+#: ../src/empathy-chat-window.c:316
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Társalgások (%d)"
+
+#: ../src/empathy-chat-window.c:383
+msgid "Topic:"
+msgstr "Téma:"
+
+#: ../src/empathy-chat-window.c:386
+msgid "Typing a message."
+msgstr "Üzenet írása."
+
+#: ../src/empathy-chat-window.glade.h:1
+msgid "C_lear"
+msgstr "_Törlés"
+
+#: ../src/empathy-chat-window.glade.h:3
+msgid "Insert _Smiley"
+msgstr "Ha_ngulatjel beszúrása"
+
+#: ../src/empathy-chat-window.glade.h:4
+msgid "Invitation _message:"
+msgstr "Meghívó ü_zenet:"
+
+#: ../src/empathy-chat-window.glade.h:5
+msgid "Invite"
+msgstr "Meghívás"
+
+#: ../src/empathy-chat-window.glade.h:6
+msgid "Move Tab _Left"
+msgstr "Lap _balra"
+
+#: ../src/empathy-chat-window.glade.h:7
+msgid "Move Tab _Right"
+msgstr "Lap j_obbra"
+
+#: ../src/empathy-chat-window.glade.h:8
+msgid "Select who would you like to invite:"
+msgstr "Válassza ki, hogy kit szeretne meghívni:"
+
+#: ../src/empathy-chat-window.glade.h:9
+msgid "You have been invited to join a chat conference."
+msgstr "Meghívást kapott egy konferenciacsevegésre."
+
+#: ../src/empathy-chat-window.glade.h:10
+msgid "_Contact"
+msgstr "_Partner"
+
+#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10
+msgid "_Contents"
+msgstr "_Tartalom"
+
+#: ../src/empathy-chat-window.glade.h:12
+msgid "_Conversation"
+msgstr "_Társalgás"
+
+#: ../src/empathy-chat-window.glade.h:13
+msgid "_Detach Tab"
+msgstr "_Lap leválasztása"
+
+#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr "S_zerkesztés"
+
+#: ../src/empathy-chat-window.glade.h:15 ../src/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr "_Súgó"
+
+#: ../src/empathy-chat-window.glade.h:16
+msgid "_Next Tab"
+msgstr "_Következő lap"
+
+#: ../src/empathy-chat-window.glade.h:17
+msgid "_Previous Tab"
+msgstr "_Előző lap"
+
+#: ../src/empathy-chat-window.glade.h:18
+msgid "_Tabs"
+msgstr "_Lapok"
+
+#: ../src/empathy-chat-window.glade.h:19
+msgid "gtk-close"
+msgstr ""
+
+#: ../src/empathy-chat-window.glade.h:20
+msgid "gtk-copy"
+msgstr ""
+
+#: ../src/empathy-chat-window.glade.h:21
+msgid "gtk-cut"
+msgstr ""
+
+#: ../src/empathy-chat-window.glade.h:22
+msgid "gtk-paste"
+msgstr ""
+
+#: ../src/empathy-chatrooms-window.c:262
+msgid "Name"
+msgstr "Név"
+
+#: ../src/empathy-chatrooms-window.c:280
+msgid "Room"
+msgstr "Szoba"
+
+#: ../src/empathy-chatrooms-window.c:289
+msgid "Auto Connect"
+msgstr "Automatikus kapcsolódás"
+
+#: ../src/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Kedvenc szoba szerkesztése"
+
+#: ../src/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "_Csatlakozás a szobához indításkor"
+
+#: ../src/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Csatlakozás ehhez a csevegőszobához az Empathy indításakor"
+
+#: ../src/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Kedvenc szobák kezelése"
+
+#: ../src/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "Né_v:"
+
+#: ../src/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "_Kiszolgáló:"
+
+#: ../src/empathy-chatrooms-window.glade.h:9
+#: ../src/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "Sz_oba:"
+
+#: ../src/empathy-filter.c:229
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Új üzenet %s partnertől:\n"
+"%s"
+
+#: ../src/empathy-filter.c:287
+#, c-format
+msgid "Incoming call from %s"
+msgstr "Bejövő hívás %s partnertől"
+
+#: ../src/empathy-filter.c:344
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "%s feliratkozást kért"
+
+#: ../src/empathy-filter.c:347
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Üzenet: %s"
+
+#. Tell the user that the tube can't be handled
+#: ../src/empathy-filter.c:456
+#, c-format
+msgid ""
+"%s offered you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+"%s meghívót küldött, de nem Ön rendelkezik a kezeléséhez szükséges külső "
+"alkalmazással."
+
+#: ../src/empathy-filter.c:465
+msgid "Invitation Error"
+msgstr "Meghívási hiba"
+
+#: ../src/empathy-filter.c:575
+#, c-format
+msgid ""
+"%s is offering you an invitation. An external application will be started to "
+"handle it."
+msgstr "%s meghívót küldött. A kezeléséhez egy külső alkalmazás kerül elindításra."
+
+#: ../src/empathy-filter.c:580
+#, c-format
+msgid ""
+"%s is offering you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr ""
+"%s meghívót ajánl fel, de nem Ön rendelkezik a kezeléséhez szükséges külső "
+"alkalmazással."
+
+#: ../src/empathy-main-window.c:271
+msgid "Show and edit accounts"
+msgstr "Fiókok megjelenítése és szerkesztése"
+
+#: ../src/empathy-main-window.c:611
+msgid "Contact"
+msgstr "Partner"
+
+#: ../src/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "_Fiók szerkesztése"
+
+#: ../src/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "A hitelesítés meghiúsult"
+
+#: ../src/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "Titkosítási hiba"
+
+#: ../src/empathy-main-window.c:905
+msgid "Name in use"
+msgstr "A név használatban"
+
+#: ../src/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr "Nincs megadva tanúsítvány"
+
+#: ../src/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr "A tanúsítvány nem megbízható"
+
+#: ../src/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr "A tanúsítvány lejárt"
+
+#: ../src/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr "A tanúsítvány nincs aktiválva"
+
+#: ../src/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr "A tanúsítvány gépneve eltér"
+
+#: ../src/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr "A tanúsítvány ujjlenyomata eltér"
+
+#: ../src/empathy-main-window.c:926
+msgid "Certificate self signed"
+msgstr "A tanúsítvány saját aláírású"
+
+#: ../src/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "Tanúsítványhiba"
+
+#: ../src/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "Ismeretlen hiba"
+
+#: ../src/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Partnerlista"
+
+#: ../src/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Környezet"
+
+#: ../src/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "_Csatlakozás a kedvencekhez"
+
+#: ../src/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Csatlakozás ú_jhoz..."
+
+#: ../src/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Kedvencek kezelése"
+
+#: ../src/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Kilé_pett partnerek mutatása"
+
+#: ../src/empathy-main-window.glade.h:7
+msgid "_Accounts"
+msgstr "_Fiókok"
+
+#: ../src/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "Partner _felvétele..."
+
+#: ../src/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_Csevegés"
+
+#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "Új _társalgás..."
+
+#: ../src/empathy-main-window.glade.h:14
+msgid "_Personal Information"
+msgstr "S_zemélyes információk"
+
+#: ../src/empathy-main-window.glade.h:16
+msgid "_Room"
+msgstr "Sz_oba"
+
+#: ../src/empathy-main-window.glade.h:17
+msgid "_View Previous Conversations"
+msgstr "K_orábbi társalgások megjelenítése"
+
+#: ../src/empathy-main-window.glade.h:18
+msgid "gtk-about"
+msgstr ""
+
+#: ../src/empathy-main-window.glade.h:19
+msgid "gtk-quit"
+msgstr ""
+
+#: ../src/empathy-new-chatroom-dialog.c:290
+msgid "Chat Rooms"
+msgstr "Csevegőszobák"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Keresés:"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:3
+msgid "Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Itt adja meg a szoba nevét a csatlakozáshoz, vagy kattintson néhány, a "
+"listán látható szobára."
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Adja meg a szobát üzemeltető kiszolgáló nevét, vagy hagyja üresen ha a szoba "
+"a jelenlegi fiókéval egyező kiszolgálón van"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Csatlakozás"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Csatlakozás újhoz"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "_Frissítés"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:8
+msgid "This list represents all chat rooms hosted on the server you have entered."
+msgstr "A lista a kiszolgálón található összes csevegőszobát képviseli."
+
+#: ../src/empathy-preferences.c:264
+msgid "Language"
+msgstr "Nyelv"
+
+#: ../src/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Megjelenés</b>"
+
+#: ../src/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Audio</b>"
+
+#: ../src/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Viselkedés</b>"
+
+#: ../src/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Partnerlista</b>"
+
+#: ../src/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Helyesírás-ellenőrzés ezen nyelveken:</b>"
+
+#: ../src/empathy-preferences.glade.h:6
+msgid "<b>Visual</b>"
+msgstr "<b>Látvány</b>"
+
+#: ../src/empathy-preferences.glade.h:7
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>Ezen az oldalon csak azok a nyelvek vannak felsorolva, amelyekhez "
+"telepítve van szótár.</small>"
+
+#: ../src/empathy-preferences.glade.h:8
+msgid "Automatically _connect on startup "
+msgstr "A_utomatikus kapcsolódás indításkor"
+
+#: ../src/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Az avatarok a felhasználó által kiválasztott és a partnerlistában megjelenő "
+"képek"
+
+#: ../src/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "Csevegés té_mája:"
+
+#: ../src/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Értesítések _megjelenítése, ha a partnerek elérhetővé válnak"
+
+#: ../src/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Hangok engedélyezése, ha _távol vagyok"
+
+#: ../src/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Hangok engedélyezése, ha el_foglalt vagyok"
+
+#: ../src/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "Általános"
+
+#: ../src/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Értesítések"
+
+#: ../src/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Beállítások"
+
+#: ../src/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "_Avatarok megjelenítése"
+
+#: ../src/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Hang_ulatjelek képekké alakítása"
+
+#: ../src/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "_Tömör partnerlista mutatása"
+
+#: ../src/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "Rendezés _név szerint"
+
+#: ../src/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "Rendezés áll_apot szerint"
+
+#: ../src/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Helyesírás-ellenőrzés"
+
+#: ../src/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "Témák"
+
+#: ../src/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr "Új csevegések megnyitása _külön ablakokban"
+
+#: ../src/empathy-preferences.glade.h:25
+msgid "_Play sound when messages arrive"
+msgstr "_Hang lejátszása üzenetek érkezésekor"
+
+#: ../src/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Állapot"
+
+#: ../src/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Kilépés"
+
+#: ../src/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "Partnerlista m_utatása"
+
diff --git a/trunk/po/it.po b/trunk/po/it.po
new file mode 100644
index 000000000..87d3c7918
--- /dev/null
+++ b/trunk/po/it.po
@@ -0,0 +1,1843 @@
+# Italian translation for Empaty
+# Derived from Gossip Translation
+# Copyright (C) 2003-2008 Free Software Foundation, Inc
+# This file is distributed under the same license as the Empaty package.
+# Fabio Bonelli <fabiobonelli@libero.it>, 2003
+# Michele Baldessari <michele@pupazzo.org>, 2003
+# Milo Casagrande <milo_casagrande@yahoo.it>, 2007-2008
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Empathy\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-03-05 09:08+0100\n"
+"PO-Revision-Date: 2008-03-05 09:09+0100\n"
+"Last-Translator: Milo Casagrande <milo_casagrande@yahoo.it>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Empathy - Messaggistica istantanea"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Invia e ricevi messaggi istantanei"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Apre sempre in una finestra separata le nuove conversazioni."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Il carattere da usare dopo il soprannome quando viene usato il completamento "
+"del soprannome nelle chat di gruppo."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Tema finestra conversazione"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr "Controlla se Empathy deve connettersi automaticamente all'avvio"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Controlla se deve essere usato NetworkManager"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Controlla se l'account Salut è stato creato"
+
+# (ndt) non metto fr neanche dopo morto! :D
+#: ../data/empathy.schemas.in.h:7
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Elenco dizionari per il controllo ortografico, separare gli elementi con "
+"virgole (es. it, en, nl)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Elenco contatti compatto"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Criterio di ordinamento dell'elenco contatti"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Directory predefinita da cui selezionare un'immagine per l'avatar"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Mostra un pop-up quando un contatto è disponibile"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Abilita i suoni quando si è assenti"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Abilita i suoni quando si è occupati"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Abilita il correttore ortografico"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Nasconde la finestra principale"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Nasconde la finestra principale."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Carattere soprannome completato"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Apre nuove conversazioni in finestre separate"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Mostra gli avatar"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Mostra suggerimento riguardo la chiusura della finestra principale"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Mostra contatti non in linea"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Lingue controllo ortografico"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "L'ultima directory da cui è stato scelto un avatar."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+"Il tema usato per mostrare le conversazioni nelle finestre di conversazione."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Utilizza emoticon grafici"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Utilizza suoni per le notifiche"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Utilizza un tema per le finestre di conversazione"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically login to your accounts on "
+"startup."
+msgstr ""
+"Indica se Empathy deve connettersi automaticamente agli account all'avvio."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first empathy run."
+msgstr ""
+"Indica se l'account Salut è stato creato o meno durante la prima esecuzione "
+"di empathy."
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"Indica se NetworkManager deve essere usato per connettersi/disconnettersi "
+"automaticamente."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Indica se verificare o meno le parole digitate con le lingue selezionate."
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Indica se convertire o meno gli emoticon in immagini grafiche durante le "
+"conversazioni."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Indica se emettere o meno un suono all'arrivo di un messaggio."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Indica se utilizzare o meno i suoni o meno quando si è assenti."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Indica se utilizzare o meno i suoni quando si è occupati."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+"Indica se mostrare o meno un pop-up quando un contatto diventa disponibile."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Indica se mostrare o meno gli avatar dei contatti nell'elenco contatti e "
+"nelle finestre di conversazione."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+"Indica se mostrare o meno i contatti non in linea nell'elenco dei contatti."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Indica se mostrare o meno un dialogo riguardo la chiusura della finestra "
+"principale con il pulsante \"x\" nella barra del titolo."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Indica se mostrare o meno l'elenco contatti in modalità compatta."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Indica se usare o meno un tema per le finestre di conversazione."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Indica quale criterio usare per l'ordinamento dell'elenco contatti. "
+"L'ordinamento predefinito è quello secondo il nome del contatto con il "
+"valore \"name\". Il valore \"state\" ordina in base allo stato del contatto."
+
+#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:149
+msgid "People nearby"
+msgstr "Persone nelle vicinanze"
+
+#: ../libempathy/empathy-utils.c:541
+msgid "Available"
+msgstr "Disponibile"
+
+#: ../libempathy/empathy-utils.c:543
+msgid "Busy"
+msgstr "Occupato"
+
+#: ../libempathy/empathy-utils.c:546
+msgid "Away"
+msgstr "Assente"
+
+#: ../libempathy/empathy-utils.c:548
+msgid "Hidden"
+msgstr "Nascosto"
+
+#: ../libempathy/empathy-utils.c:551
+msgid "Offline"
+msgstr "Non in linea"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Empathy è software libero; è possibile ridistribuirlo e/o modificarlo "
+"secondo i termini della licenza GNU General Public License, come pubblicata "
+"dalla Free Software Foundation; versione 2 della licenza, o (a scelta) una "
+"versione più recente."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Empathy è distribuito nella speranza che possa risultare utile, ma SENZA "
+"ALCUNA GARANZIA, nemmeno la garanzia implicita di COMMERCIABILITÀ o "
+"APPLICABILITÀ PER UNO SCOPO PARTICOLARE. Per maggiori dettagli consultare la "
+"GNU General Public License."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Una copia della GNU General Public License dovrebbe essere stata fornita con "
+"questo programma. In caso contrario scrivere a: Free Software Foundation, "
+"Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, USA"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Un client di messaggistica istantanea per GNOME"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Milo Casagrande <milo_casagrande@yahoo.it>\n"
+"Michele Baldessari\n"
+"Fabio Bonelli"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "Tutti"
+
+#: ../libempathy-gtk/empathy-account-widget.c:276
+#: ../libempathy-gtk/empathy-account-widget.c:321
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Avanzato</b>"
+
+# (ndt) suggerimento
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Dimentica la password e azzera la voce."
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "_UIN ICQ:"
+
+# (ndt) titolo
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+msgid "ICQ account settings"
+msgstr "Impostazioni account ICQ"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "Pass_word:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Charset:"
+msgstr "C_odifica caratteri:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Port:"
+msgstr "_Porta:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:12
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Server:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr "Nuova rete"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Rete</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Server</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Codifica caratteri:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Crea una nuova rete IRC"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Modifica la rete IRC selezionata"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Rete"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Rete:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Soprannome:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Password:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Messaggio di uscita:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Nome reale:"
+
+# (ndt) suggerimento
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Rimuove la rete IRC selezionata"
+
+# (ndt) titolo dialogo
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:13
+msgid "irc account settings"
+msgstr "Impostazioni account IRC"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Ignorare impostazioni server</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "I_D accesso:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "Pri_orità:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "_Risorsa:"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "_Usare vecchio SSL"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "Richiesta _cifratura (TLS/SSL)"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Ignorare errori certificati SSL"
+
+# (ndt) titolo
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:13
+msgid "jabber account settings"
+msgstr "Impostazioni account Jabber"
+
+# (ndt) titolo
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "Impostazioni account MSN"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "_Email:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Nome:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "I_D Jabber:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "C_ognome:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Soprannome:"
+
+# (ndt) dovrebbe essere il nome visualizzato con l'account
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "Nome _visibile:"
+
+# (ndt) titolo
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "Impostazioni account Salut"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "Server giapponese:"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "Usare _Yahoo giappone"
+
+# (ndt) titolo
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "Yahoo! account settings"
+msgstr "Impostazioni account Yahoo!"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Ignore conference and chatroom invitations"
+msgstr "I_gnorare conferenze e inviti canali chat"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+msgid "_Room List locale:"
+msgstr "_Nazione elenco canali:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:225
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Per aggiungere un nuovo account, fare clic sul pulsante «Aggiungi» per "
+"creare una nuova voce da configurare."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:229
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"Per aggiungere un nuovo account è necessario installare un backend per ogni "
+"protocollo da usare."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:236
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Nessun account selezionato</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Se non si desidera aggiungere un account, fare clic sull'account da "
+"configurare nell'elenco a sinistra."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:243
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Nessun account configurato</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:411
+msgid "Enabled"
+msgstr "Abilitato"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:421
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Account"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:904
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"L'account %s sta per essere rimosso.\n"
+"Procedere veramente?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:910
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Eventuali conversazioni o canali chat non verranno rimossi se si decide di "
+"procedere.\n"
+"\n"
+"Se l'account verrà inserito nuovamente, saranno ancora disponibili."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Nuovo account</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Impostazioni</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "Cr_ea"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Per aggiungere un nuovo account, fare clic sul pulsante «Aggiungi» per "
+"creare una nuova voce da configurare.\n"
+"\n"
+"Se non si desidera aggiungere un account, fare clic sull'account da "
+"configurare nell'elenco a sinistra."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Tipo:"
+
+# (ndt) titolo dialogo
+#: ../libempathy-gtk/empathy-avatar-chooser.c:449
+msgid "Select Your Avatar Image"
+msgstr "Selezione avatar"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:452
+msgid "No Image"
+msgstr "Nessuna immagine"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:512
+msgid "Images"
+msgstr "Immagini"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:516
+msgid "All Files"
+msgstr "Tutti i file"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Clic per ingrandire"
+
+# (ndt) pulsante
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+msgid "End Call"
+msgstr "Termina chiamata"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "Ingresso"
+
+# (ndt) pulsante per azzerare i livelli del volume di input e output
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "Muto"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "Uscita"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "Inviare video"
+
+# (ndt) pulsante
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Start Call"
+msgstr "Avvia chiamata"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:7
+msgid "Volume"
+msgstr "Volume"
+
+#: ../libempathy-gtk/empathy-chat.c:445
+msgid "Disconnected"
+msgstr "Disconnesso"
+
+#: ../libempathy-gtk/empathy-chat.c:580
+msgid "offline"
+msgstr "non in linea"
+
+#: ../libempathy-gtk/empathy-chat.c:583
+msgid "invalid contact"
+msgstr "contatto non valido"
+
+#: ../libempathy-gtk/empathy-chat.c:586
+msgid "permission denied"
+msgstr "permesso negato"
+
+#: ../libempathy-gtk/empathy-chat.c:589
+msgid "too long message"
+msgstr "messaggio troppo lungo"
+
+#: ../libempathy-gtk/empathy-chat.c:592
+msgid "not implemented"
+msgstr "non implementato"
+
+#: ../libempathy-gtk/empathy-chat.c:595
+msgid "unknown"
+msgstr "sconosciuto"
+
+#: ../libempathy-gtk/empathy-chat.c:599
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Errore nell'inviare il messaggio «%s»: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:1056
+msgid "Insert Smiley"
+msgstr "Inserisci emoticon"
+
+#: ../libempathy-gtk/empathy-chat.c:1103
+msgid "_Check Word Spelling..."
+msgstr "_Controllo ortografico..."
+
+#: ../libempathy-gtk/empathy-chat.c:1558
+msgid "Connected"
+msgstr "Connesso"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "Pu_lisci"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "C_hiama"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "Modifica argomen_to..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+msgid "Chat"
+msgstr "Chat"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "_Informazioni sul contatto"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "Cu_t"
+msgstr "_Taglia"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "In_vite..."
+msgstr "In_vita..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Insert _Smiley"
+msgstr "Inserisci _emoticon"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invitation _message:"
+msgstr "_Messaggio di invito:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+msgid "Invite"
+msgstr "Invita"
+
+# (ndt) voce di menù per entrare in una chat
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "_Entra in..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Left"
+msgstr "Sposta scheda a s_inistra"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Move Tab _Right"
+msgstr "Sposta scheda a _destra"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "Select who would you like to invite:"
+msgstr "Selezionare chi invitare:"
+
+# (ndt) messaggio predefinito per l'invito
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+msgid "You have been invited to join a chat conference."
+msgstr "Sei stato invitato a entrare in una conferenza."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "A_ggiungi contatto..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Add To Favorites"
+msgstr "A_ggiungi ai preferiti"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Close"
+msgstr "_Chiudi"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Sommario"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Conversation"
+msgstr "_Conversazione"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+msgid "_Copy"
+msgstr "_Copia"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Detach Tab"
+msgstr "_Distacca scheda"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "_Modifica"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "A_iuto"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Next Tab"
+msgstr "Scheda _successiva"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Paste"
+msgstr "_Incolla"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Previous Tab"
+msgstr "Scheda _precedente"
+
+# (ndt) voce di menù per accedere alle opzioni relative ai canali IRC
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "C_anale"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+msgid "_Show Contacts"
+msgstr "_Mostra contatti"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:30
+msgid "_Tabs"
+msgstr "_Schede"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:31
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr "Conversazioni _precedenti"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Copy Link Address"
+msgstr "_Copia indirizzo collegamento"
+
+#: ../libempathy-gtk/empathy-chat-view.c:449
+msgid "_Open Link"
+msgstr "Apri c_ollegamento"
+
+#: ../libempathy-gtk/empathy-chat-window.c:699
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Conversazioni (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1299
+msgid "Typing a message."
+msgstr "Scrittura messaggio."
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "Nome"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "Canale"
+
+# (ndt) dovrebbe essere il nome di una colonna
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr "Connessione automatica"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+msgid "Account:"
+msgstr "Account:"
+
+# (ndt) titolo dialogo
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Modifica canale preferito"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Entrare ne_l canale all'avvio"
+
+# (ndt) suggerimento
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Entra in questo canale all'avvio di Empathy e se si è connessi"
+
+# (ndt) titolo dialogo
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Gestione canali preferiti"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Nome:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "S_erver:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Canale:"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:176
+msgid "Personal Information"
+msgstr "Informazioni personali"
+
+# (ndt) titolo dialogo
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+msgid "Edit Contact Information"
+msgstr "Modifica informazioni contatto"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:182
+msgid "Contact Information"
+msgstr "Informazioni contatto"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:277
+msgid "I would like to add you to my contact list."
+msgstr "Vorrei aggiungerti al mio elenco contatti."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:301
+msgid "New Contact"
+msgstr "Nuovo contatto"
+
+# (ndt) pulsante
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "_Decidi successivamente"
+
+# (ndt) titolo dialogo
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Richiesta di sottoscrizione"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:197
+msgid "_Contact"
+msgstr "_Contatto"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:201
+msgid "_Group"
+msgstr "_Gruppo"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr "_Chat"
+
+# (ndt) suggerimento
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+msgid "Chat with contact"
+msgstr "Parla con un contatto"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "Infor_mation"
+msgstr "Infor_mazioni"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "View contact information"
+msgstr "Visualizza informazioni sul contatto"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Re_name"
+msgstr "_Rinomina"
+
+# (ndt) suggerimento
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Rename"
+msgstr "Rinomina il contatto"
+
+# (ndt) suggerimento
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+msgid "Edit the groups and name for this contact"
+msgstr "Modifica i gruppi e il nome di questo contatto"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "_Remove"
+msgstr "Ri_muovi"
+
+# (ndt) suggerimento
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "Remove contact"
+msgstr "Rimuove il contatto"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "_Invite to Chat Room"
+msgstr "_Invita in un canale"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "Invite to a currently open chat room"
+msgstr "Invita in un canale attualmente aperto"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "_Send File..."
+msgstr "_Invia file..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "Send a file"
+msgstr "Invia un file"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+msgid "View previous conversations with this contact"
+msgstr "Visualizza le conversazioni precedenti con questo contatto"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "_Call"
+msgstr "C_hiama"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "Start a voice or video conversation with this contact"
+msgstr "Inizia una conversazione vocale o video con questo contatto"
+
+# (ndt) dovrebbe essere il messaggio che viene inviato quando si
+# rimuove un contatto dall'elenco
+#: ../libempathy-gtk/empathy-contact-list-view.c:1469
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Mi spiace, non ti voglio più nel mio elenco contatti."
+
+# (ndt) nome di una colonna
+#: ../libempathy-gtk/empathy-contact-widget.c:688
+msgid "Select"
+msgstr "Selezione"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:698
+#: ../libempathy-gtk/empathy-main-window.c:609
+msgid "Group"
+msgstr "Gruppo"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Informazioni client</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Dettagli contatto</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Contatto</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Gruppi</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Pseudonimo:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Compleanno:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Client:"
+
+# (ndt) titolo dialogo
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Informazioni contatto"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "Email:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Nome:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "Identificatore:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "Informazione richiesta..."
+
+# (ndt) sistema operativo
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "SO:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Selezionare il gruppo in cui inserire questo contatto. È possibile "
+"selezionarne più di uno oppure nessuno."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Versione:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "Sito web:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:251
+msgid "Enter the new topic you want to set for this room:"
+msgstr "Digitare il nuovo argomento per il canale:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:361
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s è entrato nel canale"
+
+#: ../libempathy-gtk/empathy-group-chat.c:364
+#, c-format
+msgid "%s has left the room"
+msgstr "%s è uscito dal canale"
+
+#: ../libempathy-gtk/empathy-group-chat.c:445
+#, c-format
+msgid "Topic: %s"
+msgstr "Argomento: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:574
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Argomento impostato a: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:576
+msgid "No topic defined"
+msgstr "Nessun argomento definito"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Argomento:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Chat di gruppo"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+msgid "new server"
+msgstr "nuovo server"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:512
+msgid "Server"
+msgstr "Server"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:527
+msgid "Port"
+msgstr "Porta"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:540
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:499
+msgid "Account"
+msgstr "Account"
+
+#: ../libempathy-gtk/empathy-log-window.c:506
+msgid "Conversation"
+msgstr "Conversazione"
+
+#: ../libempathy-gtk/empathy-log-window.c:516
+msgid "Date"
+msgstr "Data"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "Conversazioni"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr "Conversazioni precedenti"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "Cerca"
+
+# (ndt) questo è prima di una casella di testo
+# in cui inserire il criterio di ricerca
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "_Per:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "Canali chat"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Esplora:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Digitare il nome del canale in cui entrare o fare clic su uno o più nomi di "
+"canali nell'elenco."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Digitare il server che ospita il canale o lasciarlo vuoto se il canale si "
+"trova nel server di questo account"
+
+# (ndt) pulsante
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Entra"
+
+# (ndt) titolo dialogo
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Entra in un nuovo canale"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "A_ggiorna"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr "L'elenco rappresenta tutti i canali presenti nel server indicato."
+
+# (ndt) suggerimento
+#: ../libempathy-gtk/empathy-main-window.c:266
+msgid "Show and edit accounts"
+msgstr "Mostra e modifica account"
+
+#: ../libempathy-gtk/empathy-main-window.c:630
+msgid "Contact"
+msgstr "Contatto"
+
+#: ../libempathy-gtk/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "Modifica _dettagli account"
+
+#: ../libempathy-gtk/empathy-main-window.c:896
+msgid "Network error"
+msgstr "Errore di rete"
+
+#: ../libempathy-gtk/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "Autenticazione fallita"
+
+#: ../libempathy-gtk/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "Errore di cifratura"
+
+#: ../libempathy-gtk/empathy-main-window.c:905
+msgid "Name in use"
+msgstr "Nome in uso"
+
+#: ../libempathy-gtk/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr "Certificato non fornito"
+
+#: ../libempathy-gtk/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr "Certificato non fidato"
+
+#: ../libempathy-gtk/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr "Certificato scaduto"
+
+#: ../libempathy-gtk/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr "Certificato non attivato"
+
+#: ../libempathy-gtk/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr "Corrispondenza errata nel nome host del certificato"
+
+#: ../libempathy-gtk/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr "Corrispondenza errata nell'impronta del certificato"
+
+#: ../libempathy-gtk/empathy-main-window.c:926
+msgid "Certificate self signed"
+msgstr "Certificato auto-firmato"
+
+#: ../libempathy-gtk/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "Errore nel certificato"
+
+#: ../libempathy-gtk/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "Errore sconosciuto"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Elenco contatti"
+
+# (ndt) ?
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Contesto"
+
+# (ndt) voce di menù
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Entra canali pre_feriti"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Gestione preferiti"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "M_ostra contatti non in linea"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "I_nformazioni"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Account"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_Nuova conversazione..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "Informazioni _personali"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "Preferen_ze"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Esci"
+
+# (ndt) titolo dialogo
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Chiamata"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "ID contatto:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Nuova conversazione"
+
+#: ../libempathy-gtk/empathy-preferences.c:247
+msgid "Language"
+msgstr "Lingua"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Aspetto</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Audio</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Comportamento</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Elenco contatti</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Abilitare controllo ortografico per le lingue:</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Opzioni</b>"
+
+# (ndt) indica il tipo di notifica
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Visiva</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>L'elenco dei dizionari mostra solo le lingue di cui si ha un "
+"dizionario installato.</small>"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Automatically _connect on startup "
+msgstr "C_onnettere automaticamente all'avvio"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Gli avatar sono delle immagini scelte dall'utente che vengono visualizzate "
+"nell'elenco dei contatti"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Chat Th_eme:"
+msgstr "T_ema delle conversazioni:"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Display notifications when contacts come _online"
+msgstr "Mostrare notifiche quando i contatti vengono in _linea"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _away"
+msgstr "Abilitare i suoni quando _assente"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "Enable sounds when _busy"
+msgstr "Abilitare i suoni quando _occupato"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "General"
+msgstr "Generale"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Notifications"
+msgstr "Notifiche"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Preferences"
+msgstr "Preferenze"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _avatars"
+msgstr "Mostrare _avatar"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show _smileys as images"
+msgstr "Mostrare gli _emoticon come immagini"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Show co_mpact contact list"
+msgstr "Mo_strare elenco contatti compatto"
+
+# (ndt) opzione - pulsante radio
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by _name"
+msgstr "Ordinare per _nome"
+
+# (ndt) opzione - pulsante radio
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Sort by s_tate"
+msgstr "Ordinare per s_tato"
+
+# (ndt) titolo scheda
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Spell Checking"
+msgstr "Controllo ortografico"
+
+# (ndt) titolo scheda
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "Themes"
+msgstr "Temi"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "A_prire nuove conversazioni in finestre separate"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "_Emettere un suono all'arrivo dei messaggi"
+
+# (ndt) opzione: intende l'utilizzo del tema anche per le chat IRC
+#: ../libempathy-gtk/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "_Usare per i canali chat"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Messaggi personalizzati..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Messaggio personalizzato"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Messaggio:"
+
+# (ndt) opzione
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Salvare messaggio"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Stato:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:229
+#, c-format
+msgid "%s went offline"
+msgstr "%s non è più in linea"
+
+#: ../libempathy-gtk/empathy-private-chat.c:243
+#, c-format
+msgid "%s has come online"
+msgstr "%s è ora in linea"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "Parola"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "Suggerimenti per la parola"
+
+# (ndt) titolo finestra in cui ci sono le parole controllate
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Controllo ortografico"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Suggerimenti per la parola:"
+
+#: ../libempathy-gtk/empathy-status-icon.c:369
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Nuovo messaggio da %s:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:434
+#, c-format
+msgid ""
+"Incoming call from %s:\n"
+"%s"
+msgstr ""
+"Chiamata in arrivo da %s:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:738
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Richiesta di approvazione di %s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:741
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Messaggio: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Stato"
+
+# (ndt) voce di menù
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "Mo_stra elenco contatti"
+
+# (ndt) domenica 01 ottobre 2007
+#: ../libempathy-gtk/empathy-theme-boxes.c:780
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:78
+msgid "Classic"
+msgstr "Classico"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:79
+msgid "Simple"
+msgstr "Semplice"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:80
+msgid "Clean"
+msgstr "Pulito"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:81
+msgid "Blue"
+msgstr "Blu"
+
+# (ndt) preso da totem: non sarebbe meglio Lingua attuale ?
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Localizzazione corrente"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Arabo"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Armeno"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Baltico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Celtico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Europeo centrale"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Cinese semplificato"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Cinese tradizionale"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Croato"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Cirillico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Cirillico/Russo"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Cirillico/Ucraino"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Georgiano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Greco"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Gujarati"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Ebraico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Ebraico visuale"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Islandese"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Giapponese"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Coreano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Nordico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Persiano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Rumeno"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Sud europeo"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Tailandese"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Turco"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Occidentale"
+
+# (ndt) suggerimento
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnamita"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+"Il contatto da visualizzare nell'applet. Se vuoto non viene visualizzato "
+"alcun contatto."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "L'avatar del contatto. Se vuoto il contatto non ha alcun avatar."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megafono"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Parla!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "I_nformazioni"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Presenza"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "Imposta la propria presenza"
+
+#: ../src/empathy.c:205
+msgid "- Empathy Instant Messenger"
+msgstr "- Empathy messaggistica istantanea"
+
+#~ msgid "Call from %s"
+#~ msgstr "Chiamata da %s"
+
+#~ msgid "_New Message..."
+#~ msgstr "_Nuovo messaggio..."
+
+#~ msgid "New message"
+#~ msgstr "Nuovo messaggio"
+
+# (ndt) pulsante
+#~ msgid "Disable"
+#~ msgstr "Disabilita"
+
+#~ msgid "gtk-cancel"
+#~ msgstr "gtk-cancel"
+
+#~ msgid "gtk-ok"
+#~ msgstr "gtk-ok"
diff --git a/trunk/po/ja.po b/trunk/po/ja.po
new file mode 100644
index 000000000..fc118b607
--- /dev/null
+++ b/trunk/po/ja.po
@@ -0,0 +1,1439 @@
+# empathy ja.po.
+# Copyright (C) 2007,2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the 'empathy' package.
+# Takeshi AIHANA <takeshi.aihana@gmail.com>, 2007,2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy trunk\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-02-16 18:54+0900\n"
+"PO-Revision-Date: 2008-02-16 18:53+0900\n"
+"Last-Translator: Takeshi AIHANA <takeshi.aihana@gmail.com>\n"
+"Language-Team: Japanese <gnome-translation@gnome.gr.jp>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Empathy インスタント・メッセンジャー"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "インスタント・メッセージを送受信します"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "新しい仲間と会話する度に別のウィンドウを開くかどうかです。"
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"グループ・チャットであだ名を補完する際に、あだ名の後ろに追加すべき文字です。"
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "会話ウィンドウのテーマ"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr "起動時に自動接続するかどうかを確認する"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "NetworkManager を利用できるか確認する"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Salut のアカウントを生成するかどうか"
+
+#: ../data/empathy.schemas.in.h:7
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"スペルをチェックする言語をコンマで区切って指定します (例: en, fr, nl)。"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "仲間リストを小さくする"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "仲間リストを並び替える際の条件"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "アバターの画像が格納されたデフォルトのフォルダ"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "仲間がサインインしたらポップアップする"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "離席中になったらサウンドを演奏する"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "取り込み中になったらサウンドを演奏する"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "スペルをチェックする"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "メイン・ウィンドウを隠す"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "メイン・ウィンドウを隠すかどうかです。"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "あだ名を補完する文字"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "新しい会話毎にウィンドウを開く"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "アバターを表示する"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "メイン・ウィンドウを閉じる際のヒントを表示する"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "オフラインな仲間を表示する"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "スペルをチェックする言語"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "最後にアバターを選択した時に使用したフォルダです。"
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "会話ウィンドウで使用するテーマです。"
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "スマイリー・アイコンを使う"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "状態をサウンドの演奏で通知する"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "会話ウィンドウにテーマを適用する"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically login to your accounts on "
+"startup."
+msgstr ""
+"Empathy を起動したら自動的に自分のアカウントにログインするかどうかです。"
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first empathy run."
+msgstr "Empathy を初めて起動した時に Salut アカウントを生成するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"NetworkManager 使って自動的にネットワークに接続したり再接続するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"指定した言語のスペル・チェッカで入力した単語をチェックするかどうかです。"
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "会話ウィンドウに入力したスマイリーをアイコンに変換するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "メッセージを受け取ったらサウンドを演奏するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "状態が離席中になったらサウンドを演奏するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "状態が取り込み中になったらサウンドを演奏するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "仲間がサインインしたらポップアップを表示するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "仲間リストと会話ウィンドウの中に仲間のアバターを表示するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "仲間リストの中でオフラインの仲間を表示するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"タイトルバーにある 'x' ボタンをクリックしてメインウィンドウを閉じたらメッセー"
+"ジ・ダイアログを表示するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "仲間リストを小さく表示するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "会話ウィンドウにテーマを適用するかどうかです。"
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"仲間リストの中で仲間を並び替える際に使用する条件です。デフォルトは仲間の名前 "
+"(\"name\") です。他に使用可能な値: \"state\" (仲間の状態)"
+
+#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:149
+msgid "People nearby"
+msgstr "すぐ近くにいる人達"
+
+#: ../libempathy/empathy-utils.c:539
+msgid "Available"
+msgstr "在席中"
+
+#: ../libempathy/empathy-utils.c:541
+msgid "Busy"
+msgstr "取り込み中"
+
+#: ../libempathy/empathy-utils.c:544
+msgid "Away"
+msgstr "離席中"
+
+#: ../libempathy/empathy-utils.c:546
+msgid "Hidden"
+msgstr "隠れる"
+
+#: ../libempathy/empathy-utils.c:549
+msgid "Offline"
+msgstr "オフライン"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Empathy はフリーソフトウェアです;フリーソフトウェア財団が提供する GNU 一般公"
+"衆利用許諾契約書の第二版、あるいはそれ以降の版が定める条項の下で本プログラム"
+"を再頒布または変更することができます。"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Empathy は有用とは思いますが、その頒布にあたっては市場性及び特定の目的、その"
+"適合性についての暗黙の保証を含めて、いかなる保証も行ないません。詳細について"
+"は GNU 一般公衆利用許諾契約書をご覧下さい。"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"あなたは本プログラムと一緒に GNU 一般公衆利用許諾契約書の写しを受け取っている"
+"はずです。そうでない場合は、Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA へ手紙を書いて下さい。"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "GNOME 向けのインスタント・メッセンジャー・クライアントです。"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr "相花 毅 <takeshi.aihana@gmail.com>"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "全て"
+
+#: ../libempathy-gtk/empathy-account-widget.c:276
+#: ../libempathy-gtk/empathy-account-widget.c:321
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>拡張オプション</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>上書きするサーバの設定</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "パスワードを破棄して、このエントリをクリアします"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+msgid "Login I_D:"
+msgstr "ログイン名(_D):"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+msgid "Pass_word:"
+msgstr "パスワード(_W):"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "優先度(_O):"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "リソース(_U):"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "古い SSL を使う(_L)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "暗号化する (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "SSL の証明書に関連するエラーは無視する(_I)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+msgid "_Port:"
+msgstr "ポート番号(_P):"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "サーバ(_S):"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:13
+msgid "jabber account settings"
+msgstr "Jabber アカウントの設定"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "MSN アカウントの設定"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "E-メール(_E):"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "名前(_F):"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "Jabber ID(_J):"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "名字(_L):"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "あだ名(_N):"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "公称(_P):"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "Salut アカウントの設定"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:224
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"新しいアカウントを登録するには [追加] ボタンをクリックして下さい。すると、新"
+"しいアカウントの設定画面が表示されるので必要な情報を入力して下さい。"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:228
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"新しいアカウントを登録するには、まず最初に利用するプロトコルのバックエンドを"
+"インストールしておいて下さい。"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:235
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>アカウントが選択されていません</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:236
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"アカウントを編集する場合は、左側の一覧にあるアカウントをクリックして下さい。"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:242
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>アカウントが登録されていません</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:398
+msgid "Enabled"
+msgstr "サインイン"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:408
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "アカウント"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:891
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"%s というアカウントを削除使用としています!\n"
+"本当に削除してもよろしいですか?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:897
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"ここでアカウントの削除を続行しても、実際にそのアカウントに関連する会話や部屋"
+"は削除されません。\n"
+"\n"
+"その理由は、あとでアカウントを追加し直した時に再利用できるようにするためで"
+"す。"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>新しいアカウント</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>設定</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "生成(_E)"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"新しいアカウントを登録するには [追加] ボタンをクリックして下さい。すると、新"
+"しいアカウントの設定画面が表示されるので必要な情報を入力して下さい。\n"
+"\n"
+"アカウントを編集する場合は、左側の一覧にあるアカウントをクリックして編集して"
+"下さい。"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "種類:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:449
+msgid "Select Your Avatar Image"
+msgstr "アバターに使用する画像の選択"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:452
+msgid "No Image"
+msgstr "画像なし"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:512
+msgid "Images"
+msgstr "画像ファイル"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:516
+msgid "All Files"
+msgstr "全てのファイル"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "クリックすると大きくなります"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+msgid "End Call"
+msgstr "呼び出しの終了"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "入力"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "ミュート"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "出力"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "動画を送信する"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Start Call"
+msgstr "呼び出しの開始"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:7
+msgid "Volume"
+msgstr "音量"
+
+#: ../libempathy-gtk/empathy-chat.c:436
+msgid "Disconnected"
+msgstr "不通"
+
+#: ../libempathy-gtk/empathy-chat.c:556
+msgid "offline"
+msgstr "オフライン"
+
+#: ../libempathy-gtk/empathy-chat.c:559
+msgid "invalid contact"
+msgstr "無効な仲間です"
+
+#: ../libempathy-gtk/empathy-chat.c:562
+msgid "permission denied"
+msgstr "権限がありません"
+
+#: ../libempathy-gtk/empathy-chat.c:565
+msgid "too long message"
+msgstr "メッセージが長すぎます"
+
+#: ../libempathy-gtk/empathy-chat.c:568
+msgid "not implemented"
+msgstr "未実装です"
+
+#: ../libempathy-gtk/empathy-chat.c:571
+msgid "unknown"
+msgstr "原因不明です"
+
+#: ../libempathy-gtk/empathy-chat.c:575
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "'%s' というメッセージを送信する際にエラー: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:1032
+msgid "Insert Smiley"
+msgstr "スマイリーの挿入"
+
+#: ../libempathy-gtk/empathy-chat.c:1079
+msgid "_Check Word Spelling..."
+msgstr "スペル・チェック(_C)..."
+
+#: ../libempathy-gtk/empathy-chat.c:1508
+msgid "Connected"
+msgstr "オンライン"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "クリア(_L)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "呼び出す(_L)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "トピックの変更(_T)..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+msgid "Chat"
+msgstr "チャット"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "仲間の情報(_M)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "Cu_t"
+msgstr "切り取り(_T)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "In_vite..."
+msgstr "招待する(_V)..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Insert _Smiley"
+msgstr "スマイリーの挿入(_S)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invitation _message:"
+msgstr "招待メッセージ(_M):"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+msgid "Invite"
+msgstr "招待する"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "新規(N)..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Left"
+msgstr "タブを左へ移動(_L)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Move Tab _Right"
+msgstr "タブを右へ移動(_R)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "Select who would you like to invite:"
+msgstr "招待する仲間を選択して下さい:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+msgid "You have been invited to join a chat conference."
+msgstr "あなたはチャット会議に参加するために招待されました。"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "仲間の追加(_A)..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Add To Favorites"
+msgstr "お気に入りに追加する(_A)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Close"
+msgstr "閉じる(_C)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "目次(_C)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Conversation"
+msgstr "会話(_C)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+msgid "_Copy"
+msgstr "コピー(_C)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Detach Tab"
+msgstr "タブの取り外し(_D)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "編集(_E)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "ヘルプ(_H)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Next Tab"
+msgstr "次のタブへ(_N)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Paste"
+msgstr "貼り付け(_P)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Previous Tab"
+msgstr "前のタブへ(_P)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "部屋(_R)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+msgid "_Show Contacts"
+msgstr "仲間の表示(_S)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:30
+msgid "_Tabs"
+msgstr "タブ(_T)"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:31
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr "会話の履歴を表示する(_V)"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Copy Link Address"
+msgstr "リンク先のコピー(_C)"
+
+#: ../libempathy-gtk/empathy-chat-view.c:449
+msgid "_Open Link"
+msgstr "リンクを開く(_O)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:699
+#, c-format
+msgid "Conversations (%d)"
+msgstr "会話 (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1299
+msgid "Typing a message."
+msgstr "メッセージを入力しています"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "名前"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "部屋"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr "自動サインイン"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+msgid "Account:"
+msgstr "アカウント:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "お気に入りの部屋の編集"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "起動時に入室する"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Empathy を起動しサインインしたらこの部屋に入室する"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "お気に入りの部屋"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "名前(_A):"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "サーバ(_E):"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "部屋(_R):"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:176
+msgid "Personal Information"
+msgstr "個人の情報"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+msgid "Edit Contact Information"
+msgstr "仲間情報の編集"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:182
+msgid "Contact Information"
+msgstr "仲間の情報"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:277
+msgid "I would like to add you to my contact list."
+msgstr "あなたを私の仲間一覧に追加したいです"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:301
+msgid "New Contact"
+msgstr "新しい仲間"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "あとで決める(_L)"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "登録のリクエスト"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:197
+msgid "_Contact"
+msgstr "仲間(_C)"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:201
+msgid "_Group"
+msgstr "グループ(_G)"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr "会話(_C)"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+msgid "Chat with contact"
+msgstr "仲間とチャットする"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "Infor_mation"
+msgstr "情報(_M)"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "View contact information"
+msgstr "仲間の情報を表示します"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Re_name"
+msgstr "名前の変更(_N)"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Rename"
+msgstr "名前の変更"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+msgid "Edit the groups and name for this contact"
+msgstr "この仲間のグループと名前を編集します"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "_Remove"
+msgstr "削除(_R)"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "Remove contact"
+msgstr "仲間を削除します"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "_Invite to Chat Room"
+msgstr "チャット部屋へ招待する(_I)"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "Invite to a currently open chat room"
+msgstr "現在開いているチャット部屋へ招待します"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "_Send File..."
+msgstr "ファイルの転送(_S)..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "Send a file"
+msgstr "ファイルを送信します"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+msgid "View previous conversations with this contact"
+msgstr "この仲間と以前会話した時の内容を表示します"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "_Call"
+msgstr "呼び出す(_C)"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "Start a voice or video conversation with this contact"
+msgstr "この仲間と音声または映像を使って会話を始めます"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1469
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "すみませんが、あなたを私の仲間一覧に登録したくありません"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:688
+msgid "Select"
+msgstr "選択"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:698
+#: ../libempathy-gtk/empathy-main-window.c:609
+msgid "Group"
+msgstr "グループ"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>クライアントの情報</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>仲間の詳細</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>仲間</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>グループ</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "あだ名:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "誕生日:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "クライアント:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "仲間の情報"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "E-メール:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "氏名:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "スクリーン名:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "情報の取得中..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "OS:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"この仲間を登録するグループを選択して下さい (グループは1つ以上選択したり、あ"
+"るいは全く選択しなくても構いません)"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "バージョン:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "ホームページ:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:251
+msgid "Enter the new topic you want to set for this room:"
+msgstr "この部屋にセットしたい新しいトピックを入力して下さい:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:364
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s さんが部屋に入室しました"
+
+#: ../libempathy-gtk/empathy-group-chat.c:367
+#, c-format
+msgid "%s has left the room"
+msgstr "%s さんが部屋から退室しました"
+
+#: ../libempathy-gtk/empathy-group-chat.c:447
+#, c-format
+msgid "Topic: %s"
+msgstr "トピック: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:575
+#, c-format
+msgid "Topic set to: %s"
+msgstr "新しいトピック: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:577
+msgid "No topic defined"
+msgstr "トピックはありません"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>トピック:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "グループ・チャット"
+
+#: ../libempathy-gtk/empathy-log-window.c:499
+msgid "Account"
+msgstr "アカウント"
+
+#: ../libempathy-gtk/empathy-log-window.c:506
+msgid "Conversation"
+msgstr "会話"
+
+#: ../libempathy-gtk/empathy-log-window.c:516
+msgid "Date"
+msgstr "日付"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "会話"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr "会話の履歴"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "検索"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "検索する文字(_F):"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "チャット部屋"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "参照:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"入室する部屋の名前を入力するか、下にある一覧から1つ以上の部屋をクリックして"
+"下さい"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"その部屋を提供しているサーバを入力するか、またはその部屋が現在利用している"
+"サーバにある場合は空のままにして下さい"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "入室する"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "新しいチャット部屋"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "更新(_F)"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"この一覧にはサーバで提供しているチャット専用の部屋が全て一覧表示されます"
+
+#: ../libempathy-gtk/empathy-main-window.c:266
+msgid "Show and edit accounts"
+msgstr "アカウントの一覧を表示して編集します"
+
+#: ../libempathy-gtk/empathy-main-window.c:630
+msgid "Contact"
+msgstr "仲間"
+
+#: ../libempathy-gtk/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "アカウントの編集(_E)"
+
+#: ../libempathy-gtk/empathy-main-window.c:896
+msgid "Network error"
+msgstr "ネットワークのエラーです"
+
+#: ../libempathy-gtk/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "認証に失敗しました"
+
+#: ../libempathy-gtk/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "暗号化のエラーです"
+
+#: ../libempathy-gtk/empathy-main-window.c:905
+msgid "Name in use"
+msgstr "使用中の名前"
+
+#: ../libempathy-gtk/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr "証明書がありません"
+
+#: ../libempathy-gtk/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr "信用のない証明書です"
+
+#: ../libempathy-gtk/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr "証明書の有効期限が切れています"
+
+#: ../libempathy-gtk/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr "証明書は利用できません"
+
+#: ../libempathy-gtk/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr "証明書のホスト名が一致しません"
+
+#: ../libempathy-gtk/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr "証明書の指紋が一致しません"
+
+#: ../libempathy-gtk/empathy-main-window.c:926
+msgid "Certificate self signed"
+msgstr "証明書自身の署名です"
+
+#: ../libempathy-gtk/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "証明書に関連するエラーです"
+
+#: ../libempathy-gtk/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "原因不明のエラーです"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "仲間リスト"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "コンテキスト"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "お気に入りに追加(_F)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "お気に入りの管理"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "オフラインの仲間を表示する(_O)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "情報(_A)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "アカウント(_A)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "新しい会話(_N)..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "個人情報(_P)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "設定(_P)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "終了(_Q)"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "呼び出し"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "仲間の ID:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "新しい会話"
+
+#: ../libempathy-gtk/empathy-preferences.c:247
+msgid "Language"
+msgstr "言語"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>外観</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>サウンド</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>ウィンドウ</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>仲間リスト</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>スペルをチェックする言語:</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>オプション</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>表示</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>この言語の一覧は辞書をインストールしている場合にのみ表示されます。</"
+"small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Automatically _connect on startup "
+msgstr "起動したら自動的にログインする(_C)"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "相手が選択したアバターを仲間リストに表示します"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Chat Th_eme:"
+msgstr "テーマ(_E):"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Display notifications when contacts come _online"
+msgstr "仲間がオンラインになったら通知する(_O)"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _away"
+msgstr "離席中になったらサウンドを演奏する(_A)"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "Enable sounds when _busy"
+msgstr "取り込み中になったらサウンドを演奏する(_B)"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "General"
+msgstr "全般"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Notifications"
+msgstr "通知"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Preferences"
+msgstr "設定"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _avatars"
+msgstr "アバターを表示する(_A)"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show _smileys as images"
+msgstr "スマイリーをアイコンで表示する(_S)"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Show co_mpact contact list"
+msgstr "仲間リストをコンパクトにする(_M)"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by _name"
+msgstr "名前で並び替える(_N)"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Sort by s_tate"
+msgstr "状態で並び替える(_T)"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Spell Checking"
+msgstr "スペルのチェック"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "Themes"
+msgstr "テーマ"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "新しい会話の度に別のウィンドウを開く(_O)"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "メッセージを受け取ったらサウンドを演奏する(_P)"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "チャット部屋にもテーマを適用する(_U)"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "独自のメッセージ..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "独自のメッセージ"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "メッセージ:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "このメッセージを保存する"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "状態:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:229
+#, c-format
+msgid "%s went offline"
+msgstr "%s さんがオフラインになりました"
+
+#: ../libempathy-gtk/empathy-private-chat.c:243
+#, c-format
+msgid "%s has come online"
+msgstr "%s さんがオンラインになりました"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "単語"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "推奨する単語"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "スペルのチェック"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "推奨する単語:"
+
+#: ../libempathy-gtk/empathy-status-icon.c:354
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"%s さんからの新着メッセージ:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:625
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "%s さんからのリクエスト"
+
+#: ../libempathy-gtk/empathy-status-icon.c:628
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"メッセージ: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "状態"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "仲間リストの表示(_S)"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:779
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%Y年%B%e日 %A"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:78
+msgid "Classic"
+msgstr "クラッシック"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:79
+msgid "Simple"
+msgstr "シンプル"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:80
+msgid "Clean"
+msgstr "クリーン"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:81
+msgid "Blue"
+msgstr "ブルー"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr "アプレットの中に表示する連絡先"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "連絡先のアバター"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "メガホン"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "仲間と話しをしましよう!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "情報(_I)"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "在席"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "あなたの在席情報をセットします"
+
+#: ../src/empathy.c:205
+msgid "- Empathy Instant Messenger"
+msgstr "- Empathy インスタント・メッセンジャー"
diff --git a/trunk/po/lt.po b/trunk/po/lt.po
new file mode 100644
index 000000000..001d52cef
--- /dev/null
+++ b/trunk/po/lt.po
@@ -0,0 +1,1745 @@
+# translation of lt.po to Lithuanian
+# Lithuanian translation of gossip.
+# Copyright (C) 2004-2007 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gossip package.
+#
+#
+# Justina Klingaitė <justina.klingaite@gmail.com>, 2006.
+# Gintautas Miliauskas <gintas@akl.lt>, 2006.
+# Žygimantas Beručka <zygis@gnome.org>, 2004-2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2007-01-14 14:23+0200\n"
+"Last-Translator: Žygimantas Beručka <zygis@gnome.org>\n"
+"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
+"100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Bendravimas žinutėmis"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Bendravimas žinutėmis"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Naujiems pokalbiams visada atverti atskirą pokalbio langą."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "Pokalbio lango tema"
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Kableliu atskirtų kalbų, kurių rašyba tikrinama, sąrašas (pvz. lt, en, fr)."
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Compact contact list"
+msgstr "Kompaktiškas bičiulių sąrašas"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr "Katalogas, iš kurio renkamas paveikslėlis"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr "Įjungti iššokantį langą, rodomą žmogui prisijungus"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr "Atjungti garsus, kai manęs nėra"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr "Atjungti garsus, kai aš užsiėmęs"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable spell checker"
+msgstr "Įjungti rašybos tikrinimą"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Paslėpti pagrindinį langą"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Paslėpti pagrindinį langą."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr "Atverti pokalbiu atskiruose languose"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr "Rodyti bičiulių paveikslėlius"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show hint about closing the main window"
+msgstr "Rodyti pranešimą apie pagrindinio lango užvėrimą"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Rodyti atsijungusius bičiulius"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr "Kalbų rašybos tikrinimas"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Paskutinis katalogas, iš kurio pasirinktas paveikslėlis."
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Tema naudojama pokalbio rodymui pokalbių lange."
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Naudoti grafines šypsenėles"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Naudoti įspėjimo garsus"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr "Naudoti temą pokalbių kambariams"
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr "Ar tikrinti žodžių rašybą pagal pasirinktą kalbą."
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Ar pokalbiuose paversti šypsenėles į grafinius paveiksliukus."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Ar sugroti garsą kai atvyksta nauja žinutė."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Ar groti garsus kai tavęs nėra."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Ar groti garsu kai tu užsiėmęs."
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Ar rodyti iššokantį langą, kai žmogus prisijungia prie tinklo."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Ar rodyti pašnekovų paveikslėlius kontaktų sąraše ir pokalbių languose."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Ar bičiulių sąraše rodyti bičiulius, kurie yra atsijungę."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Ar rodyti pranešimo apie pagrindinio lango uždarymą dialogą su mygtuku „x“ "
+"antraštės juostoje."
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Ar bičiulių sąrašą rodyti kompaktiniame režime ar ne."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Ar naudoti temą pokalbių kambariams ar ne."
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Atsijungęs"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Esu"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Užsiėmęs"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Manęs nėra."
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+msgid "Show and edit accounts"
+msgstr "Rodyti ir taisyti abonentus"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Grupė"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+msgid "Contact"
+msgstr "Bičiulis"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "_Rodyti bičiulių sąrašą"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Konktestas"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Prisijungti prie _mėgstamų"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr "Prisijungi prie _naujo..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr "Tvarkyti mėgstamus..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Rodyti _atsijungusius bičiulius"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+msgid "_About"
+msgstr "_Apie"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Abonentai"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "Pri_dėti bičiulį..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "P_okalbis"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Turinys"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "_Edit"
+msgstr "_Keisti"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "_Žinynas"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Nauja žinutė..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "_Asmeninė informacija"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Nustatymai"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "Iš_eiti"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr "_Kambarys"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr "Žiūrė_ti ankstesnius pokalbius"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Būsena"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Rodyti bičiulių sąrašą"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+#, fuzzy
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Gossip yra laisva programinė įranga; galite ją platinti ir/ar modifikuoti "
+"GNU bendrosios viešosios licencijos sąlygomis, kurios paskelbtos Laisvosios "
+"programinės įrangos fondo; 2-osios arba (Jūsų pasirinkimu) bet kurios "
+"vėlesnės licencijos versijos sąlygomis."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+#, fuzzy
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Gossip yra platinama tikintis, kad jis bus naudinga, bet BE JOKIŲ GARANTIJŲ; "
+"netgi be numanomų PARDAVIMO arba TINKAMUMO TAM TIKRAM TIKSLUI garantijų. Dėl "
+"išsamesnės informacijos žiūrėkite GNU bendrąją viešąją licenciją."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Jūs turėjote gauti GNU bendrosios viešosios licencijos kopiją kartu su "
+"Gossip; jeigu negavote, rašykite Laisvosios programinės įrangos fondui, 51 "
+"Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Greitų žinučių klientas skirtas GNOME"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Žygimantas Beručka\n"
+"Justina Klingaitė"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Esu"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Abonentas nepasirinktas</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Norėdami pridėti naują abonentą, galite spustelėti mygtuką „Pridėti“ ir bus "
+"sukurtas naujas įrašas konfigūravimui.\n"
+"\n"
+"Jeigu nenorite pridėti abonento, paprasčiausiai spustelėkite pageidaujamą "
+"konfigūruoti abonentą sąraše kairėje pusėje."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Nėra sukonfigūruotų abonentų</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Norėdami pridėti naują abonentą, galite spustelėti mygtuką „Pridėti“ ir bus "
+"sukurtas naujas įrašas konfigūravimui."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr "Abonentai"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Ištrinsite abonentą %s!\n"
+"Ar tikrai norite tęsti?"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Jei nuspręsite tęsti, susiję pokalbiai bei pokalbių kambariai nebus "
+"ištrinti.\n"
+"\n"
+"Jei vėliau vėl pridėsite abonentą, jie vis dar bus prieinami."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+msgid "<b>Account</b>"
+msgstr "<b>Abonentas</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Abonentas</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+msgid "<b>Settings</b>"
+msgstr "<b>Nustatymai</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Sukurti"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Norėdami pridėti naują abonentą, galite spustelėti mygtuką „Pridėti“ ir bus "
+"sukurtas naujas įrašas konfigūravimui.\n"
+"\n"
+"Jeigu nenorite pridėti abonento, paprasčiausiai spustelėkite pageidaujamą "
+"konfigūruoti abonentą sąraše kairėje pusėje."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+msgid "_Name:"
+msgstr "_Vardas:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+msgid "_Type:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Užmiršti slaptažodį ir išvalyri įrašą."
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr "Prisijungimo I_D:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+msgid "Pass_word:"
+msgstr "Sla_ptažodis:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr "Res_ursas:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+msgid "Use encryption (SS_L)"
+msgstr "Naudoti šifravimą (SS_L)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+msgid "_Port:"
+msgstr "_Prievadas:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Serveris:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr "jabber abonento nustatymai"
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Neprisijungęs"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr "Įterpti šypsniuką"
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr "_Tikrinti žodžių rašybą..."
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "Prisijungęs"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "Išva_lyti"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr "Pakeisti _temą..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Pokalbis"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr "Bičiulio infor_macija"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+msgid "Cu_t"
+msgstr "_Iškirpti"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+msgid "In_vite..."
+msgstr "_Pakviesti..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "Įterpti _šypsiuką"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+msgid "Invitation _message:"
+msgstr "Pakvietimo ži_nutė:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr "Pakviesti"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Perkelti kortelę į _kairę"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Perkelti kortelę į _dešinę"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr "Pasirinkite ką norite pakviesti:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "Esate kviečiami prisijungti prie pokalbių konferencijos."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "Į_dėti į mėgstamiausius"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr "_Užverti"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Pokalbis"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr "_Kopijuoti"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "A_tkabinti kortelę"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "_Sekanti kortelė"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr "Į_dėti"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "_Ankstesnė kortelė"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr "_Rodyti bičiulius"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "K_ortelės"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Kopijuoti nuorodos adresą"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Atverti nuorodą"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "Nauja žinutė"
+msgstr[1] "Nauja žinutė"
+msgstr[2] "Nauja žinutė"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Pokalbių kambariai"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "_Pokalbis"
+msgstr[1] "_Pokalbis"
+msgstr[2] "_Pokalbis"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "Rašoma žinutė."
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+msgid "_Contact"
+msgstr "_Bičiulis"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+msgid "_Group"
+msgstr "_Grupė"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "Chat with contact"
+msgstr "Šnekėti su bičiuliu"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "Infor_mation"
+msgstr "Infor_macija"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "View contact information"
+msgstr "Žiūrėti bičiulio informaciją"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Re_name"
+msgstr "Pervadi_nti"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Rename"
+msgstr "Pervadinti"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "Edit the groups and name for this contact"
+msgstr "Keisti šio bičiulio grupes ir vardą"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "_Pašalinti"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "Remove contact"
+msgstr "Pašalinti bičiulį"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "_Invite to Chat Room"
+msgstr "Pa_kviesti į pokalbių kambarį"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr "Pakviesti į dabar atvertą pokalbių kambarį"
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr "_Siųsti rinkmeną..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "Send a file"
+msgstr "Siųsti rinkmeną"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "View previous conversations with this contact"
+msgstr "Žiūrėti ankstesnius pokalbius su šiuo bičiuliu"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr "Kalba"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Išvaizda</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Garsai</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Elgsena</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "<b>Būsena</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr "<b>Kalbos</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Parinktys</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Vaizdas</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>Šiame kalbų sąraše yra tik tos kalbos, kurių žodynus turite įdiegę.</"
+"small>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "Paveikslėliai, pasirinkti naudotojų, rodomi bičiulių sąraše."
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "Pokalbio t_ema:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Rodyti pranešimus, kai bičiuliai prisijungia"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Įjungti garsus, kai m_anęs nėra"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Įjungti garsus, kai aš _užsiėmęs"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr "Bendra"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Pranešimai"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Nustatymai"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "Rodyti _paveikslėlius"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Versti šyp_senėles į grafinius paveiksliukus"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "Rodyti ko_mpaktišką bičiulių sąrašą"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Rašybos tikrinimas"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr "Temos"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr "Įj_ungti rašybos tikrinimą"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Atverti naujus pokalbius atskiruose languose"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "_Gavus žinutę sugroti garsą"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "_Naudoti pokalbių kambariams"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr "Nurodyta žinutė..."
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+msgid "Clear List..."
+msgstr "Išvalyti sąrašą..."
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+msgid "Are you sure you want to clear the list?"
+msgstr "Ar tikrai norite išvalyti sąrašą?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr "Visos žinutės iš greitų būsenos žinučių sąrašo bus ištrintos."
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr "Išvalyti sąrašą"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Įveskite būsenos žinutę:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+msgid "Status Message Presets"
+msgstr "Būsenos žinučių šablonai"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+msgid "_Add to status message list"
+msgstr "Į_dėti į būsenų žinučių sąrašą"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s atsijungė"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr "%s prisijungė"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr "Klasikinė"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr "Paprasta"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+msgid "Clean"
+msgstr "Tvarkinga"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr "Mėlyna"
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Paleidimo metu neprisijungti"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "- Greitų žinučių programa „Gossip“"
+
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Greitų žinučių programa „Gossip“"
+
+#~ msgid "Normal"
+#~ msgstr "Normalus"
+
+#~ msgid "Joining"
+#~ msgstr "Jungiamasi"
+
+#~ msgid "Active"
+#~ msgstr "Aktyvus"
+
+#~ msgid "Inactive"
+#~ msgstr "Neaktyvus"
+
+#~ msgid "Unknown"
+#~ msgstr "Nežinoma"
+
+#~ msgid "Error"
+#~ msgstr "Klaida"
+
+#~ msgid "Moderator"
+#~ msgid_plural "Moderators"
+#~ msgstr[0] "Moderatorius"
+#~ msgstr[1] "Moderatoriai"
+#~ msgstr[2] "Moderatorių"
+
+#~ msgid "Participant"
+#~ msgid_plural "Participants"
+#~ msgstr[0] "Dalyvis"
+#~ msgstr[1] "Dalyviai"
+#~ msgstr[2] "Dalyvių"
+
+#~ msgid "Visitor"
+#~ msgid_plural "Visitors"
+#~ msgstr[0] "Lankytojas"
+#~ msgstr[1] "Lankytojai"
+#~ msgstr[2] "Lankytojų"
+
+#~ msgid "No role"
+#~ msgstr "Nėra vaidmens"
+
+#~ msgid "Owner"
+#~ msgid_plural "Owners"
+#~ msgstr[0] "Sąvininkas"
+#~ msgstr[1] "Sąvininkai"
+#~ msgstr[2] "Sąvininkų"
+
+#~ msgid "Administrator"
+#~ msgid_plural "Administrators"
+#~ msgstr[0] "Administratorius"
+#~ msgstr[1] "Administratoriai"
+#~ msgstr[2] "Administratorių"
+
+#~ msgid "Member"
+#~ msgid_plural "Members"
+#~ msgstr[0] "Narys"
+#~ msgstr[1] "Nariai"
+#~ msgstr[2] "Narių"
+
+#~ msgid "Outcast"
+#~ msgid_plural "Outcasts"
+#~ msgstr[0] "Benamis"
+#~ msgstr[1] "Benamiai"
+#~ msgstr[2] "Benamių"
+
+#~ msgid "No affiliation"
+#~ msgstr "Ne narys"
+
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "Toks slapyvardis jau naudojamas."
+
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr "Prisijungimui prie šio kambario reikalingas slaptažodis."
+
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr "Nutolęs konferencijos serveris per ilgai neatsakė."
+
+#~ msgid "The conference server you tried to join could not be found."
+#~ msgstr "Konferencijos serveris, prie kurio bandėte prisijungti, nerastas."
+
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Įvyko nežinoma klaida. Patikrinkite, ar informacija teisinga."
+
+#~ msgid "Joining the chatroom was canceled."
+#~ msgstr "Prisijungimas prie pokalbių kambario buvo atšauktas."
+
+#~ msgid "Unavailable"
+#~ msgstr "Neprieinamas"
+
+#~ msgid "An unknown error occurred."
+#~ msgstr "Iškilo nežinoma klaida."
+
+#~ msgid "Connection refused."
+#~ msgstr "Susijungimas atmestas."
+
+#~ msgid "Server address could not be resolved."
+#~ msgstr "Nepavyko rasti serverio adreso."
+
+#~ msgid "Connection timed out."
+#~ msgstr "Prisijungimas dėl neaktyvumo nutrauktas."
+
+#~ msgid "Authentication failed."
+#~ msgstr "Autentikuotis nepavyko."
+
+#~ msgid "The username you are trying already exists."
+#~ msgstr "Pasirinktas naudotojo vardas jau užimtas."
+
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "Pasirinktas naudotojo vardas netinkamas."
+
+#~ msgid "This feature is unavailable."
+#~ msgstr "Šios funkcijos nėra."
+
+#~ msgid "This feature is unauthorized."
+#~ msgstr "Ši funkcija neleistina."
+
+#~ msgid "A specific protocol error occurred that was unexpected."
+#~ msgstr "Iškilo netikėta specifinė protokolo klaida."
+
+#~ msgid "new account"
+#~ msgstr "naujas abonentas"
+
+#~ msgid "Home"
+#~ msgstr "Namai"
+
+#~ msgid "Couldn't send message!"
+#~ msgstr "Nepavyko išsiųsti žinutės!"
+
+#~ msgid "Connection could not be opened"
+#~ msgstr "Nepavyko atverti ryšio"
+
+#~ msgid "Service has gone and is no longer available"
+#~ msgstr "Paslauga dingo ir daugiau neteikiama"
+
+#~ msgid "Bad or malformed request to this service"
+#~ msgstr "Neteisinga paslaugos užklausa"
+
+#~ msgid "Unauthorized request to this service"
+#~ msgstr "Neleistina paslaugos užklausa"
+
+#~ msgid "Payment is required for this service"
+#~ msgstr "Už šią paslaugą reikia apmokėti"
+
+#~ msgid "This service is forbidden"
+#~ msgstr "Ši paslauga uždrausta"
+
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Ši paslauga neteikiama arba nerasta"
+
+#~ msgid "Unacceptable request sent to this services"
+#~ msgstr "Neprieinama užklausa nusiųsta į šią paslaugą"
+
+#~ msgid "Registration is required"
+#~ msgstr "Būtina registracija"
+
+#~ msgid "There was a conflict of interest trying to use this service"
+#~ msgstr "Interesų susikirtimas bandant naudoti šią paslaugą"
+
+#~ msgid "There was an internal service error"
+#~ msgstr "Vidinė paslaugos klaida"
+
+#~ msgid "This feature is not implemented"
+#~ msgstr "Ši funkcija nesukurta"
+
+#, fuzzy
+#~ msgid "The remote service timed out"
+#~ msgstr "Pašalinimo paslaugos laikas baigėsi"
+
+#~ msgid "Stop"
+#~ msgstr "Sustabdyti"
+
+#~ msgid "Disconnect"
+#~ msgstr "Atsijungti"
+
+#~ msgid "Connect"
+#~ msgstr "Prisijungti"
+
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Naujo abonento nustatymai sėkmingai užregistruoti."
+
+#~ msgid "You should now be able to connect to your new account."
+#~ msgstr "Dabar turėtumėte galėti prisijungti naujuoju abonentu."
+
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Nepavyko užregistruoti naujo abonento nustatymų."
+
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Naujo abonento slaptažodis sėkmingai pakeistas."
+
+#~ msgid "You should now be able to connect with your new password."
+#~ msgstr "Dabar turėtumėte galėti prisijungti su naujuoju slaptažodžiu."
+
+#~ msgid "Failed to change your account password."
+#~ msgstr "Nepavyko pakeisti Jūsų abonento slaptažodžio."
+
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Įveskite naują šio abonento slaptažodį:\n"
+#~ "%s"
+
+#~ msgid "No information is available for this contact."
+#~ msgstr "Šio bičiulio informacija neprieinama."
+
+#~ msgid "Information requested, please wait..."
+#~ msgstr "Informacija užklausta, prašome palaukti..."
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Norėčiau Jus įtraukti į savo bičiulių sąrašą."
+
+#~ msgid "To summarize:"
+#~ msgstr "Apibendrinti:"
+
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "%d nauja žinutė"
+#~ msgstr[1] "%d naujos žinutės"
+#~ msgstr[2] "%d naujų žinučių"
+
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "%d užsisakymo prašymas"
+#~ msgstr[1] "%d užsisakymo prašymai"
+#~ msgstr[2] "%d užsisakymo prašymų"
+
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "%d rinkmenų siuntimo užklausa"
+#~ msgstr[1] "%d rinkmenų siuntimo užklausos"
+#~ msgstr[2] "%d rinkmenų siuntimo užklausų"
+
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "%d serverio pranešimas"
+#~ msgstr[1] "%d serverio pranešimai"
+#~ msgstr[2] "%d serverio pranešimų"
+
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "%d klaida"
+#~ msgstr[1] "%d klaidos"
+#~ msgstr[2] "%d klaidų"
+
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "Jeigu užversite, prarasite visą neperskaitytą informaciją."
+
+#~ msgid "Gossip is still running, it is just hidden."
+#~ msgstr "Gossip vis dar veikia, ji tiesiog paslėpta."
+
+#~ msgid "Click on the notification area icon to show Gossip."
+#~ msgstr ""
+#~ "Spragtelėkite pranešimų vietoje esančią piktogramą norėdami pamatyti "
+#~ "Gossip."
+
+#~ msgid "You were about to quit!"
+#~ msgstr "Ketinate užverti programą!"
+
+#~ msgid ""
+#~ "Since no system or notification tray has been found, this action would "
+#~ "normally quit Gossip.\n"
+#~ "\n"
+#~ "This is just a reminder, from now on, Gossip will quit when performing "
+#~ "this action unless you uncheck the option below."
+#~ msgstr ""
+#~ "Kadangi nerasta sistemos ar pranešimų vietos skydelių, šiuo veiksmu "
+#~ "Gossip uždaroma.\n"
+#~ "\n"
+#~ "Tai tik priminimas, nuo dabar, atliekant šį veiksmą Gossip bus uždaroma, "
+#~ "nebent išjungsite žemiau esančią parinktį."
+
+#~ msgid "Edit Account _Details"
+#~ msgstr "Keisti abonento _informaciją"
+
+#~ msgid "Click to enlarge"
+#~ msgstr "Spauskite padidinti"
+
+#~ msgid "Word"
+#~ msgstr "Žodis"
+
+#~ msgid "Select who would you like to invite to room:"
+#~ msgstr "Pasirinkite ką norite pakviesti į kabarį:"
+
+#~ msgid "Select which room you would like to invite:"
+#~ msgstr "Pasirinkite į kurį kambarį norite pasiekti:"
+
+#~ msgid "New message from %s"
+#~ msgstr "Nauja žinutė iš %s"
+
+#~ msgid "Your invitation has been declined"
+#~ msgstr "Pakvietimo buvo atsisakyta"
+
+#~ msgid "Accept"
+#~ msgstr "Priimti"
+
+#~ msgid "Decline"
+#~ msgstr "Atsisakyti"
+
+#~ msgid "Name"
+#~ msgstr "Vardas"
+
+#~ msgid "Room"
+#~ msgstr "Kambarys"
+
+#~ msgid "Auto Connect"
+#~ msgstr "Automatiškai prisijungti"
+
+#~ msgid "Information requested..."
+#~ msgstr "Informacija užklausta..."
+
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr "Ar norite pašalinti bičiulį iš sąrašo?"
+
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Įveskite naują pavadinimą grupei:\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Rinktis"
+
+#~ msgid "Unsorted"
+#~ msgstr "Nesurūšiuota"
+
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server."
+#~ msgstr ""
+#~ "Nurodykite alternatyvų vardą norimą naudoti:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "Galite gauti bičiulio inforamciją iš serverio."
+
+#~ msgid "New file transfer request from %s"
+#~ msgstr "Nauja rinkmenos siuntimo užklausa iš %s"
+
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "Rinkmenų siuntimas nepalaikomas abiejų pusių."
+
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "Rinkmenos siuntimo atsisakyta."
+
+#~ msgid "The other user decided not to continue."
+#~ msgstr "Kitas naudotojas nusprendė nebetęsti."
+
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Rinkmenos siuntimo metu iškilo nežinoma klaida."
+
+#~ msgid "%s would like to send you a file."
+#~ msgstr "%s nori Jums atsiųsti rinkmeną."
+
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Kažkas nori Jums atsiųsti rinkmeną."
+
+#~ msgid "Select a file"
+#~ msgstr "Pasirinkite rinkmeną"
+
+#~ msgid "Connecting..."
+#~ msgstr "Jungiamasi..."
+
+#~ msgid "Retry connection"
+#~ msgstr "Prisijungti iš naujo"
+
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "%s pakviestas prisijungti prie šios pokalbio konferencijos."
+
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "%s nustatė temą: %s"
+
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Įveskite naują šio kambario temą:"
+
+#~ msgid "%s has joined the room"
+#~ msgstr "%s įėjo į kambarį"
+
+#~ msgid "%s has left the room"
+#~ msgstr "%s išėjo iš kambario"
+
+#~ msgid "Topic: %s"
+#~ msgstr "Tema: %s"
+
+#~ msgid "Account"
+#~ msgstr "Abonentas"
+
+#~ msgid "Conversation With"
+#~ msgstr "Pokalbis su"
+
+#~ msgid "Date"
+#~ msgstr "Data"
+
+#~ msgid "Allow multiple instances of the application to run at the same time"
+#~ msgstr "Leisti tuo pačiu metu veikti keletui programos egzempliorių"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Prieinamų abonentų sąrašas"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Prie kurio abonento prisijungti paleidimo metu"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "ABONEMENTO-VARDAS"
+
+#~ msgid "You can not use --no-connect together with --account"
+#~ msgstr "Negalite naudoti --no-connect kartu su --account"
+
+#~ msgid "No accounts available."
+#~ msgstr "Nėra prieinamų abonentų."
+
+#~ msgid "Available accounts:"
+#~ msgstr "Prieinami abonentai:"
+
+#~ msgid "[default]"
+#~ msgstr "[numatytasis]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Abonento vardu „%s“ nėra."
+
+#~ msgid "Join"
+#~ msgstr "Prisijungti"
+
+#~ msgid "Create"
+#~ msgstr "Sukurti"
+
+#~ msgid "Chat Rooms"
+#~ msgstr "Pokalbių kambariai"
+
+#~ msgid "Found %d conference rooms"
+#~ msgstr "Rasta %d konferencinių kambarių"
+
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "Ieškoma konferencinių kambarių, palaukite..."
+
+#~ msgid "Browsing cancelled!"
+#~ msgstr "Paieška atšaukta!"
+
+#~ msgid "Default"
+#~ msgstr "Numatytasis"
+
+#~ msgid "Chat!"
+#~ msgstr "Pokalbis!"
+
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s nori būti įtrauktas į bičiulių sąrašą."
+
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Kažkas nori būti įtrauktas į bičiulių sąrašą."
+
+#~ msgid "Subscription request"
+#~ msgstr "Užsisakymo prašymas"
+
+#~ msgid "Show"
+#~ msgstr "Rodyti"
+
+#~ msgid "Contact Information"
+#~ msgstr "Bičiulio informacija"
+
+#~ msgid "Subject: %s"
+#~ msgstr "Tema: %s"
+
+#~ msgid "Suggestions for the word"
+#~ msgstr "Žodžio pasiūlymas"
+
+#~ msgid "New subscription request from %s"
+#~ msgstr "Naujas užsisakymo prašymas iš %s"
+
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "Ar norite įtraukti šį asmenį į bičiulių sąrašą?"
+
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "Ar norite įtraukti %s į bičiulių sąrašą?"
+
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Įveskite abonento %s slaptažodį"
+
+#, fuzzy
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "Registruojamasi su: %s"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Atsiminti slaptažodį?"
+
+#~ msgid "Do not show this again"
+#~ msgstr "Daugiau to nerodyti"
+
+#~ msgid "Could not display the help contents."
+#~ msgstr "Nepavyko parodyti žinyno turinio."
+
+#~ msgid "Select Your Avatar Image"
+#~ msgstr "Pasirinkite savo paveikslėlį"
+
+#~ msgid "No Image"
+#~ msgstr "Paveikslėlio nėra"
+
+#~ msgid "Cancel"
+#~ msgstr "Atšaukti"
+
+#~ msgid "OK"
+#~ msgstr "Gerai"
+
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "Serveris neatsako."
+
+#~ msgid "Try again later."
+#~ msgstr "Bandykite vėliau."
+
+#~ msgid "Change"
+#~ msgstr "Pakeisti"
+
+#~ msgid "Contact goes offline"
+#~ msgstr "Bičiulis atsijungia"
+
+#~ msgid "Contact goes online"
+#~ msgstr "Bičiulis prisijungia"
+
+#~ msgid "Contact ID:"
+#~ msgstr "Bičiulio ID:"
+
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Ar norite priimti šią rinkmeną?"
+
+#~ msgid "File Transfer Request"
+#~ msgstr "Rinkmenos siuntimo užklausa"
+
+#~ msgid "File name:"
+#~ msgstr "Rinkmenos vardas:"
+
+#~ msgid "File size:"
+#~ msgstr "Rinkmenos dydis:"
+
+#~ msgid "Not supported yet"
+#~ msgstr "Dar nepalaikoma."
+
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "Šis asmuo nori Jums atsiųsti šią rinkmeną:"
+
+#~ msgid "Web site:"
+#~ msgstr "Tinklapis:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Priimti"
+
+#~ msgid "_Deny"
+#~ msgstr "_Atmesti"
+
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Tema:</b>"
+
+#~ msgid "Account:"
+#~ msgstr "Abonentas:"
+
+#~ msgid "Browse:"
+#~ msgstr "Naršyti:"
+
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Taisyti mėgiamą kambarį"
+
+#~ msgid ""
+#~ "Enter the room name to join here or click on one or more rooms in the "
+#~ "list."
+#~ msgstr ""
+#~ "Įveskite kambario pavadinimą arba spustelėkite vieną ar daugiau kambarių "
+#~ "sąraše."
+
+#~ msgid "Group Chat"
+#~ msgstr "Grupinis pokalbis"
+
+#~ msgid "Join New"
+#~ msgstr "Prisijungi prie naujo"
+
+#~ msgid "Join room on start_up"
+#~ msgstr "Įeiti į kambarį paleidimo met_u"
+
+#~ msgid "Join this chat room when Gossip starts and you are connected"
+#~ msgstr ""
+#~ "Įeiti į šį pokalbių kambarį, kai paleidžiamas Gossip ir prisijungus."
+
+#~ msgid "Manage Favorite Rooms"
+#~ msgstr "Tvarkyti mėgiamus kambarius"
+
+#~ msgid "N_ame:"
+#~ msgstr "V_ardas:"
+
+#~ msgid "Re_fresh"
+#~ msgstr "At_naujinti"
+
+#~ msgid "S_erver:"
+#~ msgstr "S_erveris:"
+
+#~ msgid ""
+#~ "This list represents all chat rooms hosted on the server you have entered."
+#~ msgstr ""
+#~ "Šiame sąraše pateikiami visi pokalbių kambariai esantys šiame serveryje."
+
+#~ msgid "_Nickname:"
+#~ msgstr "_Slapyvardis:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Kambarys:"
+
+#~ msgid "-"
+#~ msgstr "-"
+
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Apie</b>"
+
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "<b>Kliento informacija</b>"
+
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Grupės</b>"
+
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>Vardas</b>"
+
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Asmeninė informacija</b>"
+
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>Abonentas</b>"
+
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr ""
+#~ "<span size=\"smaller\">Pavyzdys: Jonas arba naudotojas@akl.lt</span>"
+
+#~ msgid "Accou_nt:"
+#~ msgstr "Abo_nentas:"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "Pri_dėti bičiulį..."
+
+#~ msgid "Alia_s:"
+#~ msgstr "Alternatyvu_s vardas:"
+
+#~ msgid "Avatar:"
+#~ msgstr "Paveikslėlis:"
+
+#~ msgid "Birthday:"
+#~ msgstr "Gimtadienis:"
+
+#~ msgid "C_hange"
+#~ msgstr "Pa_keisti"
+
+#~ msgid "Ch_at"
+#~ msgstr "Pok_albis"
+
+#~ msgid "Client:"
+#~ msgstr "Klientas:"
+
+#~ msgid "Con_tact:"
+#~ msgstr "_Bičiulis:"
+
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Prisij_ungti paleidimo metu"
+
+#~ msgid "Contacts"
+#~ msgstr "Bičiuliai"
+
+#~ msgid "Country:"
+#~ msgstr "Šalis:"
+
+#~ msgid "Decide _Later"
+#~ msgstr "Nuspręsti vė_liau"
+
+#~ msgid "Edit Contact"
+#~ msgstr "Keisti bičiulį"
+
+#~ msgid "Edit Groups"
+#~ msgstr "Keisti grupes"
+
+#~ msgid "Email:"
+#~ msgstr "El. paštas:"
+
+#~ msgid "ID:"
+#~ msgstr "ID:"
+
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr ""
+#~ "Jeigu pasirinksite nuspręsti vėliau, bus paklausta kito prisijungimo metu."
+
+#~ msgid "Name:"
+#~ msgstr "Vardas:"
+
+#~ msgid "OS:"
+#~ msgstr "OS:"
+
+#~ msgid "Personal Details"
+#~ msgstr "Asmeninė informacija"
+
+#~ msgid "R_egister"
+#~ msgstr "R_egistruotis"
+
+#~ msgid "Search"
+#~ msgstr "Ieškoti"
+
+#~ msgid ""
+#~ "Select the groups you want this contact to appear in, you can select more "
+#~ "than one group or no groups."
+#~ msgstr ""
+#~ "Pasirinkite grupes, kuriose rodyti šį bičiulį. Galite pasirinkti daugiau "
+#~ "nei vieną grupę arba nei vienos grupės."
+
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Nurodykite alternatyvų vardą, kurį norite naudoti:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "Bičiulio informaciją galite gauti iš serverio."
+
+#~ msgid "Spell Checker"
+#~ msgstr "Rašybos tikrinimas"
+
+#~ msgid "Subscription Request"
+#~ msgstr "Užsisakymo prašymas"
+
+#~ msgid "Suggestions for the word:"
+#~ msgstr "Žodžio pasiūlymai:"
+
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "Tai veikia kaip žemiau esančio kontaktų sąrašo filtras. Galite naudoti "
+#~ "bičiulio vardo ar ID dalis. Pvz., „akl.lt“ parodys visų, naudojančių šį "
+#~ "serverį, sąrašą."
+
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Tai vardas, kuris bus naudojamas šiam bičiuliui bičiulių sąraše"
+
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "Šis vardas bus Jūsų tapatybė pokalbių languose"
+
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr ""
+#~ "Šis vardas bus naudojamas Jūsų tapatybė, kai nauji bičiuliai žiūrės "
+#~ "informaciją apie Jus"
+
+#~ msgid "Use default name here from the contact's VCard."
+#~ msgstr "Čia naudoti numatytąjį vardą iš bičiulio VCard."
+
+#~ msgid "Use system pro_xy"
+#~ msgstr "Naudoti sistemos tarpinį ser_verį"
+
+#~ msgid "Version:"
+#~ msgstr "Versija:"
+
+#~ msgid "View Previous Conversations"
+#~ msgstr "Žiūrėti ankstesnius pokalbius"
+
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Kokį abonentą norite naudoti?"
+
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "Šio bičiulio nesekate."
+
+#~ msgid "_Birthday:"
+#~ msgstr "_Gimtadienis:"
+
+#~ msgid "_Connect"
+#~ msgstr "_Prisijungti"
+
+#~ msgid "_Description:"
+#~ msgstr "_Aprašymas:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Atsijungti"
+
+#~ msgid "_Email:"
+#~ msgstr "_El. paštas:"
+
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Ž_emiau įveskite asmens, su kuriuo norite kalbėti, vardą ar bičiulio ID:"
+
+#~ msgid "_For:"
+#~ msgstr "_Kam:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "_Vardas:"
+
+#~ msgid "_Group:"
+#~ msgstr "_Grupė:"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Slapyvardis:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "Sla_ptažodis:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "Nauja žinutė"
+
+#~ msgid "_Retrieve"
+#~ msgstr "_Gauti"
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Užsisakyti"
+
+#~ msgid "_Web site:"
+#~ msgstr "_Tinklapis:"
+
+#, fuzzy
+#~ msgid "irc account settings"
+#~ msgstr "jabber abonento nustatymai"
+
+#, fuzzy
+#~ msgid "msn account settings"
+#~ msgstr "jabber abonento nustatymai"
+
+#~ msgid "Protocol:"
+#~ msgstr "Protokolas:"
+
+#~ msgid "Choose the protocol"
+#~ msgstr "Pasirinkite protokolą"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
diff --git a/trunk/po/ml.po b/trunk/po/ml.po
new file mode 100644
index 000000000..2f54c0d84
--- /dev/null
+++ b/trunk/po/ml.po
@@ -0,0 +1,1124 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FSF-India <locale@gnu.org.in>, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:gossip\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2003-07-05 10:29+0530\n"
+"Last-Translator: FSF-India <locale@gnu.org.in>\n"
+"Language-Team: Malayalam <locale@gnu.org.in>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "സന്ദേശം:"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Compact contact list"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable spell checker"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show hint about closing the main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether to show the contact list in compact mode or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+#, fuzzy
+msgid "Offline"
+msgstr "കാര്യാലയം"
+
+#: ../libempathy/gossip-presence.c:274
+#, fuzzy
+msgid "Available"
+msgstr "ലഭ്യത"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "തിരക്ക്"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "ദൂരെ"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+msgid "Show and edit accounts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "ഘടിപ്പിക്കുക"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List - Empathy"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "ഘടിപ്പിക്കുക"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+msgid "_About"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "ഘടിപ്പിക്കുക"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "പുറത്ത് കടക്കുക"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#, fuzzy
+msgid "_Preferences"
+msgstr "മുന്‍ഗണനകള്‍"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "പുറത്ത് കടക്കുക"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+#, fuzzy
+msgid "Status"
+msgstr "<b>അവസ്ഥ</b>"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr "എഫ്.എസ്.എഫ് - ഇന്ത്യ"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "ലഭ്യത"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+msgid "<b>No Account Selected</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+msgid "<b>No Accounts Configured</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+msgid "<b>Account</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "ഘടിപ്പിക്കുക"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>അവസ്ഥ</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+msgid "Cr_eate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "നാമം:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+msgid "_Type:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "അടയാളവാക്ക്:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+msgid "Use encryption (SS_L)"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "വഴി:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "സ‍ര്‍വ്വര്:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+#, fuzzy
+msgid "Disconnected"
+msgstr "ഘടിപ്പിക്കുക"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+#, fuzzy
+msgid "Connected"
+msgstr "ഘടിപ്പിക്കുക"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+msgid "Cu_t"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+msgid "In_vite..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "സന്ദേശം:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "സന്ദേശം:"
+msgstr[1] "സന്ദേശം:"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+msgid "Chat Room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "ഘടിപ്പിക്കുക"
+msgstr[1] "ഘടിപ്പിക്കുക"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "ഘടിപ്പിക്കുക"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+msgid "_Group"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "Chat with contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "ഘടിപ്പിക്കുക"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "View contact information"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "നാമം:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Rename"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "Edit the groups and name for this contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "_Remove"
+msgstr "നീക്കുക"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "നീക്കുക"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "_Invite to Chat Room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "തള്ളിക്കളയുക"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "View previous conversations with this contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>അവസ്ഥ</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>അവസ്ഥ</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "<b>അവസ്ഥ</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "ഘടിപ്പിക്കുക"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>അവസ്ഥ</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+msgid "Notifications"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "മുന്‍ഗണനകള്‍"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr ""
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+msgid "Clear List..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+msgid "Are you sure you want to clear the list?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+#, fuzzy
+msgid "Enter status message:"
+msgstr "സന്ദേശം:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "സന്ദേശം:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "സന്ദേശം:"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+msgid "Clean"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr ""
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "സന്ദേശം:"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "അറിയാത്ത ഏതോ പ്രശ്നം"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "അറിയാത്ത ഏതോ പ്രശ്നം"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "ലഭ്യത"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "അറിയാത്ത ഏതോ പ്രശ്നം"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "Connect"
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "സന്ദേശം:"
+#~ msgstr[1] "സന്ദേശം:"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "നാമം:"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "Select"
+#~ msgstr "തള്ളിക്കളയുക"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "അറിയാത്ത ഏതോ പ്രശ്നം"
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "തള്ളിക്കളയുക"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "_Deny"
+#~ msgstr "അയ‍യ്‍ക്കുക"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>അവസ്ഥ</b>"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "നാമം:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "സ‍ര്‍വ്വര്:"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>അവസ്ഥ</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>അവസ്ഥ</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#~ msgid "Email:"
+#~ msgstr "ഇ-മെയില്:"
+
+#~ msgid "Name:"
+#~ msgstr "നാമം:"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "ഇ-മെയില്:"
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "വഴി:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "നാമം:"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "നാമം:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "അടയാളവാക്ക്:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "സന്ദേശം:"
+
+#, fuzzy
+#~ msgid "Preset status messages"
+#~ msgstr "സന്ദേശം:"
+
+#, fuzzy
+#~ msgid "Preset status messages."
+#~ msgstr "സന്ദേശം:"
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "നാമം:"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "വഴി:"
+
+#, fuzzy
+#~ msgid "Server:"
+#~ msgstr "സ‍ര്‍വ്വര്:"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "അല്ല"
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "അതെ"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "സന്ദേശം:"
+
+#, fuzzy
+#~ msgid "Available..."
+#~ msgstr "ലഭ്യത"
+
+#, fuzzy
+#~ msgid "Busy..."
+#~ msgstr "തിരക്ക്"
+
+#, fuzzy
+#~ msgid "Away..."
+#~ msgstr "ദൂരെ"
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "വഴി:"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "മുന്‍ഗണനകള്‍"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "To:"
+#~ msgstr "വരെ:"
+
+#~ msgid "_Reply..."
+#~ msgstr "മറുപടി..."
+
+#~ msgid "_Send"
+#~ msgstr "അയ‍യ്‍ക്കുക"
+
+#~ msgid "C_onnect"
+#~ msgstr "ഘടിപ്പിക്കുക"
+
+#~ msgid "_Add"
+#~ msgstr "ചേര്ക്കുക"
+
+#, fuzzy
+#~ msgid "Sound"
+#~ msgstr "അയ‍യ്‍ക്കുക"
+
+#, fuzzy
+#~ msgid "translator_credits_old"
+#~ msgstr "എഫ്.എസ്.എഫ് - ഇന്ത്യ <gnu@gnu.org.in>"
+
+#~ msgid "Others"
+#~ msgstr "മറ്റുള്ളവ"
+
+#~ msgid "minutes"
+#~ msgstr "മിനിട്ട്"
diff --git a/trunk/po/ms.po b/trunk/po/ms.po
new file mode 100644
index 000000000..46701a827
--- /dev/null
+++ b/trunk/po/ms.po
@@ -0,0 +1,1982 @@
+# GnomeICU Malay Translation
+# Copyright (C) 2001-2003 Free Software Foundation, Inc.
+# 1. Khairulanuar Abd Majid <khairul@ikhlas.com>, 2001, 2002.
+# 2. Hasbullah Bin Pit <sebol@ikhlas.com> 2002,2003
+msgid ""
+msgstr ""
+"Project-Id-Version: gnomeicu 0.95.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2003-11-30 00:07+0730\n"
+"Last-Translator: Hasbullah Bin Pit <sebol@ikhlas.com>\n"
+"Language-Team: Bahasa Melayu <gabai-penyumbang@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Pesanan Segera"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Pesanan Segera"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "Tambah ke senarai kenalan"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+#, fuzzy
+msgid "Enable sound when away"
+msgstr "Matikan bunyi ketika _away"
+
+#: ../data/empathy.schemas.in.h:9
+#, fuzzy
+msgid "Enable sound when busy"
+msgstr "Matikan bunyi ketika _sibuk"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Gossip - Kirim Mesej"
+
+#: ../data/empathy.schemas.in.h:11
+#, fuzzy
+msgid "Hide main window"
+msgstr "Lebar bagi tetingkap utama"
+
+#: ../data/empathy.schemas.in.h:12
+#, fuzzy
+msgid "Hide the main window."
+msgstr "Lebar bagi tetingkap utama"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "_Papar Senarai Kenalan"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "Tinggi bagi tetingkap utama."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Papar kenalan luartalian"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Guna bunyi pemakluman"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Samada memainkan bunyi ketika mesej tiba atau tidak."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Samada memainkan bunyi ketika away atau tidak."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Samada memainkan bunyi ketika sibuk atau tidak."
+
+#: ../data/empathy.schemas.in.h:28
+#, fuzzy
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Samada memainkan bunyi ketika mesej tiba atau tidak."
+
+#: ../data/empathy.schemas.in.h:29
+#, fuzzy
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Samada memapar senarai kenalan yang luartalian pada senarai kenalan."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Samada memapar senarai kenalan yang luartalian pada senarai kenalan."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Samada memapar senarai kenalan yang luartalian pada senarai kenalan."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Luar Talian"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Ada"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Sibuk"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Away"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Papar Senarai Kenalan"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "_Tambah Kenalan..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "_Sorok Senarai Kenalan"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "Sambung"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "_Edit Kegemaran..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Papar Kenalan _Luartalian"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Terima"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+#, fuzzy
+msgid "_Accounts"
+msgstr "_Terima"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "_Tambah Kenalan..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Chat"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "Sambung"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "_Keluar"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+#, fuzzy
+msgid "_New Message..."
+msgstr "Kirim _Mesej..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+#, fuzzy
+msgid "_Personal Information"
+msgstr "Maklumat peribadi"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "Ke_utamaan"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Keluar"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+#, fuzzy
+msgid "_Room"
+msgstr "_Bilik:"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "_View Previous Conversations"
+msgstr "Per_bualan"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+#, fuzzy
+msgid "Status"
+msgstr "Mesej Status"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Papar Senarai Kenalan"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+#, fuzzy
+msgid "An Instant Messaging client for GNOME"
+msgstr "Klien Jabber bagi GNOME"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr ""
+"Khairulanuar Abd Majid\n"
+"Hasbullah Bin Pit"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Ada"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Kegemaran:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Kegemaran:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+#, fuzzy
+msgid "Accounts"
+msgstr "Akaun Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "<b>Kegemaran:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Kegemaran:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "Mesej Status"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Chat"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "Nama:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "_Topik:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">Contoh: sebol@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "_Katalaluan:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+#, fuzzy
+msgid "Reso_urce:"
+msgstr "_Sumber:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "Guna peng_enkripsian (SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "_Liang:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Pelayan:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+#, fuzzy
+msgid "Disconnected"
+msgstr "_Putus"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+#, fuzzy
+msgid "Connected"
+msgstr "Sambung"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Chat"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+#, fuzzy
+msgid "Contact Infor_mation"
+msgstr "_Maklumat Kenalan"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "Chat"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "_Daftar..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Mesej status:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Alih Tab ke Ki_ri"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Alih Tab ke Ka_nan"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+#, fuzzy
+msgid "_Add To Favorites"
+msgstr "_Edit Kegemaran..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "Per_bualan"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Leraikan Tab"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "Tab _Berikutnya"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "Tab _Terdahulu"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+#, fuzzy
+msgid "_Show Contacts"
+msgstr "_Papar Senarai Kenalan"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Tab"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Salin Alamat Pautan"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Buka Pautan"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "Kirim _Mesej..."
+msgstr[1] "Kirim _Mesej..."
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Gossip - Chat"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "Per_bualan"
+msgstr[1] "Per_bualan"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+#, fuzzy
+msgid "Typing a message."
+msgstr "Mesej sibuk"
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "_Tambah Kenalan..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "Gossip - Chat"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "Tambah kenalan"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "_Maklumat Kenalan"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "Maklumat kenalan"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/_Tukarnama kumpulan"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "Nama _pengguna:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr ""
+"Sila masukkan gelaran baru bagi kenalan\n"
+" %s"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "_Buang"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/_Buang kenalan"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "Gossip - Edit Chat Kumpulan"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "_Send File..."
+msgstr "Kirim _Mesej..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "Kirim _Mesej..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "Per_bualan"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "Penampilan"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>Kegemaran:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Kegemaran:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "Mesej Status"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "Sambung"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>Kegemaran:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+#, fuzzy
+msgid "Chat Th_eme:"
+msgstr "_Nama chat:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+#, fuzzy
+msgid "Enable sounds when _away"
+msgstr "Matikan bunyi ketika _away"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+#, fuzzy
+msgid "Enable sounds when _busy"
+msgstr "Matikan bunyi ketika _sibuk"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "Guna bunyi pemakluman"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "Ke_utamaan"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+#, fuzzy
+msgid "Show _smileys as images"
+msgstr "Tukar _smiley ke imej grafik"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "_Papar Senarai Kenalan"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+#, fuzzy
+msgid "_Play sound when messages arrive"
+msgstr "Mainkan bunyi bila mesej tiba"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "Gossip - Edit Chat Kumpulan"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+#, fuzzy
+msgid "Custom message..."
+msgstr "Mesej Tersendiri..."
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "_Edit Kegemaran..."
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "Adakah anda ingin menerima permintaan?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+#, fuzzy
+msgid "Enter status message:"
+msgstr "Mesej status:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "Mesej Status"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "Mesej status:"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s telah luartalian"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, fuzzy, c-format
+msgid "%s has come online"
+msgstr "%s sedang dalamtalian"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "Klien:"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Jangan sambung pada permulaan"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "Pesanan Segera"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Pesanan Segera"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "_Sertai"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "Ralat tidak diketahui"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Guna bunyi pemakluman"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Ralat tidak diketahui"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Ada"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Ralat tidak diketahui"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "Sambung"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "Sambung"
+
+#, fuzzy
+#~ msgid "This feature is unavailable."
+#~ msgstr "Pelayan mungkin kini tidak berfungsi."
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Akaun Jabber"
+
+#~ msgid "Home"
+#~ msgstr "Rumah"
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Pelayan mungkin kini tidak berfungsi."
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Mendaftar akaun"
+
+#, fuzzy
+#~ msgid "This feature is not implemented"
+#~ msgstr "Pelayan mungkin kini tidak berfungsi."
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "_Putus"
+
+#~ msgid "Connect"
+#~ msgstr "Sambung"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Berjaya mendaftar akaun"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Gagal mendaftar akaun"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Sila masukkan katalaluan anda:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Sila masukkan katalaluan anda:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Sila masukkan nama baru bagi kumpulan\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Information requested, please wait..."
+#~ msgstr "<b>Maklumat dipinta, Sila tunggu...</b>"
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Saya ingin menambah anda ke senarai kenalan saya."
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "Kirim _Mesej..."
+#~ msgstr[1] "Kirim _Mesej..."
+
+#, fuzzy
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "Mesej permintaan"
+#~ msgstr[1] "Mesej permintaan"
+
+#, fuzzy
+#~ msgid "Edit Account _Details"
+#~ msgstr "Edit Maklumat Akaun"
+
+#~ msgid "New message from %s"
+#~ msgstr "Mesej baru dari %s"
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "_Terima"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Nama:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Bilik:"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "Sambung"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "<b>Maklumat dipinta, Sila tunggu...</b>"
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "Anda pasti untuk membuang kenalan\n"
+#~ "%s\n"
+#~ " dari senarai kenalan anda?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Sila masukkan nama baru bagi kumpulan\n"
+#~ "%s"
+
+#~ msgid "Unsorted"
+#~ msgstr "Tidak Diisih"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Ralat tidak diketahui"
+
+#, fuzzy
+#~ msgid "%s would like to send you a file."
+#~ msgstr "Saya ingin menambah anda ke senarai kenalan saya."
+
+#, fuzzy
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Saya ingin menambah anda ke senarai kenalan saya."
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "_Sambung"
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Sambung"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Nama gelaran apa yang anda ingin gunakan bagi kenalan ini?"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "_Topik:"
+
+#, fuzzy
+#~ msgid "Account"
+#~ msgstr "Akaun Jabber"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "Per_bualan"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Senarai akaun yang ada"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Akaun mana untuk disambung pada permulaan"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "NAMA-AKAUN"
+
+#~ msgid "Available accounts:"
+#~ msgstr "Akaun yang ada:"
+
+#~ msgid "[default]"
+#~ msgstr "[default]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Tiada akaun dengan nama '%s'."
+
+#, fuzzy
+#~ msgid "Join"
+#~ msgstr "_Sertai"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Chat"
+
+#, fuzzy
+#~ msgid "Chat Rooms"
+#~ msgstr "Gossip - Chat"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "<b>Maklumat dipinta, Sila tunggu...</b>"
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "[default]"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "Chat"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s akan ditambah ke senarai kenalan anda."
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "%s akan ditambah ke senarai kenalan anda."
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "Menghantar permintaan"
+
+#, fuzzy
+#~ msgid "Contact Information"
+#~ msgstr "_Maklumat Kenalan"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr ""
+#~ "Anda pasti untuk membuang kenalan\n"
+#~ "%s\n"
+#~ " dari senarai kenalan anda?"
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr ""
+#~ "Anda pasti untuk membuang kenalan\n"
+#~ "%s\n"
+#~ " dari senarai kenalan anda?"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Sila masukkan katalaluan anda:"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Ingat katalaluan?"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Chat"
+
+#, fuzzy
+#~ msgid "Contact goes online"
+#~ msgstr "%s sedang dalamtalian"
+
+#, fuzzy
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Adakah anda ingin menerima permintaan?"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "Nama _pengguna:"
+
+#, fuzzy
+#~ msgid "File size:"
+#~ msgstr "Tapak Web:"
+
+#~ msgid "Web site:"
+#~ msgstr "Tapak Web:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Terima"
+
+#~ msgid "_Deny"
+#~ msgstr "_Dinafikan"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Kegemaran:</b>"
+
+#, fuzzy
+#~ msgid "Account:"
+#~ msgstr "Akaun Jabber"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Gossip - Edit Chat Kumpulan"
+
+#, fuzzy
+#~ msgid "Group Chat"
+#~ msgstr "Gossip - Chat"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "_Sertai"
+
+#, fuzzy
+#~ msgid "Join room on start_up"
+#~ msgstr "Jangan sambung pada permulaan"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "Nama:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "Pelayan:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "_Gelaran:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Bilik:"
+
+#, fuzzy
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Kegemaran:</b>"
+
+#, fuzzy
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "Maklumat klien"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Kegemaran:</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "Mesej Status"
+
+#, fuzzy
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Tetapan Akaun</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "Sambung"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Contoh: sebol@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Akaun Jabber"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "_Tambah Kenalan..."
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "Chat"
+
+#~ msgid "Client:"
+#~ msgstr "Klien:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "_Tambah Kenalan..."
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Jangan sambung pada permulaan"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "_Tambah Kenalan..."
+
+#~ msgid "Country:"
+#~ msgstr "Negara:"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "_Tambah Kenalan..."
+
+#, fuzzy
+#~ msgid "Edit Groups"
+#~ msgstr "Gossip - Edit Chat Kumpulan"
+
+#~ msgid "Email:"
+#~ msgstr "Emel:"
+
+#, fuzzy
+#~ msgid "ID:"
+#~ msgstr "JID"
+
+#~ msgid "Name:"
+#~ msgstr "Nama:"
+
+#~ msgid "OS:"
+#~ msgstr "OS:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "<b>Tetapan Akaun</b>"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "_Daftar..."
+
+#, fuzzy
+#~ msgid "Search"
+#~ msgstr "_Cari:"
+
+#, fuzzy
+#~ msgid "Spell Checker"
+#~ msgstr "Gossip - Kirim Mesej"
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Nama gelaran apa yang anda ingin gunakan bagi kenalan ini?"
+
+#~ msgid "Version:"
+#~ msgstr "Versi:"
+
+#, fuzzy
+#~ msgid "View Previous Conversations"
+#~ msgstr "Per_bualan"
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Apakah namapengguna anda ingin gunakan?"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Sambung"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Keterangan"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Putus"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "Emel:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr "Masukka ID pengguna bagi orang yang anda ingin kirim mesej chat."
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "_Liang:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "Nama:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Gossip - Chat"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Gelaran:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Katalaluan:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "Mesej _Status"
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "_Buang"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Tapak Web:"
+
+#, fuzzy
+#~ msgid "Preset status messages"
+#~ msgstr "Mesej status:"
+
+#, fuzzy
+#~ msgid "Preset status messages."
+#~ msgstr "Mesej status:"
+
+#, fuzzy
+#~ msgid "Connecting"
+#~ msgstr "Sambung"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s akan ditambah ke senarai kenalan anda."
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "ID _Jabber bagi kenalan baru:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "Sila masukkan katalaluan anda:"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Maklumat Kenalan bagi %s"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/_Maklumat Kenalan"
+
+#, fuzzy
+#~ msgid "/Re_name Contact"
+#~ msgstr "/_Tukarnama kenalan"
+
+#, fuzzy
+#~ msgid "/_Edit Groups"
+#~ msgstr "Gossip - Edit Chat Kumpulan"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "Per_bualan"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Sila masukkan gelaran baru bagi kenalan\n"
+#~ " %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Log Perbualan"
+
+#~ msgid "Registering account"
+#~ msgstr "Mendaftar akaun"
+
+#, fuzzy
+#~ msgid "Respond"
+#~ msgstr "Sebab:"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "_Edit Kegemaran..."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Nama:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Gossip - Chat"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Maklumat dipinta, Sila tunggu...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Contoh: sebol@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Gossip - Chat"
+
+#, fuzzy
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Adakah anda sudah mempunyai akaun pada pelayan Jabber?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr ""
+#~ "Sila masukkan gelaran baru bagi kenalan\n"
+#~ " %s"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "Sila masukkan gelaran baru bagi kenalan\n"
+#~ " %s"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Tetapan Selesai"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip adalah klien moden bagi sistem Pesanan Segera Jabber.\n"
+#~ "\n"
+#~ "Pembantu ini akan membantu anda mengkonfigurasikan Gossip dan sambungkan "
+#~ "anda ke pelayan Jabber kegemaran anda.\n"
+#~ "\n"
+#~ "Untuk bermula, hanya klik \"Maju\"."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "Dalam kumpulan mana anda ingin letak kenalan ini?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "ID Jabber:"
+
+#, fuzzy
+#~ msgid "Nickname:"
+#~ msgstr "_Gelaran:"
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "_Liang:"
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "Mendaftar akaun"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "_Sumber:"
+
+#~ msgid "Server:"
+#~ msgstr "Pelayan:"
+
+#, fuzzy
+#~ msgid "Web Site:"
+#~ msgstr "Tapak Web:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Selamat Datang ke Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Apa sistem pesanan segera yang anda gunakan yg kenalan ini gunakan?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Apakah nama anda?"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "Apakah pelayan anda ingin gunakan?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Apakah namapengguna anda gunakan?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Apakah namapengguna anda ingin gunakan?"
+
+#, fuzzy
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "Dalam kumpulan mana anda ingin letak kenalan ini?"
+
+#, fuzzy
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Gossip kini dikonfigurasikan untuk sistem anda.\n"
+#~ "Anda boleh menukar tetapan akaun anda kemudian hari, dengan memilih item "
+#~ "menu Chat->Sambung... ."
+
+#, fuzzy
+#~ msgid "Your Account"
+#~ msgstr "Akaun Jabber"
+
+#~ msgid "Your Identity"
+#~ msgstr "Indentiti Anda"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Tidak"
+
+#~ msgid "_Search..."
+#~ msgstr "_Cari:"
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Ya"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Senyap bila away"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Senyap bila sibuk"
+
+#~ msgid "Height of main window"
+#~ msgstr "Tinggi tetingkap utama"
+
+#, fuzzy
+#~ msgid "The X position of the main window."
+#~ msgstr "Lebar bagi tetingkap utama."
+
+#, fuzzy
+#~ msgid "The Y position of the main window."
+#~ msgstr "Lebar bagi tetingkap utama."
+
+#~ msgid "The width of the main window."
+#~ msgstr "Lebar bagi tetingkap utama."
+
+#, fuzzy
+#~ msgid "Width of the main window"
+#~ msgstr "Lebar bagi tetingkap utama"
+
+#, fuzzy
+#~ msgid "X position of main window"
+#~ msgstr "Lebar bagi tetingkap utama"
+
+#, fuzzy
+#~ msgid "Y position of main window"
+#~ msgstr "Lebar bagi tetingkap utama"
+
+#, fuzzy
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Klien Jabber bagi GNOME"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "Lebar bagi tetingkap utama"
+
+#, fuzzy
+#~ msgid "Requested Information"
+#~ msgstr "Maklumat _Akaun"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "Mesej Status"
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "%s telah luartalian"
+
+#, fuzzy
+#~ msgid "Available..."
+#~ msgstr "Ada"
+
+#, fuzzy
+#~ msgid "Busy..."
+#~ msgstr "Sibuk"
+
+#, fuzzy
+#~ msgid "Away..."
+#~ msgstr "Away"
+
+#~ msgid "Contact _Information"
+#~ msgstr "_Maklumat Kenalan"
+
+#, fuzzy
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - Chat Kumpulan"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr " _Sertai Chat Kumpulan..."
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "_Liang:"
+
+#, fuzzy
+#~ msgid "Requested information."
+#~ msgstr "Maklumat klien"
+
+#, fuzzy
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "Apakah pelayan anda ingin gunakan?"
+
+#, fuzzy
+#~ msgid "Connection to the server failed."
+#~ msgstr "<b>Sambung ke pelayan</b>"
+
+#, fuzzy
+#~ msgid "Account ID"
+#~ msgstr "Maklumat _Akaun"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sChat - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Papar log"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "Versi:"
+
+#, fuzzy
+#~ msgid "Latvian"
+#~ msgstr "Makan"
+
+#, fuzzy
+#~ msgid "View Lo_g"
+#~ msgstr "Lo_g"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - Chat Kumpulan"
+
+#, fuzzy
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Tambah kenalan"
+
+#, fuzzy
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "_Maklumat Kenalan"
+
+#, fuzzy
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - Edit Chat Kumpulan"
+
+#, fuzzy
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - Chat Kumpulan"
+
+#, fuzzy
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - Kirim Mesej"
+
+#, fuzzy
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Gossip - Kirim Mesej"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Keutamaan"
+
+#, fuzzy
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - Kirim Mesej"
+
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "Mesej permintaan apa yang anda ingin kirim ke %s?"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Pastikan maklumat akaun anda betul"
+
+#~ msgid "%s wants to be notified of your presence."
+#~ msgstr "%s ingin dimaklumkan dengan kehadiran anda"
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Anda diputuskan drpd pelayan. Adakah anda ingin ulangsambung?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr "Pastikan maklumat akaun anda betul"
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "Ralat berlaku bila berchat dengan %s."
+
+#~ msgid "Details:"
+#~ msgstr "Perincian:"
+
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "Tak dapat masuk ke chat kumpulan %s."
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip kini akan cuba menggunakan akaun anda:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Gossip kini akan cuba mendaftarkan akaun:"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "Dari:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Gossip - Mesej Diterima"
+
+#~ msgid "To:"
+#~ msgstr "Ke:"
+
+#~ msgid "_Reply..."
+#~ msgstr "_Balas..."
+
+#~ msgid "_Send"
+#~ msgstr "_Kirim"
+
+#~ msgid "C_onnect"
+#~ msgstr "_Sambung"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>Bilik chat yang ada</b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>Maklumat bilik chat</b>"
+
+#~ msgid "Gossip - Join Group Chat"
+#~ msgstr "Gossip - Sertai Chat Kumpulan"
+
+#~ msgid "N_ickname:"
+#~ msgstr "_Gelaran:"
+
+#~ msgid ""
+#~ "Pick a favorite, or enter nickname, server name, and the name of the chat "
+#~ "room to enter."
+#~ msgstr ""
+#~ "Pilih kegemaran, atau masukkan nama gelaran, nama pelayan, dan nama bagi "
+#~ "bilik chat untuk dimasuki."
+
+#~ msgid "R_emove"
+#~ msgstr "_Buang"
+
+#~ msgid "_Add"
+#~ msgstr "_Tambah"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Maklumat tidak ada</i>"
+
+#~ msgid "Choose a Server"
+#~ msgstr "Pilih Pelayan"
+
+#~ msgid "Choose from list:"
+#~ msgstr "Pilih dari senarai:"
+
+#~ msgid "Information about ..."
+#~ msgstr "Maklumat perihal ...."
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "Pada pelayan apa yg anda mempunyai akaun jabber?"
+
+#~ msgid "Sound"
+#~ msgstr "Bunyi"
+
+#~ msgid "Use a different server"
+#~ msgstr "Guna pengenkodan lain"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Mesej permintaan apa yang anda ingin kirim ..?"
+
+#, fuzzy
+#~ msgid "About Gossip"
+#~ msgstr "Gossip"
+
+#, fuzzy
+#~ msgid "translator_credits_old"
+#~ msgstr ""
+#~ "Khairulanuar Abd Majid <khairul@ikhlas.com>\n"
+#~ "Hasbullah Bin Pit <sebol@ikhlas.com>, Merlimau."
+
+#~ msgid "Gossip Website"
+#~ msgstr "Tapak Web Gossip"
+
+#~ msgid "Gossip, Jabber Client"
+#~ msgstr "Gossip, Klien Jabber"
+
+#~ msgid "About to leave..."
+#~ msgstr "Akan keluar..."
+
+#~ msgid "Autoaway message"
+#~ msgstr "Mesej auto away"
+
+#~ msgid "Away messages"
+#~ msgstr "Mesej away"
+
+#~ msgid "Message to show before going away"
+#~ msgstr "Mesej untuk dipapar sebelum away"
+
+#~ msgid "Not at the computer"
+#~ msgstr "Tiada di sisi komputer"
+
+#~ msgid "Just about to leave..."
+#~ msgstr "Baru nak keluar..."
+
+#~ msgid "Custom Busy Message..."
+#~ msgstr "Mesej Sibuk Tersendiri..."
+
+#~ msgid "Leave..."
+#~ msgstr "Keluar..."
+
+#~ msgid "New Busy Message"
+#~ msgstr "Mesej Sibuk Baru"
+
+#~ msgid "New Away Message"
+#~ msgstr "Mesej Away Baru"
+
+#~ msgid "Working"
+#~ msgstr "Bekerja"
+
+#~ msgid "Sleeping"
+#~ msgstr "Tidur"
+
+#~ msgid "Enter the new message:"
+#~ msgstr "Masukkan mesej baru:"
+
+#~ msgid "Leave"
+#~ msgstr "Keluar"
+
+#~ msgid "Preset messages for quickly setting away status."
+#~ msgstr "Mesej preset bagi penetapan cepat status away."
+
+#~ msgid "Preset messages for quickly setting busy status."
+#~ msgstr "Mesej preset bagi penetapan cepat status sibuk"
+
+#~ msgid "Reason for being busy:"
+#~ msgstr "Alasan menjadi sibuk:"
+
+#~ msgid "Reason for leaving:"
+#~ msgstr "Alasan keluar:"
diff --git a/trunk/po/nb.po b/trunk/po/nb.po
new file mode 100644
index 000000000..0e1ee70da
--- /dev/null
+++ b/trunk/po/nb.po
@@ -0,0 +1,1807 @@
+# Norwegian (bokmål) translation of empathy.
+# Copyright © 2003-2005 Free Software Foundation, Inc.
+# Kjartan Maraas <kmaraas@gnome.org>, 2003-2008.
+# Sigurd Gartmann <sigurdga@yahoo-inc.com>, 2005, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy 0.21.x\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-06 18:00+0200\n"
+"PO-Revision-Date: 2008-05-06 18:14+0200\n"
+"Last-Translator: Kjartan Maraas <kmaraas@gnome.org>\n"
+"Language-Team: Norwegian <i18n-nb@lister.ping.uio.no>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Empathy lynmelder"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Send og motta lynmeldinger"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Alltid åpne et eget vindu til nye samtaler."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Tegn som skal legges til etter kallenavn når fullføring av kallenavn med "
+"tabulator benyttes i gruppeprat."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Tema for samtalevindu"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should auto-connect on startup"
+msgstr "Sjekker om Empathy skal koble til automatisk ved oppstart"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Sjekker om NetworkManager skal brukes"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Sjekker om Salut-konto er opprettet"
+
+#: ../data/empathy.schemas.in.h:7
+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/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Kompakt kontaktliste"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Sorteringskriterier for kontaktliste"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Forvalgt mappe for personbilde"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Vis oppsprettmeldinger for kontakter som blir tilgjengelige"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Spill av lyd når du er borte"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Slå av lyder når du er _opptatt"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Bruk stavekontroll"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Skjul hovedvinduet"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Skjul hovedvinduet."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Åpne nye samtaler i egne vinduer"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Vis personbilder"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Vis hint om lukking av hovedvinduet"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Vis frakoblede kontakter"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Stavekontrollspråk"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Den forrige mappen et personbilde ble valgt fra."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Temaet som brukes til å vise samtaler."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Vis smilefjes grafisk"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Bruk varslingslyder"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Bruk tema for samtalerom"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically log in to your accounts on "
+"startup."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first Empathy run."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Om smilefjes skal konverteres til grafikk i samtaler."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Om lyder skal spilles av når meldinger kommer inn."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Om lyder skal spilles av når borte."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Om lyder skal spilles av når opptatt."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Om det skal informeres om at kontakter blir tilgjengelige."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Om bilder av kontakter skal vises i kontaktlisten og samtalevinduer."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Om kontakter som er frakoblet skal vises i kontaktlisten."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Om kontaktlisten skal vises i kompakt modus."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Om tema skal brukes for praterom eller ikke."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/empathy-tp-contact-list.c:665 ../src/empathy.c:188
+msgid "People nearby"
+msgstr "Personer i nærheten"
+
+#: ../libempathy/empathy-utils.c:466
+msgid "Available"
+msgstr "Tilgjengelig"
+
+#: ../libempathy/empathy-utils.c:468
+msgid "Busy"
+msgstr "Opptatt"
+
+#: ../libempathy/empathy-utils.c:471
+msgid "Away"
+msgstr "Borte"
+
+#: ../libempathy/empathy-utils.c:473
+msgid "Hidden"
+msgstr "Skjult"
+
+#: ../libempathy/empathy-utils.c:476
+msgid "Offline"
+msgstr "Frakoblet"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:335
+msgid "All"
+msgstr "Alle"
+
+#: ../libempathy-gtk/empathy-account-widget.c:284
+#: ../libempathy-gtk/empathy-account-widget.c:329
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Avansert</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Glem passord og tøm oppføringen."
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "_Passord:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+msgid "Screen _Name:"
+msgstr "Skjerm_navn:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Port:"
+msgstr "_Port:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+#: ../src/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Tjener:"
+
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "InnloggingsI_D:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "ICQ _UIN:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "_Charset:"
+msgstr "_Tegnsett:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:245
+msgid "New Network"
+msgstr "Nytt nettverk"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Nettverk</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Tjenere</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Tegnsett:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Opprett et nytt IRC-nettverk"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Rediger valgt IRC-nettverk"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Nettverk"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Nettverk:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Kallenavn:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Passord:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Melding ved frakobling:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Virkelig navn:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Fjern valgt IRC-nettverk"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Overstyr innstillinger for tjener</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "Pri_oritet:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "_Ressurs:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Bruk gammel SS_L"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "Krypt_ering kreves (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Ignorer feil med SSL-sertifikater"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_Email:"
+msgstr "_E-post:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Fornavn:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_Jabber-ID:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "_Etternavn:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../src/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "Kalle_navn:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "_Publisert navn:"
+
+#. look up the DNS SRV record at the service's domain for the host name of a STUN server.
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+msgid "Discover STUN"
+msgstr "Søk etter STUN"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+msgid "Stun Server:"
+msgstr "Stun-tjener:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+msgid "Stun port:"
+msgstr "Stun-port:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+msgid "_Username:"
+msgstr "Br_ukernavn:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "J_apan-tjener:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "Bruk _Yahoo Japan"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Ignore conference and chatroom invitations"
+msgstr "_Ignorer invitasjoner til konferanser og praterom"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Room List locale:"
+msgstr "Locale for _romliste:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:226
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr "Klikk på «Legg til»-knappen for å opprette og konfigurere en ny konto."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:230
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"Du må installere en motor for hver protokoll du ønsker å bruke før du legger "
+"til en ny konto."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Ingen konto valgt</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:238
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Hvis du ikke ønsker å legge til en konto kan du bare klikke på kontoen du "
+"ønsker å konfigurere i listen til venstre."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:244
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Ingen kontoer er satt opp</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:424
+msgid "Enabled"
+msgstr "Aktivert"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:434
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Kontoer"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:916
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Du holder på å fjerne din %s-konto!\n"
+"Er du sikker på at du vil dette?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:922
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Tilknyttede samtaler og samtalegrupper vil IKKE fjernes hvis du velger å "
+"fortsette.\n"
+"\n"
+"Skulle du velge å legge til kontoen senere, vil de bli tilgjengelige igjen."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Ny konto</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Innstillinger</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "Oppr_ett"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Klikk på «Legg til»-knappen for å legge til en ny konto. En ny oppføring vil "
+"bli klargjort for redigering.\n"
+"\n"
+"Hvis du ikke ønsker å legge til en konto kan du klikke på kontoen du ønsker "
+"å redigere i listen til venstre."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Type:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:457
+msgid "Select Your Avatar Image"
+msgstr "Velg personbilde"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:460
+msgid "No Image"
+msgstr "Ingen bilde"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:520
+msgid "Images"
+msgstr "Bilder"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:524
+msgid "All Files"
+msgstr "Alle filer"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:294
+msgid "Click to enlarge"
+msgstr "Klikk for å forstørre"
+
+#: ../libempathy-gtk/empathy-chat.c:522
+msgid "offline"
+msgstr "frakoblet"
+
+#: ../libempathy-gtk/empathy-chat.c:525
+msgid "invalid contact"
+msgstr "ugyldig kontakt"
+
+#: ../libempathy-gtk/empathy-chat.c:528
+msgid "permission denied"
+msgstr "tilgang nektet"
+
+#: ../libempathy-gtk/empathy-chat.c:531
+msgid "too long message"
+msgstr "meldingen er for lang"
+
+#: ../libempathy-gtk/empathy-chat.c:534
+msgid "not implemented"
+msgstr "ikke implementert"
+
+#: ../libempathy-gtk/empathy-chat.c:537
+msgid "unknown"
+msgstr "ukjent"
+
+#: ../libempathy-gtk/empathy-chat.c:541
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Feil ved sending av melding «%s»: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:571
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Emnet er satt til: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:573
+msgid "No topic defined"
+msgstr "Emne ikke definert"
+
+#: ../libempathy-gtk/empathy-chat.c:979
+msgid "Insert Smiley"
+msgstr "Sett inn smilefjes"
+
+#: ../libempathy-gtk/empathy-chat.c:1026
+msgid "_Check Word Spelling..."
+msgstr "_Stavekontroll ..."
+
+#: ../libempathy-gtk/empathy-chat.c:1127
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s har blitt med i rommet"
+
+#: ../libempathy-gtk/empathy-chat.c:1130
+#, c-format
+msgid "%s has left the room"
+msgstr "%s har forlatt rommet"
+
+#: ../libempathy-gtk/empathy-chat.c:1244 ../src/empathy.c:70
+#: ../src/empathy-call-window.c:389
+msgid "Disconnected"
+msgstr "Koblet fra"
+
+#: ../libempathy-gtk/empathy-chat.c:1619
+msgid "Connected"
+msgstr "Koblet til"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Emne:</b>"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Gruppesamtale"
+
+#: ../libempathy-gtk/empathy-chat-view.c:430
+msgid "_Copy Link Address"
+msgstr "_Kopier lenkens adresse"
+
+#: ../libempathy-gtk/empathy-chat-view.c:438
+msgid "_Open Link"
+msgstr "_Åpne lenke"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:180
+msgid "Personal Information"
+msgstr "Personlig informasjon"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+msgid "Edit Contact Information"
+msgstr "Endre kontaktinformasjon"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:186
+msgid "Contact Information"
+msgstr "Kontaktinformasjon"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:281
+msgid "I would like to add you to my contact list."
+msgstr "Jeg ønsker å legge deg til i min kontaktliste."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:305
+msgid "New Contact"
+msgstr "Ny kontakt"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "A_vgjør senere"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Abonnementsforespørsel"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1164
+#, c-format
+msgid "Do you really want to remove the group '%s'?"
+msgstr "Vil du virkelig fjerne gruppen «%s»?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1166
+msgid "Removing group"
+msgstr "Fjerner gruppe"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1213
+#: ../libempathy-gtk/empathy-contact-list-view.c:1293
+msgid "_Remove"
+msgstr "Fje_rn"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1243
+#, c-format
+msgid "Do you really want to remove the contact '%s'?"
+msgstr "Vil du virkelig fjerne kontakten «%s»?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1245
+msgid "Removing contact"
+msgstr "Fjerner kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1250
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Beklager, men jeg vil ikke ha deg på kontaktlisten min lenger."
+
+#: ../libempathy-gtk/empathy-contact-menu.c:108
+#: ../src/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_Prat"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:129
+msgid "_Call"
+msgstr "_Ring"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:168
+#: ../src/empathy-main-window.glade.h:17
+msgid "_View Previous Conversations"
+msgstr "_Vis tidligere samtaler"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:196
+msgid "Infor_mation"
+msgstr "Infor_masjon"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:223
+#: ../src/empathy-chat-window.glade.h:14 ../src/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr "_Rediger"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:694
+msgid "Select"
+msgstr "Velg"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:704
+#: ../src/empathy-main-window.c:628
+msgid "Group"
+msgstr "Gruppe"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Klientinformasjon</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Kontaktdetaljer</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Kontakt</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Grupper</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+#: ../src/empathy-chatrooms-window.glade.h:1
+#: ../src/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Konto:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Alias:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Fødselsdag:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Klient:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Kontaktinformasjon"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "E-post:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Fullt navn:"
+
+#. Identifier to connect to Instant Messaging network
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Identifier:"
+msgstr "Identifikator:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "Information requested..."
+msgstr "Informasjon forespurt ..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid "OS:"
+msgstr "OS:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Velg gruppen du ønsker at denne kontakten skal vises i. Du kan velge flere "
+"eller ingen."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Version:"
+msgstr "Versjon:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
+msgid "Web site:"
+msgstr "Nettsted:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:284
+msgid "new server"
+msgstr "ny tjener"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:513
+msgid "Server"
+msgstr "Tjener"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:528
+msgid "Port"
+msgstr "Port"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:541
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+msgid "Account"
+msgstr "Konto"
+
+#: ../libempathy-gtk/empathy-log-window.c:504 ../src/empathy-chat-window.c:275
+msgid "Conversation"
+msgstr "Samtale"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+msgid "Date"
+msgstr "Dato"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Conversations"
+msgstr "Samtaler"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Previous Conversations"
+msgstr "Tidligere samtaler"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:5
+msgid "Search"
+msgstr "Søk"
+
+#. Searching *for* something
+#: ../libempathy-gtk/empathy-log-window.glade.h:7
+msgid "_For:"
+msgstr "_For:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Ring"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+#: ../src/empathy-chat-window.glade.h:2
+msgid "Chat"
+msgstr "Prat"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "KontaktID:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Ny samtale"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:685
+msgid "Custom messages..."
+msgstr "Egendefinerte meldinger ..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Egendefinert melding"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Melding:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Lagre melding"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Status:"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:88
+msgid "Word"
+msgstr "Ord"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:265
+msgid "Suggestions for the word"
+msgstr "Forslag for ordet"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Stavekontroll"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Forslag for ordet:"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:745
+#: ../libempathy-gtk/empathy-theme-irc.c:293
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:73
+msgid "Classic"
+msgstr "Klassisk"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:74
+msgid "Simple"
+msgstr "Enkel"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:75
+msgid "Clean"
+msgstr "Tøm"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:76
+msgid "Blue"
+msgstr "Blå"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1326
+msgid "Unable to open URI"
+msgstr "Kan ikke åpne URI"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Aktivt locale"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Arabisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Armensk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Baltisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Keltisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Sentraleuropeisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Forenklet kinesisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Tradisjonell kinesisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Kroatisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Kyrillisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Kyrillisk/Russisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Kyrillisk/Ukrainsk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Georgisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Gresk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Gujarati"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Hebraisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Visuell hebraisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Islandsk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Japansk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Koreansk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Nordisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Persisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Rumensk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Sør-Europeisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Thai"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Tyrkisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Vestlig"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnamesisk"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr "Kontakten som skal vises i panelprogrammet. Tom betyr at ingen kontakt vises."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr ""
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megafon"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Snakk!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_Om"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Informasjon"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+#: ../src/empathy-main-window.glade.h:15
+msgid "_Preferences"
+msgstr "_Brukervalg"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Tilstedeværelse"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:106
+msgid "Set your own presence"
+msgstr "Velg din egen tilstedeværelse"
+
+#: ../src/empathy.c:73
+msgid "Invalid handle"
+msgstr "Ugyldig håndtak"
+
+#: ../src/empathy.c:76
+msgid "No matching connection"
+msgstr "Ingen passende tilkobling"
+
+#: ../src/empathy.c:79
+msgid "Invalid account"
+msgstr "Ugyldig konto"
+
+#: ../src/empathy.c:82
+msgid "Presence failure"
+msgstr "Feil med tilstedeinformasjon"
+
+#: ../src/empathy.c:85
+msgid "No accounts"
+msgstr "Ingen kontoer"
+
+#: ../src/empathy.c:88 ../src/empathy-main-window.c:896
+msgid "Network error"
+msgstr "Nettverksfeil"
+
+#: ../src/empathy.c:91
+msgid "Contact does not support voice"
+msgstr "Kontakten støtter ikke talesamtaler"
+
+#: ../src/empathy.c:94
+msgid "Lowmem"
+msgstr "Lite minne"
+
+#: ../src/empathy.c:97
+msgid "Channel request generic error"
+msgstr "Generisk feil med kanalforespørsel"
+
+#: ../src/empathy.c:100
+msgid "Channel banned"
+msgstr "Kanal bannlyst"
+
+#: ../src/empathy.c:103
+msgid "Channel full"
+msgstr "Kanalen er full"
+
+#: ../src/empathy.c:106
+msgid "Channel invite only"
+msgstr "Kanalen tar bare inviterte"
+
+#: ../src/empathy.c:109
+msgid "Unknown error code"
+msgstr "Ukjent feilkode"
+
+#: ../src/empathy.c:312
+msgid "Don't connect on startup"
+msgstr "Ikke koble til ved oppstart"
+
+#: ../src/empathy.c:324
+msgid "- Empathy Instant Messenger"
+msgstr "- Empathy lynmeldingsprogram"
+
+#: ../src/empathy-about-dialog.c:64
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Empathy er fri programvare. Du kan redistribuere og/eller endre programmet "
+"under betingelsene gitt i GNU General Public License som utgitt av Free "
+"Software Foundation; enten versjon 2 av lisensen, eller (hvis du ønsker det) "
+"enhver senere versjon."
+
+#: ../src/empathy-about-dialog.c:68
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Empathy distribueres i håp om at programmet er nyttig, men UTEN NOEN "
+"GARANTI, ikke engang implisitt garanti om at det er SALGBART eller PASSER ET "
+"BESTEMT FORMÅL. Se GNU General Public License for detaljer."
+
+#: ../src/empathy-about-dialog.c:72
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Du skal ha mottatt en kopi av GNU General Public License sammen med Empathy. "
+"Hvis ikke så skriv til Free Software Foundation, Inc., 51 Franklin Street, "
+"Fifth Floor, Boston, MA 02110-1301159, USA."
+
+#: ../src/empathy-about-dialog.c:100
+msgid "An Instant Messaging client for GNOME"
+msgstr "En meldingsklient for GNOME"
+
+#: ../src/empathy-about-dialog.c:106
+msgid "translator-credits"
+msgstr ""
+"Kjartan Maraas\n"
+"Sigurd Gartmann\n"
+"Espen Stefansen"
+
+#: ../src/empathy-call-window.c:139
+msgid "Closed"
+msgstr "Lukket"
+
+#: ../src/empathy-call-window.c:251
+msgid "End this call?"
+msgstr "Avslutt denne samtalen?"
+
+#: ../src/empathy-call-window.c:253
+msgid "Closing this window will end the call in progress."
+msgstr "Hvis du lukker dette vinduet vil det avslutte samtalen som er i gang."
+
+#: ../src/empathy-call-window.c:254
+msgid "_End Call"
+msgstr "Avslutt samtal_e"
+
+#: ../src/empathy-call-window.c:305
+msgid "Incoming call"
+msgstr "Innkommende samtale"
+
+#: ../src/empathy-call-window.c:307
+#, c-format
+msgid "%s is calling you, do you want to answer?"
+msgstr "%s ringer deg. Vil du svare?"
+
+#: ../src/empathy-call-window.c:313
+msgid "_Reject"
+msgstr "Av_vis"
+
+#: ../src/empathy-call-window.c:318
+msgid "_Answer"
+msgstr "Sv_ar"
+
+#: ../src/empathy-call-window.c:364
+msgid "Empathy Call"
+msgstr "Empathy samtale"
+
+#: ../src/empathy-call-window.c:365
+msgid "Readying"
+msgstr "Forbereder"
+
+#: ../src/empathy-call-window.c:374
+#, c-format
+msgid "%s - Empathy Call"
+msgstr "%s - Empathy samtale"
+
+#: ../src/empathy-call-window.c:378
+msgid "Ringing"
+msgstr "Ringer"
+
+#: ../src/empathy-call-window.c:391
+msgid "Connecting"
+msgstr "Kobler til"
+
+#: ../src/empathy-call-window.glade.h:1
+msgid "#"
+msgstr "#"
+
+#: ../src/empathy-call-window.glade.h:2
+msgid "*"
+msgstr "*"
+
+#: ../src/empathy-call-window.glade.h:3
+msgid "0"
+msgstr "0"
+
+#: ../src/empathy-call-window.glade.h:4
+msgid "1"
+msgstr "1"
+
+#: ../src/empathy-call-window.glade.h:5
+msgid "2"
+msgstr "2"
+
+#: ../src/empathy-call-window.glade.h:6
+msgid "3"
+msgstr "3"
+
+#: ../src/empathy-call-window.glade.h:7
+msgid "4"
+msgstr "4"
+
+#: ../src/empathy-call-window.glade.h:8
+msgid "5"
+msgstr "5"
+
+#: ../src/empathy-call-window.glade.h:9
+msgid "6"
+msgstr "6"
+
+#: ../src/empathy-call-window.glade.h:10
+msgid "7"
+msgstr "7"
+
+#: ../src/empathy-call-window.glade.h:11
+msgid "8"
+msgstr "8"
+
+#: ../src/empathy-call-window.glade.h:12
+msgid "9"
+msgstr "9"
+
+#: ../src/empathy-call-window.glade.h:13
+msgid "<b>Keypad</b>"
+msgstr "<b>Numerisk tastatur</b>"
+
+#: ../src/empathy-call-window.glade.h:14
+msgid "<b>Volume</b>"
+msgstr "<b>Volum</b>"
+
+#: ../src/empathy-call-window.glade.h:15
+msgid "Hang Up"
+msgstr "Legg på"
+
+#: ../src/empathy-call-window.glade.h:16
+msgid "Send Video"
+msgstr "Send video"
+
+#: ../src/empathy-chat-window.c:315
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Samtaler (%d)"
+
+#: ../src/empathy-chat-window.c:382
+msgid "Topic:"
+msgstr "Emne:"
+
+#: ../src/empathy-chat-window.c:385
+msgid "Typing a message."
+msgstr "Skriver en melding"
+
+#: ../src/empathy-chat-window.glade.h:1
+msgid "C_lear"
+msgstr "T_øm"
+
+#: ../src/empathy-chat-window.glade.h:3
+msgid "Insert _Smiley"
+msgstr "Sett inn _smilefjes"
+
+#: ../src/empathy-chat-window.glade.h:4
+msgid "Invitation _message:"
+msgstr "Invitasjons_melding:"
+
+#: ../src/empathy-chat-window.glade.h:5
+msgid "Invite"
+msgstr "Inviter"
+
+#: ../src/empathy-chat-window.glade.h:6
+msgid "Move Tab _Left"
+msgstr "Flytt fane til _venstre"
+
+#: ../src/empathy-chat-window.glade.h:7
+msgid "Move Tab _Right"
+msgstr "Flytt fane til _høyre"
+
+#: ../src/empathy-chat-window.glade.h:8
+msgid "Select who would you like to invite:"
+msgstr "Velg de du vil invitere:"
+
+#: ../src/empathy-chat-window.glade.h:9
+msgid "You have been invited to join a chat conference."
+msgstr "Du er invitert til en konferansesamtale."
+
+#: ../src/empathy-chat-window.glade.h:10
+msgid "_Contact"
+msgstr "_Kontakt"
+
+#: ../src/empathy-chat-window.glade.h:11 ../src/empathy-main-window.glade.h:10
+msgid "_Contents"
+msgstr "_Innhold"
+
+#: ../src/empathy-chat-window.glade.h:12
+msgid "_Conversation"
+msgstr "_Samtale"
+
+#: ../src/empathy-chat-window.glade.h:13
+msgid "_Detach Tab"
+msgstr "_Løsne fane"
+
+#: ../src/empathy-chat-window.glade.h:15 ../src/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr "_Hjelp"
+
+#: ../src/empathy-chat-window.glade.h:16
+msgid "_Next Tab"
+msgstr "_Neste fane"
+
+#: ../src/empathy-chat-window.glade.h:17
+msgid "_Previous Tab"
+msgstr "_Forrige fane"
+
+#: ../src/empathy-chat-window.glade.h:18
+msgid "_Tabs"
+msgstr "_Faner"
+
+#: ../src/empathy-chatrooms-window.c:262
+msgid "Name"
+msgstr "Navn"
+
+#: ../src/empathy-chatrooms-window.c:280
+msgid "Room"
+msgstr "Rom"
+
+#: ../src/empathy-chatrooms-window.c:289
+msgid "Auto-Connect"
+msgstr "Koble til automatisk"
+
+#: ../src/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Endre favorittrom"
+
+#: ../src/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Bli med i rom ved oppstart"
+
+#: ../src/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr ""
+"Bli med i dette samtalerommet når Empathy starter opp og du blir koblet til"
+
+#: ../src/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Håndter favorittrom"
+
+#: ../src/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Navn:"
+
+#: ../src/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "_Tjener:"
+
+#: ../src/empathy-chatrooms-window.glade.h:9
+#: ../src/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Rom:"
+
+#: ../src/empathy-filter.c:223
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Ny melding fra %s:\n"
+"%s"
+
+#: ../src/empathy-filter.c:280
+#, c-format
+msgid "Incoming call from %s"
+msgstr "Innkommende samtale fra %s"
+
+#: ../src/empathy-filter.c:336
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Abonnement forespurt av %s"
+
+#: ../src/empathy-filter.c:339
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Melding: %s"
+
+#. Tell the user that the tube can't be handled
+#: ../src/empathy-filter.c:447
+#, c-format
+msgid ""
+"%s offered you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr "%s sendte deg en invitasjon, men du har ikke nødvendig eksternt program som kan håndtere dette."
+
+#: ../src/empathy-filter.c:456
+msgid "Invitation Error"
+msgstr "Feil med invitasjon"
+
+#: ../src/empathy-filter.c:564
+#, c-format
+msgid ""
+"%s is offering you an invitation. An external application will be started to "
+"handle it."
+msgstr "%s sender deg en invitasjon. Et eksternt program vil bli startet for å håndtere den."
+
+#: ../src/empathy-filter.c:569
+#, c-format
+msgid ""
+"%s is offering you an invitation, but you don't have the needed external "
+"application to handle it."
+msgstr "%s sender deg en invitasjon, men du har ikke nødvendig eksternt program som kan håndtere dette."
+
+#: ../src/empathy-main-window.c:271
+msgid "Show and edit accounts"
+msgstr "Vis og rediger kontoer"
+
+#: ../src/empathy-main-window.c:611
+msgid "Contact"
+msgstr "Kontakt"
+
+#: ../src/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "R_ediger konto"
+
+#: ../src/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "Autentiseringen feilet"
+
+#: ../src/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "Krypteringsfeil"
+
+#: ../src/empathy-main-window.c:905
+msgid "Name in use"
+msgstr "Navn i bruk"
+
+#: ../src/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr "Sertifikat ikke oppgitt"
+
+#: ../src/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr "Stoler ikke på sertifikat"
+
+#: ../src/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr "Sertifikat utgått"
+
+#: ../src/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr "Sertifikat ikke aktivert"
+
+#: ../src/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr "Feil vertsnavn i forhold til sertifikat"
+
+#: ../src/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr "Fingeravtrykk stemmer ikke for sertifikat"
+
+#: ../src/empathy-main-window.c:926
+msgid "Certificate self-signed"
+msgstr "Selvsignert sertifikat"
+
+#: ../src/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "Sertifikatsfeil"
+
+#: ../src/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "Ukjent feil"
+
+#: ../src/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Kontaktliste"
+
+#: ../src/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Sammenheng"
+
+#: ../src/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Bli med i _favoritter"
+
+#: ../src/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Bli med i _ny ..."
+
+#: ../src/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Håndter favoritter"
+
+#: ../src/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Vis frak_oblede kontakter"
+
+#: ../src/empathy-main-window.glade.h:7
+msgid "_Accounts"
+msgstr "_Kontoer"
+
+#: ../src/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "_Legg til kontakt ..."
+
+#: ../src/empathy-main-window.glade.h:13 ../src/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_Ny samtale..."
+
+#: ../src/empathy-main-window.glade.h:14
+msgid "_Personal Information"
+msgstr "Personlig _informasjon"
+
+#: ../src/empathy-main-window.glade.h:16
+msgid "_Room"
+msgstr "_Rom"
+
+#: ../src/empathy-new-chatroom-dialog.c:290
+msgid "Chat Rooms"
+msgstr "Samtalerom"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Bla gjennom:"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Oppgi navn på rom du vil bli med i eller klikk på ett eller flere rom på "
+"listen."
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account'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.glade.h:5
+msgid "Join"
+msgstr "Bli med"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Bli med i ny"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "Opp_dater"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr "Denne listen representerer alle praterom som finnes på tjeneren du har oppgitt."
+
+#: ../src/empathy-preferences.c:264
+msgid "Language"
+msgstr "Språk"
+
+#: ../src/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Utseende</b>"
+
+#: ../src/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Lyd</b>"
+
+#: ../src/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Oppførsel</b>"
+
+#: ../src/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Kontaktliste</b>"
+
+#: ../src/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Slå på stavekontroll for språkene:</b>"
+
+#: ../src/empathy-preferences.glade.h:6
+msgid "<b>Visual</b>"
+msgstr "<b>På skjerm</b>"
+
+#: ../src/empathy-preferences.glade.h:7
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>Denne listen listen viser bare de språkene det er installert ordliste "
+"for."
+
+#: ../src/empathy-preferences.glade.h:8
+msgid "Automatically _connect on startup "
+msgstr "_Koble til automatisk ved oppstart "
+
+#: ../src/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "Personbilder er valgt av brukerne for å vise i kontaktlisten"
+
+#: ../src/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "Samtale_tema:"
+
+#: ../src/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Si fra når kontakter logger _på"
+
+#: ../src/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Spill av lyder når du er _borte"
+
+#: ../src/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Spill av lyder når du er _opptatt"
+
+#: ../src/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "Generelt"
+
+#: ../src/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Varslinger"
+
+#: ../src/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Brukervalg"
+
+#: ../src/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "Vis person_bilder"
+
+#: ../src/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Vis _smilefjes som bilder"
+
+#: ../src/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "Vis ko_mpakt kontaktliste"
+
+#: ../src/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "Sorter på _navn"
+
+#: ../src/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "Sorter på s_tatus"
+
+#: ../src/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Stavekontroll"
+
+#: ../src/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "Temaer"
+
+#: ../src/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr "_Åpne nye samtaler i egne vinduer"
+
+#: ../src/empathy-preferences.glade.h:25
+msgid "_Play sound when messages arrive"
+msgstr "S_pill av lyd når meldinger kommer"
+
+#: ../src/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Status"
+
+#: ../src/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Avslutt"
+
+#: ../src/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "Vi_s kontaktliste"
diff --git a/trunk/po/ne.po b/trunk/po/ne.po
new file mode 100644
index 000000000..9c3be10a3
--- /dev/null
+++ b/trunk/po/ne.po
@@ -0,0 +1,1259 @@
+# translation of empathy.HEAD.ne.po to Nepali
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+#
+# Pawan Chitrakar <pawan@mpp.org.np>, 2005.
+# Jaydeep Bhusal <zaydeep@hotmail.com>, 2005.
+# Mahesh subedi <submanesh@hotmail.com>, 2006.
+# Shyam Krishna Bal <balshyam24@yahoo.com>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy.HEAD.ne\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-10-01 14:24+0100\n"
+"PO-Revision-Date: 2007-12-17 20:03+0545\n"
+"Last-Translator: Shyam Krishna Bal <balshyam24@yahoo.com>\n"
+"Language-Team: Nepali <info@mpp.org.np>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=n !=1\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "इम्प्याथी शीघ्र मेसेन्जर"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "शीघ्र सन्देशहरू पठाउनुहोस् र प्राप्त गर्नुहोस्"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "सधै नयाँ कुराकानीका लागि एउटा छुट्टै कुराकानी सञ्झ्याल खोल्नुहोस्"
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "कुराकानी सञ्झ्याल विषयवस्तु"
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Checks if Salut account is created"
+msgstr "यदि सलुट खाता सिर्जना गरिएको छ भने जाँच गर्दछ"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"अल्पविरामले हिज्जे परीक्षण गर्ने भाषाको सूची प्रयोग गर्नलाई सूची छुट्टाउदछ (e.g. en, fr, "
+"nl)."
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Compact contact list"
+msgstr "सम्पर्क सूची सङ्कुचन गर्नुहोस्"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Contact list sort criterium"
+msgstr "सम्पर्क सूची क्रमबद्ध मापदण्ड"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Default directory to select an avatar image from"
+msgstr "यसबाट एउटा अवतार छवि चयन गर्न पूर्वनिर्धारित डाइरेक्टरी"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable popup when contact is available"
+msgstr "सम्पर्क उपलब्ध हुँदा पपअप सक्षम पार्नुहोस्"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when away"
+msgstr "टाढा हुँदा ध्वनि सक्षम पार्नुहोस्"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable sound when busy"
+msgstr "व्यस्त हुँदा ध्वनि सक्षम पार्नुहोस्"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable spell checker"
+msgstr "हिज्जे परीक्षण सक्षम पार्नुहोस्"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide main window"
+msgstr "मुख्य सञ्झ्याल लुकाउनुहोस्"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Hide the main window."
+msgstr "मुख्य सञ्झ्याल लुकाउनुहोस् ।"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Open new chats in separate windows"
+msgstr "छुट्टै सञ्झ्यालमा नयाँ कुराकानी खोल्नुहोस्"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show avatars"
+msgstr "अवतार देखाउनुहोस्"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show hint about closing the main window"
+msgstr "मुख्य सञ्झ्याल बन्द गर्ने बारे संकेत देखाउनुहोस्"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Show offline contacts"
+msgstr "अफलाइन सम्पर्कहरू देखाउनुहोस्"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Spell checking languages"
+msgstr "हिज्जे परीक्षक भाषाहरू"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The last directory that an avatar image was chosen from."
+msgstr "एउटा अवतार छवि रोजिएको अन्तिम डाइरेक्टरी ।"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "कुराकानी सञ्झ्यालहरूमा तपाईँलाई पहिचान गर्न यो विषयवस्तु प्रयोग गरिन्छ ।"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use graphical smileys"
+msgstr "ग्राफिकल स्माइलीहरू प्रयोग गर्नुहोस्"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use notification sounds"
+msgstr "सूचीत गर्ने ध्वनिहरू प्रयोग गर्नुहोस्"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "Use theme for chat rooms"
+msgstr "कुराकानी कोठाका लागि विषयवस्तु प्रयोग गर्नुहोस्"
+
+#: ../data/empathy.schemas.in.h:24
+msgid "Whether or not the Salut account has been created on the first empathy run."
+msgstr "पहिलो इम्प्याथी सञ्चालनमा सलुट खाता सिर्जना गरिएको छ या छैन ।"
+
+#: ../data/empathy.schemas.in.h:25
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr "तपाईँले जाँच गर्न चाहनुभएको भाषाहरू विरूद्ध टाइप गरिएको शब्द जाँच गर्ने या नगर्ने ।"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to convert smileys into graphical images in conversations."
+msgstr "वार्तालापमा स्माइलीहरूलाई ग्राफिकल छविहरूमा रूपान्तरण गर्ने या नगर्ने ।"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "सन्देश आउँदा ध्वनि प्ले गर्ने कि नगर्ने"
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to play sounds when away."
+msgstr "टाढा हुँदा ध्वनिहरू प्ले गर्ने कि नगर्ने"
+
+#: ../data/empathy.schemas.in.h:29
+msgid "Whether or not to play sounds when busy."
+msgstr "व्यस्त हुँदा ध्वनिहरू प्ले गर्ने कि नगर्ने ।"
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "सम्पर्क उपलब्ध हुँदा पपअप देखाउने या नदेखाउने ।"
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "सम्पर्क सूची र कुराकानी सञ्झ्यालमा सम्पर्कहरूका लागि अवतारहरू देखाउने या नदेखाउने ।"
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "सम्पर्क सूचीमा अफलाइन भएका सम्पर्कहरूलाई देखाउने कि नदेखाउने ।"
+
+#: ../data/empathy.schemas.in.h:33
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr "शीर्षकपट्टीमा 'x' बटनसँग मुख्य सञ्झ्याल बन्द गर्ने बारे सन्देश संवाद देखाउने या नदेखाउने ।"
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "सङ्कुचन मोडमा सम्पर्क सूची देखाउने या नदेखाउने ।"
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "कुराकानी कोठाका लागि विषयवस्तु प्रयोग गर्ने या नगर्ने ।"
+
+#: ../data/empathy.schemas.in.h:36
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr "सम्पर्क सूची क्रमबद्ध गर्दा कुन मापदण्ड प्रयोग गर्ने । मान \"name\" सँग सम्पर्क नाम अनुसार क्रमबद्ध गर्दा पूर्वनिर्धारित प्रयोग गर्ने । मान \"state\" लाई स्थिति अनुसार सम्पर्क सूचीद्वारा क्रमबद्ध गरिनेछ ।"
+
+#: ../libempathy/empathy-presence.c:185 ../libempathy/empathy-presence.c:285
+msgid "Offline"
+msgstr "अफलाइन"
+
+#: ../libempathy/empathy-presence.c:275
+msgid "Available"
+msgstr "उपलब्ध"
+
+#: ../libempathy/empathy-presence.c:277
+msgid "Busy"
+msgstr "व्यस्त"
+
+#: ../libempathy/empathy-presence.c:280
+msgid "Away"
+msgstr "टाढा"
+
+#: ../libempathy/empathy-presence.c:282
+msgid "Hidden"
+msgstr "लुकेको छु"
+
+#: ../libempathy/empathy-tp-contact-list.c:730 ../src/empathy.c:211
+msgid "People nearby"
+msgstr "नजिकै छु"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"इम्प्याथी निशुल्क सफ्टवेयर हो; स्वतन्त्र सफ्टवेयर संस्थाद्धारा जीएनयू साधारण सार्वजनिक अनुमतिपत्रको "
+"रूपमा प्रकाशित शर्तहरू अन्तर्गत रहेर यसलाई परिमार्जन वा/र पुन: वितरण गर्न सक्नुहुन्छ; या "
+"संस्करण २ को अनुमतिपत्र, वा (तपाईँको विकल्पमा) कुनै पछिल्लो संस्करण।"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"विशेष उद्देश्यका लागि ठीक हुने, वा व्यवहारिक व्यापारिक अधिकार बिना नै, अझ कुनै अधिकार "
+"बिना नै, इम्प्याथीलाई यो उपयोगी हने आशामा वितरण गरिएको हो। विस्तृत जानकारीका लागि "
+"जीएनयू साधारण सार्वजनिक अनुमतिपत्र हेर्नुहोस् ।"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"तपाईँले इम्प्याथीसँग जीएनयू साधारण सार्वजनिक अनुमतिपत्रको एउटा प्रतिलिपि प्राप्त गर्नुभएको हुन "
+"पर्दछ; यदि छैन भने, निशुल्क सफ्टवेयर संस्थालाई, Inc., 59 Temple Place, Suite 330, "
+"Boston, MA 02111-1307 USA मा लेख्नुहोस्।"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "जिनोमका लागि एउटा शीघ्र सन्देश गर्ने क्लाइन्ट"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr "Jaydeep Bhusal <zaydeep@hotmail.com>Mahesh Subedi<submanesh@gmail.com>"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:336
+msgid "All"
+msgstr "सबै"
+
+#: ../libempathy-gtk/empathy-account-widget-generic.c:146
+#: ../libempathy-gtk/empathy-account-widget-generic.c:208
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>उन्नत</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "पासवर्ड बिर्सनुहोस् र प्रविष्टि खाली गर्नुहोस् ।"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+msgid "Login I_D:"
+msgstr "लगइन आईडी:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+msgid "Pass_word:"
+msgstr "पासवर्ड:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr "संसाधन:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Use encryption (SS_L)"
+msgstr "गुप्तिकरण (SS_L) प्रयोग गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+msgid "_Port:"
+msgstr "पोर्ट:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "सर्भर:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr "ज्याबर खाता सेटिङ"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "एमएसएन खाता सेटिङ"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "इमेल:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "पहिलो नाम:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "ज्याबर आईडी:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "अन्तिम नाम:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "उपनाम:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "प्रकाशित गरिएको नाम:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "सलुट खाता सेटिङ"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:218
+msgid "Disable"
+msgstr "अक्षम पार्नुहोस्"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:221
+msgid "Enable"
+msgstr "सक्षम पार्नुहोस्"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:255
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>खाता चयन गरिएको छैन</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:257
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"नयाँ खाता थप्न, तपाईँ 'थप्नुहोस्' बटनमा क्लिक गर्न सक्नुहुन्छ र कन्फिगर सुरु गर्न नयाँ प्रविष्टि सिर्जना गरिनेछ ।\n"
+"\n"
+"यदि तपाईँ एउटा खाता थप्न चाहनुहुन्छ भने, तपाईँले बायाँपट्टि सूचीमा कन्फिगर गर्न चाहनुभएको खातामा क्लिक गर्नुहोस् ।"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:266
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>खाताहरू कन्फिगर गरिएको छैन</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:268
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr "नयाँ खाता थप्न, तपाईँ 'थप्नुहोस्' बटनमा क्लिक गर्न सक्नुहुन्छ र तपाईँ कन्फिगर सुरु गर्न नयाँ प्रविष्टि सिर्जना गरिनेछ ।"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:394
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "खाताहरू"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:898
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"तपाईँले तपाईँको %s खाता हटाउन लाग्नु भएको हो !\n"
+"तपाईँ काम गर्न यकिन हुनुहुन्छ ?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:904
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"यदि तपाईँले काम गर्ने निश्चय गर्नु भएमा कुनै सम्बन्धित वार्तालाप र कुराकानी कोठा हट्ने छैन ।\n"
+"\n"
+"तपाईँले पछिल्लो समयमा खाता पछि थप्ने निश्चय गर्नुभयो, तिनिहरू अहिले पनि उपलब्ध हुनेछन् ।"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>नयाँ खाता</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>सेटिङ</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "सिर्जना गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"नयाँ खाता थप्न, तपाईँ 'थप्नुहोस्' बटनमा क्लिक गर्न सक्नुहुन्छ र तपाईँलाई कन्फिगर सुरु गर्न नयाँ प्रविष्टि सिर्जना गरिनेछ ।\n"
+"\n"
+"यदि तपाईँ एउटा खाता थप्न चाहनुहुन्न भने, सामान्यतया बायाँपट्टि सूचीमा कन्फिगर गर्न चाहनुभएको खातामा क्लिक गर्नुहोस् ।"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "प्रकार:"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+msgid "Call"
+msgstr "आह्वान"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "आगत"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "मौन"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "निर्गत"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "भिडियो पठाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Volume"
+msgstr "भोल्युम"
+
+#: ../libempathy-gtk/empathy-chat.c:335
+msgid "Disconnected"
+msgstr "जडान विच्छेद गरियो"
+
+#: ../libempathy-gtk/empathy-chat.c:450
+msgid "offline"
+msgstr "अफलाइन"
+
+#: ../libempathy-gtk/empathy-chat.c:453
+msgid "invalid contact"
+msgstr "अवैध सम्पर्क"
+
+#: ../libempathy-gtk/empathy-chat.c:456
+msgid "permission denied"
+msgstr "अनुमति अस्वीकार गरियो"
+
+#: ../libempathy-gtk/empathy-chat.c:459
+msgid "too long message"
+msgstr "अति लामो सन्देश"
+
+#: ../libempathy-gtk/empathy-chat.c:462
+msgid "not implemented"
+msgstr "कार्यान्वयन भएको छैन"
+
+#: ../libempathy-gtk/empathy-chat.c:465
+msgid "unknown"
+msgstr "अज्ञात"
+
+#: ../libempathy-gtk/empathy-chat.c:469
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "सन्देश पठाउँदा त्रुटि '%s': %s"
+
+#: ../libempathy-gtk/empathy-chat.c:924
+msgid "Insert Smiley"
+msgstr "स्माइली घुसाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.c:972
+msgid "_Check Word Spelling..."
+msgstr "शब्द हिज्जे जाँच गर्नुहोस्..."
+
+#: ../libempathy-gtk/empathy-chat.c:1397
+msgid "Connected"
+msgstr "जडान गरियो"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "खाली गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "आह्वान"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "विषय परिवर्तन गर्नुहोस्..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+msgid "Chat"
+msgstr "कुराकानी"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "सम्पर्क जानकारी"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "Cu_t"
+msgstr "काट्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "In_vite..."
+msgstr "निमन्त्रणा गर्नुहोस्..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Insert _Smiley"
+msgstr "स्माइली घुसाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invitation _message:"
+msgstr "निमन्त्रणा सन्देश:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+msgid "Invite"
+msgstr "निमन्त्रणा गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "नयाँ जडान गर्नुहोस्..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Left"
+msgstr "ट्याब बायाँतिर सार्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Move Tab _Right"
+msgstr "ट्याब दायाँतिर सार्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "Select who would you like to invite:"
+msgstr "तपाईँ कसलाई निमन्त्रणा गर्न चाहनुहुन्छ चयन गर्नुहोस्:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+msgid "You have been invited to join a chat conference."
+msgstr "तपाईँलाई कुराकानी सम्मेलनमा जोड्न निमन्त्रण गरिएको छ ।"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "सम्पर्क थप्नुहोस्..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Add To Favorites"
+msgstr "मनपर्नेहरू थप्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Close"
+msgstr "बन्द गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+msgid "_Conversation"
+msgstr "वार्तालाप"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Copy"
+msgstr "प्रतिलिपि बनाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+msgid "_Detach Tab"
+msgstr "ट्याबलाई छुट्याउनुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "सम्पादन गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+msgid "_Next Tab"
+msgstr "पछिल्लो ट्याब"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+msgid "_Paste"
+msgstr "टाँस्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Previous Tab"
+msgstr "अघिल्लो ट्याब"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "कोठा"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Show Contacts"
+msgstr "सम्पर्कहरू देखाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+msgid "_Tabs"
+msgstr "ट्याबहरु"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr "पछिल्लो वार्तालाप हेर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chat-view.c:468
+msgid "_Copy Link Address"
+msgstr "लिङ्क ठेगानाको प्रतिलिपि बनाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-chat-view.c:476
+msgid "_Open Link"
+msgstr "लिङ्क खोल्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chat-view.c:754
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-chat-window.c:709
+#, c-format
+msgid "Conversations (%d)"
+msgstr "वार्तालाप (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1295
+msgid "Typing a message."
+msgstr "सन्देश टाइप गर्दै ।"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "नाम"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "कोठा"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr "स्वत: जडान गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "खाता:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "मनपर्ने कोठा सम्पादन गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "सुरुआतमा कोठा जडान गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "इम्प्याथी सुरु हुँदा र तपाईँ जडान हुँदा यो कुराकानी कोठा जडान गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "मनपर्ने कोठा प्रबन्ध गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "नाम:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "सर्भर:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "कोठा:"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:173
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "सम्पर्क जानकारी"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:221
+msgid "I would like to add you to my contact list."
+msgstr "म तपाईँलाई मेरो सम्पर्क सूचीमा थप्न चाहन्छु ।"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:245
+msgid "New contact"
+msgstr "नयाँ सम्पर्क"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "पछि निर्णय गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "सदस्यता अनुरोध"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:198
+msgid "_Contact"
+msgstr "सम्पर्क"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:202
+msgid "_Group"
+msgstr "समूह"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr "कुराकानी"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+msgid "Chat with contact"
+msgstr "सम्पर्क सहित कुराकानी"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "Infor_mation"
+msgstr "जानकारी"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "View contact information"
+msgstr "सम्पर्क जानकारी हेर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Re_name"
+msgstr "पुन: नामकरण गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Rename"
+msgstr "पुन: नामकरण गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+msgid "Edit the groups and name for this contact"
+msgstr "यो सम्पर्कका लागि समूह र नाम सम्पादन गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "_Remove"
+msgstr "हटाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "Remove contact"
+msgstr "सम्पर्क हटाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "_Invite to Chat Room"
+msgstr "कुराकानी कोठामा निमन्त्रणा गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "Invite to a currently open chat room"
+msgstr "हालै खोलिएको कुराकानी कोठामा निमन्त्रणा गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "_Send File..."
+msgstr "फाइल पठाउनुहोस्..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "Send a file"
+msgstr "फाइल पठाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+msgid "View previous conversations with this contact"
+msgstr "यो सम्पर्कसँग अघिल्लो वार्तालाप हेर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "_Call"
+msgstr "आह्वान"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "Start a voice or video conversation with this contact"
+msgstr "यो सम्पर्कसँग आवाज वा भिडियो वार्तालाप सुरु गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1414
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "माफ गर्नुहोस्, तपाईँलाई मेरो सम्पर्क सूचीमा राख्न चाहन्न ।"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:637
+msgid "Select"
+msgstr "चयन गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:647
+#: ../libempathy-gtk/empathy-main-window.c:613
+msgid "Group"
+msgstr "समूह"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>क्लाइन्ट जानकारी</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>सम्पर्क विवरण</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>सम्पर्क</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>समूह</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "उपनाम:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "जन्मदिन:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "क्लाइन्ट:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "इमेल:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "पूरा नाम:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "पहिचायक:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "जानकारी अनुरोध गरियो..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "सञ्चालन प्रणाली:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr "तपाईँले यो सम्पर्क देखाउनु चाहनुभएको समूह चयन गर्नुहोस्, तपाईँले बढीमा एउटा समूह वा समूह नभएको चयन गर्न सक्नुहुन्छ ।"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "संस्करण:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "वेब साइट:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:253
+msgid "Enter the new topic you want to set for this room:"
+msgstr "तपाईँले यो कोठाका लागि सेट गर्न चाहनुभएको नयाँ विषय प्रविष्ट गर्नुहोस्:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:366
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s ले कोठा जडान गर्यो"
+
+#: ../libempathy-gtk/empathy-group-chat.c:369
+#, c-format
+msgid "%s has left the room"
+msgstr "%s ले कोठा छोड्यो"
+
+#: ../libempathy-gtk/empathy-group-chat.c:449
+#, c-format
+msgid "Topic: %s"
+msgstr "विषय: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:570
+#, c-format
+msgid "Topic set to: %s"
+msgstr "सेट गर्नुपर्ने विषय: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:572
+msgid "No topic defined"
+msgstr "कुनै विषय परिभाषित गरिएको छैन"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>विषय:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "समूह कुराकानी"
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+msgid "Account"
+msgstr "खाता"
+
+#: ../libempathy-gtk/empathy-log-window.c:504
+msgid "Conversation"
+msgstr "वार्तालाप"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+msgid "Date"
+msgstr "मिति"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "वार्तालाप"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Search"
+msgstr "खोजी गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "View Previous Conversations"
+msgstr "अघिल्लो वार्तालाप हेर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "लागि:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "कुराकानी कोठा"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "ब्राउज:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid "Enter the room name to join here or click on one or more rooms in the list."
+msgstr "यहाँ जडान गर्न कोठा नाम प्रविष्ट गर्नुहोस् वा सूचीमा एक वा धेरै कोठामा क्लिक गर्नुहोस् ।"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr "कोठा होस्ट गर्ने सर्भर प्रविष्ट गर्नुहोस्, वा यदि कोठा हालको खाताको सर्भरमा छ भने यसलाई खाली छोड्नुहोस्"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "जडान गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "नयाँ जडान गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "ताजा पार्नुहोस्"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid "This list represents all chat rooms hosted on the server you have entered."
+msgstr "यो सूचीले तपाईँले प्रविष्ट गर्नुभएको सर्भरमा होस्ट भएका सबै कुराकानी कोठालाई प्रतिनिधित्व गर्दछ ।"
+
+#: ../libempathy-gtk/empathy-main-window.c:278
+msgid "Show and edit accounts"
+msgstr "खाताहरू देखाउनुहोस् र सम्पादन गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-main-window.c:634
+msgid "Contact"
+msgstr "सम्पर्क"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact list"
+msgstr "सम्पर्क सूची"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "सामग्री"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "मनपर्ने जडान गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr "मनपर्ने प्रबन्ध गर्नुहोस्..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "अफलाइन सम्पर्कहरू देखाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "बारेमा"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "खाताहरू"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "सामग्रीहरू"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "मद्दत"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "नयाँ सन्देश..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "व्यक्तिगत जानकारी"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "प्राथमिकताहरु"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "अन्त्य गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-preferences.c:243
+msgid "Language"
+msgstr "भाषा"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>देखावट</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>अडियो</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>व्यवहार</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>सम्पर्क सूची</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>भाषाहरूका लागि हिज्जे जाँच सक्षम पार्नुहोस्:</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>विकल्प</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>दृश्यात्मक</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr "<small>भाषाको सूचीले तपाईँले शब्दकोशमा स्थापना गर्नुभएको भाषाहरू मात्र परावर्तन गर्दछ ।</small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "अवतारहरू सम्पर्क सूचीमा देखाइएको प्रयोगकर्ताले छानेको छविहरू हुन्"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "कुराकानी विषयवस्तु:"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "सम्पर्कहरू अनलाइन आउँदा सूचनाहरू प्रदर्शन गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "टाढा हुँदा ध्वनि सक्षम पार्नुहोस्"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "व्यस्त हुँदा ध्वनि सक्षम पार्नुहोस्"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "सामान्य"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "सूचना"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "प्राथमिकताहरू"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "अवतार देखाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "छविको रूपमा स्माइलीहरू देखाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "सङ्कुचन सम्पर्क सूची देखाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "नाम अनुसार क्रमबद्ध गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "स्थिति अनुसार क्रमबद्ध गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "हिज्जे जाँच"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "विषयवस्तु"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr "नयाँ कुराकानी छुट्टै सञ्झ्यालहरूमा खोल्नुहोस्"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Play sound when messages arrive"
+msgstr "सन्देशहरू आउँदा ध्वनि प्ले गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Use for chat rooms"
+msgstr "कुराकानीका लागि प्रयोग गर्नुहोस्"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:690
+msgid "Custom messages..."
+msgstr "अनुकूल सन्देशहरू..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "अनुकूल सन्देश"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "सन्देश:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "सन्देश बचत गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "वस्तुस्थिति:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:188
+#, c-format
+msgid "%s went offline"
+msgstr "%s अफलाइन भयो"
+
+#: ../libempathy-gtk/empathy-private-chat.c:202
+#, c-format
+msgid "%s has come online"
+msgstr "%s अनलाइन भयो"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "शब्द"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "शब्दका लागि सुझावहरू"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "हिज्जे परीक्षक"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "शब्दका लागि सुझावहरू:"
+
+#: ../libempathy-gtk/empathy-status-icon.c:311
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"%s बाट नयाँ सन्देश:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:572
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "%s द्वारा अनुरोध गरिएको सदस्यता"
+
+#: ../libempathy-gtk/empathy-status-icon.c:575
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"सन्देश: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "वस्तुस्थिति"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "सम्पर्क सूची देखाउनुहोस्"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:87
+msgid "Classic"
+msgstr "पुरानो"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:88
+msgid "Simple"
+msgstr "साधरण"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:89
+msgid "Clean"
+msgstr "खाली गर्नुहोस्"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:90
+msgid "Blue"
+msgstr "नीलो"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid "The contact to display in the applet. Empty means no contact is displayed."
+msgstr "एप्लेटमा प्रदर्शन गर्न सम्पर्क । खालीको अर्थ कुनै सम्पर्क प्रदर्शन भएको छैन ।"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "सम्पर्कको अवतार टोकन । खालीको अर्थ सम्पर्कसँग अवतार छैन ।"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "मेगाफोन"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "कुराकानी!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "जानकारी"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "उपस्थिति"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "तपाईँको आफ्नो उपस्थिति सेट गर्नुहोस्"
+
+#: ../src/empathy.c:271
+msgid "Don't connect on startup"
+msgstr "सुरुआतमा जडान नगर्नुहोस्"
+
+#: ../src/empathy.c:282
+msgid "- Empathy Instant Messenger"
+msgstr "इम्प्याथी शीघ्र मेसेन्जर"
+
diff --git a/trunk/po/nl.po b/trunk/po/nl.po
new file mode 100644
index 000000000..ddf189ce8
--- /dev/null
+++ b/trunk/po/nl.po
@@ -0,0 +1,1971 @@
+# Dutch translation of Gossip.
+#
+# Copyright (C) 2003-2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gossip package.
+#
+# Vincent van Adrighem <V.vanAdrighem@dirck.mine.nu>, 2003.
+# Taco Witte <tcwitte@cs.uu.nl>, 2003-2004.
+# Wouter Bolsterlee <wbolster@gnome.org>, 2006, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip cvs\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2007-04-09 15:19+0200 \n"
+"Last-Translator: Wouter Bolsterlee <wbolster@gnome.org>\n"
+"Language-Team: Gnome-NL <gnome-nl-list@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Instant Messenger"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Instant Messenger"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Altijd een nieuw scherm voor nieuwe gesprekken openen."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "Thema voor chatvensters"
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Komma-gescheiden lijst van talen voor de spellingchecker (bijv. en, fr, nl)."
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Compact contact list"
+msgstr "Compacte contactlijst"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+# avatar? :s (Wouter Bolsterlee)
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr "Standaardmap voor het kiezen van gebruikersafbeeldingen"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr "Notificatiebericht tonen als een contact online komt"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr "Geluid afspelen indien afwezig"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr "Geluid afspelen indien bezig"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable spell checker"
+msgstr "Spellingchecker inschakelen"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Hoofdvenster verbergen"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Het hoofdvenster niet tonen."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr "Nieuwe chats openen in aparte vensters"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr "Gebruikersafbeeldingen tonen"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show hint about closing the main window"
+msgstr "Tip tonen bij het sluiten van het hoofdvenster."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Offline contacten tonen"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr "Talen voor de spellingchecker"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr "De laatst gebruikte map voor gebruikersafbeeldingen."
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Het thema dat gebruikt wordt voor het tonen van chats in chatvensters."
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Smileys grafisch tonen"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Waarschuwingsgeluiden gebruiken"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr "Thema voor chatruimte gebruiken"
+
+# Bah, wat een lelijke vertaling (Wouter Bolsterlee)
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Ingetypte woorden al dan niet controleren op de talen waar u op wilt "
+"controleren."
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Smileys in gesprekken grafisch tonen."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Een geluid afspelen als berichten binnenkomen."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Geluiden afspelen indien afwezig."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Geluiden afspelen indien bezig."
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Een notificatiebericht tonen als een contact online komt."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Gebruikersafbeeldingen wel of niet tonen in de contactlijst en chatvensters."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Contacten die offline zijn in de contactlijst wel of niet tonen."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Al dan niet het informatievenster over het sluiten van het hoofdvenster "
+"tonen als het venster met de ‘x’ in de titelbank gesloten wordt."
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Al dan niet de contactlijst in compacte modus tonen"
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Thema voor chatruimtes gebruiken"
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Offline"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Beschikbaar"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Bezig"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Afwezig"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+msgid "Show and edit accounts"
+msgstr "Accounts tonen en bewerken"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Groep"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+msgid "Contact"
+msgstr "Contact"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "Contactlijst - Gossip"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Context"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "_Bladwijzers openen"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr "_Nieuw groepsgesprek binnengaan…"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr "Bladwijzers beheren…"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "_Offline contacten tonen"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+msgid "_About"
+msgstr "_Over"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Accounts"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "_Contact toevoegen..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Chatten"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "In_houd"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "_Edit"
+msgstr "Be_werken"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "_Help"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Nieuw bericht..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "_Persoonlijke gegevens"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Voorkeuren"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Afsluiten"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr "_Ruimte"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr "_Vorige gesprekken tonen"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Status"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "Contactlijst _tonen"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+#, fuzzy
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Gossip is vrije Software; u kunt het verspreiden en/of aanpassen onder de "
+"voorwaarden van de GNU General Public License zoals uitgegeven door de Free "
+"Software Foundation; ofwel versie 2, ofwel (naar keuze) een latere versie."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+#, fuzzy
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Gossip wordt verspreid in de hoop dat het bruikbaar is, maar ZONDER ENIGE "
+"GARANTIE; zelfs niet de impliciete garantie van VERKOOPBAARHEID of "
+"GESCHIKTHEID VOOR EEN BEPAALD DOEL. Zie de GNU General Public License voor "
+"meer informatie."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"U zou een kopie van de GNU General Public License moeten hebben ontvangen "
+"bij Gossip; is dit niet het geval, dan kun u schrijven naar de Free Software "
+"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 "
+"USA"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Gossip, een chatclient voor GNOME"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Vincent van Adrighem\n"
+"Taco Witte\n"
+"Wouter Bolsterlee\n"
+"http://nl.gnome.org/"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Beschikbaar"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+#, fuzzy
+msgid "Enable"
+msgstr "Voorbeeld"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Geen account geselecteerd</b>"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"U kunt de knop ‘Toevoegen’ gebruiken om een nieuw account toe te voegen en "
+"in te stellen.\n"
+"\n"
+"Om bestaande accountgegevens te veranderen u een account uit de lijst aan de "
+"linkerzijde kiezen."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Geen accounts ingesteld</b>"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"U kunt de knop ‘Toevoegen’ gebruiken om een nieuw account toe te voegen en "
+"in te stellen."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr "Accounts"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Het account ‘%s’ zal verwijderd worden!\n"
+"Weet u zeker dat u wilt doorgaan?"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Gerelateerde gesprekken en chatruimtes zullen niet verwijderd worden als u "
+"doorgaat.\n"
+"\n"
+"Als u het account later weer toevoegt, dan zullen deze weer beschikbaar zijn."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+msgid "<b>Account</b>"
+msgstr "<b>Account</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+msgid "<b>New Account</b>"
+msgstr "<b>Nieuw account</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+msgid "<b>Settings</b>"
+msgstr "<b>Instellingen</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+"Een unieke naam voor dit account om het voor u persoonlijk herkenbaar te "
+"maken."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+msgid "Cr_eate"
+msgstr "_Aanmaken"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr "Imendio "
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"U kunt de knop ‘Toevoegen’ gebruiken om een nieuw account toe te voegen en "
+"in te stellen.\n"
+"\n"
+"Om bestaande accountgegevens te veranderen u een account uit de lijst aan de "
+"linkerzijde kiezen."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+msgid "_Name:"
+msgstr "_Naam:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+msgid "_Type:"
+msgstr "_Type:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Wachtwoord vergeten en het invoervak leegmaken"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr "Login I_D"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+msgid "Pass_word:"
+msgstr "_Wachtwoord:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr "_Bron:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+msgid "Use encryption (SS_L)"
+msgstr "Encryptie gebruiken (SS_L)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+msgid "_Port:"
+msgstr "_Poort:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Server:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr "jabber-accountgegevens"
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Verbinding verbroken"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr "Smiley invoegen"
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr "Spelling van woord _controleren..."
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "Verbonden"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Wissen"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr "_Onderwerp instellen…"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Chatten"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr "Contactinfor_matie"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+msgid "Cu_t"
+msgstr "K_nippen"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+msgid "In_vite..."
+msgstr "_Uitnodigen…"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "_Smiley invoegen"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+msgid "Invitation _message:"
+msgstr "_Uitnodiging:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr "Uitnodigen"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Tabblad naar _links verplaatsen"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Tabblad naar _rechts verplaatsen"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr "Kies wie u wilt uitnodigen:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "U bent uitgenodigd voor een groepsgesprek."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "_Aan bladwijzers toevoegen"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr "Sl_uiten"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Gesprek"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr "_Kopiëren"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "Tabblad _losmaken"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "Vo_lgend tabblad"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr "_Plakken"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "Vo_rig tabblad"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr "C_ontactlijst tonen"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Tabbladen"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "Koppelingsadres _kopiëren"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "Koppeling _openen"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "Nieuw bericht"
+msgstr[1] "Nieuwe berichten"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+msgid "Chat Room"
+msgstr "Chatruimte"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "Gesprek"
+msgstr[1] "Gesprekken (%d)"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "Bezig met typen van een bericht."
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+msgid "_Contact"
+msgstr "_Contact"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+msgid "_Group"
+msgstr "_Groep"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "Chat with contact"
+msgstr "Met dit contact chatten"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "Infor_mation"
+msgstr "Infor_matie"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "View contact information"
+msgstr "Contactinformatie tonen"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Re_name"
+msgstr "Her_noemen"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Rename"
+msgstr "Hernoemen"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "Edit the groups and name for this contact"
+msgstr "Groepen en naam voor dit contact bewerken"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "_Verwijderen"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "Remove contact"
+msgstr "Contact verwijderen"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "_Invite to Chat Room"
+msgstr "In chatruimte _uitnodigen"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr "In een geopende chatruimte uitnodigen"
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr "Be_stand versturen…"
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "Send a file"
+msgstr "Een bestand versturen"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "View previous conversations with this contact"
+msgstr "Vorige gesprekken met dit contact tonen"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr "Taal"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Uiterlijk</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Geluid</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Gedrag</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "<b>Verbinding</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr "<b>Talen</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Opties</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Visueel</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>Bovenstaande lijst met talen toont alleen de talen waarvoor u een "
+"woordenboek heeft geïnstalleerd.</small>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Gebruikersafbeeldingen zijn door de gebruiker gekozen afbeeldingen die in de "
+"contactlijst en in chatvensters getoond worden"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "_Chatthema:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "_Notificatiebericht tonen als contacten online komen"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Geluid afspelen indien _afwezig"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Geluid afspelen indien _bezig"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr "Algemeen"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Notificatieberichten"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Voorkeuren"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "_Gebruikersafbeeldingen tonen"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "_Smileys tonen"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "Contactlijst co_mpact maken"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Spellingchecker"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr "Thema's"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr "_Spellingchecker inschakelen"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Nieuwe chats in eigen vensters openen"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "_Geluid afspelen bij nieuwe berichten"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "Voor chatruimtes _gebruiken"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr "Aangepast bericht…"
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+msgid "Clear List..."
+msgstr "Lijst wissen…"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+msgid "Are you sure you want to clear the list?"
+msgstr "Weet u zeker dat u de lijst wilt wissen?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+"Hiermee verwijdert u alle aangepaste statusberichten die u eerder aan de "
+"lijst heeft toegevoegd."
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr "Wissen"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Geef een statusbericht:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+msgid "Status Message Presets"
+msgstr "Opgeslagen statusberichten"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+msgid "_Add to status message list"
+msgstr "_Aan statusberichten toevoegen"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s ging offline"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr "%s is nu online"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr "Klassiek"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr "Simpel"
+
+# Dichterlijke vrijheid (Wouter Bolsterlee)
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+msgid "Clean"
+msgstr "Helder"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr "Blauw"
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Niet verbinden bij opstarten"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "- Gossip Instant Messenger"
+
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Gossip Instant Messenger"
+
+#~ msgid "Normal"
+#~ msgstr "Normaal"
+
+#~ msgid "Joining"
+#~ msgstr "Verbinden…"
+
+#~ msgid "Active"
+#~ msgstr "Actief"
+
+#~ msgid "Inactive"
+#~ msgstr "Niet actief"
+
+#~ msgid "Unknown"
+#~ msgstr "Onbekend"
+
+#~ msgid "Error"
+#~ msgstr "Fout"
+
+#~ msgid "Moderator"
+#~ msgid_plural "Moderators"
+#~ msgstr[0] "Moderator"
+#~ msgstr[1] "Moderators"
+
+#~ msgid "Participant"
+#~ msgid_plural "Participants"
+#~ msgstr[0] "Deelnemer"
+#~ msgstr[1] "Deelnemers"
+
+#~ msgid "Visitor"
+#~ msgid_plural "Visitors"
+#~ msgstr[0] "Bezoeker"
+#~ msgstr[1] "Bezoekers"
+
+#~ msgid "No role"
+#~ msgstr "Geen rol"
+
+#~ msgid "Owner"
+#~ msgid_plural "Owners"
+#~ msgstr[0] "Eigenaar"
+#~ msgstr[1] "Eigenaars"
+
+#~ msgid "Administrator"
+#~ msgid_plural "Administrators"
+#~ msgstr[0] "Beheerder"
+#~ msgstr[1] "Beheerders"
+
+#~ msgid "Member"
+#~ msgid_plural "Members"
+#~ msgstr[0] "Lid"
+#~ msgstr[1] "Leden"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#~ msgid "Outcast"
+#~ msgid_plural "Outcasts"
+#~ msgstr[0] "Buitenstaander"
+#~ msgstr[1] "Buitenstaanders"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#~ msgid "No affiliation"
+#~ msgstr "Geen relatie"
+
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "De bijnaam die u heeft gekozen is al in gebruik."
+
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr ""
+#~ "De chatruimte die u probeert te betreden is met een wachtwoord beveiligd."
+
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr "The chatserver gaf geen antwoord binnen de verwachte tijd."
+
+#~ msgid "The conference server you tried to join could not be found."
+#~ msgstr "De chatserver kon niet gevonden worden."
+
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Er is een onbekende fout opgetreden. Controleer uw gegevens."
+
+#~ msgid "Joining the chatroom was canceled."
+#~ msgstr "Binnengaan van chatruimte is geannuleerd"
+
+#~ msgid "Unavailable"
+#~ msgstr "Niet beschikbaar"
+
+#~ msgid "An unknown error occurred."
+#~ msgstr "Een onbekende fout is opgetreden."
+
+#~ msgid "Connection refused."
+#~ msgstr "Verbinding geweigerd."
+
+#~ msgid "Server address could not be resolved."
+#~ msgstr "Het serveradres kon niet opgevraagd worden."
+
+#~ msgid "Connection timed out."
+#~ msgstr "Er kan geen verbinding gemaakt worden."
+
+#~ msgid "Authentication failed."
+#~ msgstr "Aanmelden mislukt."
+
+#~ msgid "The username you are trying already exists."
+#~ msgstr "Deze gebruikersnaam is al in gebruik."
+
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "Deze gebruikersnaam is niet geldig."
+
+#~ msgid "This feature is unavailable."
+#~ msgstr "Deze functie is niet beschikbaar."
+
+#~ msgid "This feature is unauthorized."
+#~ msgstr "Deze functie is niet toegankelijk."
+
+#~ msgid "A specific protocol error occurred that was unexpected."
+#~ msgstr "Er is een onverwachtse protocolfout opgetreden."
+
+#~ msgid "new account"
+#~ msgstr "nieuw account"
+
+#~ msgid "Home"
+#~ msgstr "Thuis"
+
+#~ msgid "Couldn't send message!"
+#~ msgstr "Bericht kon niet verzonden worden!"
+
+#~ msgid "Connection could not be opened"
+#~ msgstr "Verbinding kon niet gemaakt worden"
+
+#~ msgid "Service has gone and is no longer available"
+#~ msgstr "De dienst is niet langer beschikbaar"
+
+#~ msgid "Bad or malformed request to this service"
+#~ msgstr "Onjuiste aanvraag voor deze dienst"
+
+#~ msgid "Unauthorized request to this service"
+#~ msgstr "Aanvraag voor deze dienst niet toegestaan"
+
+#~ msgid "Payment is required for this service"
+#~ msgstr "Deze dienst vereist betaling"
+
+#~ msgid "This service is forbidden"
+#~ msgstr "Geen toegang tot deze dienst"
+
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Deze functie is niet beschikbaar of kon niet gevonden worden."
+
+#~ msgid "Unacceptable request sent to this services"
+#~ msgstr "Onacceptabele aanvraag naar deze dienst verstuurd"
+
+#~ msgid "Registration is required"
+#~ msgstr "Registratie is vereist"
+
+# Huh, wat betekent dit? (Wouter Bolsterlee)
+#~ msgid "There was a conflict of interest trying to use this service"
+#~ msgstr "Conflicterende belangen bij het gebruik van deze dienst"
+
+#~ msgid "There was an internal service error"
+#~ msgstr "Er is een interne fout opgetreden"
+
+#~ msgid "This feature is not implemented"
+#~ msgstr "Deze functie is niet geïmplementeerd."
+
+# Vrij vertaald (Wouter Bolsterlee)
+#~ msgid "The remote service timed out"
+#~ msgstr "De server gaf geen antwoord."
+
+#~ msgid "Using the %s backend"
+#~ msgstr "Gebruikte backend: %s"
+
+#~ msgid "Stop"
+#~ msgstr "Afbreken"
+
+#~ msgid "Disconnect"
+#~ msgstr "Verbinding ver_breken"
+
+#~ msgid "Connect"
+#~ msgstr "Verbinden"
+
+#~ msgid "Bye bye"
+#~ msgstr "Tot ziens"
+
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Registratie van nieuwe accountgegevens gelukt"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#~ msgid "You should now be able to connect to your new account."
+#~ msgstr "Verbinden met het nieuwe account zou nu moeten werken."
+
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Registratie accountgegevens mislukt"
+
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Accountwachtwoord succesvol gewijzigd."
+
+#~ msgid "You should now be able to connect with your new password."
+#~ msgstr "Verbinden met het nieuwe wachtwoord zou nu moeten werken."
+
+#~ msgid "Failed to change your account password."
+#~ msgstr "Wijzigen van wachtwoord is mislukt."
+
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Vul een nieuw wachtwoord in voor dit account\n"
+#~ "%s"
+
+#~ msgid "No information is available for this contact."
+#~ msgstr "Er is geen informatie over dit contact beschikbaar."
+
+#~ msgid "Information requested, please wait..."
+#~ msgstr "Informatie opgevraagd, even geduld..."
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Ik wil je graag toevoegen aan mijn contactlijst."
+
+#~ msgid "To summarize:"
+#~ msgstr "Samengevat:"
+
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "%d nieuw bericht"
+#~ msgstr[1] "%d nieuwe berichten"
+
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "%d inschrijvingsverzoek"
+#~ msgstr[1] "%d inschrijvingsverzoeken"
+
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "%d aanvraag voor bestandsoverdracht"
+#~ msgstr[1] "%d aanvragen voor bestandsoverdracht"
+
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "%d serverbericht"
+#~ msgstr[1] "%d serverberichten"
+
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "%d fout"
+#~ msgstr[1] "%d fouten"
+
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "Alle ongelezen berichten zullen bij afsluiten verloren gaan."
+
+# Vrij vertaald (Wouter Bolsterlee)
+#~ msgid "Gossip is still running, it is just hidden."
+#~ msgstr "Gossip draait in de achtergrond verder."
+
+#~ msgid "Click on the notification area icon to show Gossip."
+#~ msgstr ""
+#~ "Klik op het pictogram in het mededelingengebied om Gossip weer te openen."
+
+# Vrij vertaald (Wouter Bolsterlee)
+#~ msgid "You were about to quit!"
+#~ msgstr "Gossip wordt afgesloten!"
+
+#~ msgid ""
+#~ "Since no system or notification tray has been found, this action would "
+#~ "normally quit Gossip.\n"
+#~ "\n"
+#~ "This is just a reminder, from now on, Gossip will quit when performing "
+#~ "this action unless you uncheck the option below."
+#~ msgstr ""
+#~ "Omdat er geen mededelingengebied is gevonden, zou Gossip bij deze actie "
+#~ "normaal gesproken afgesloten worden.\n"
+#~ "\n"
+#~ "Deze mededeling verschijnt omdat Gossip vanaf nu afgesloten zal worden "
+#~ "bij deze actie, tenzij u het vinkje hieronder uitschakelt."
+
+#~ msgid "Edit Account _Details"
+#~ msgstr "Accountgegevens _bewerken"
+
+#~ msgid "Click to enlarge"
+#~ msgstr "Klik om te vergroten"
+
+#~ msgid "Word"
+#~ msgstr "Woord"
+
+#~ msgid "Select who would you like to invite to room:"
+#~ msgstr "Kies wie u wilt uitnodigen in deze ruimte:"
+
+#~ msgid "Select which room you would like to invite:"
+#~ msgstr "Kies welke ruimte u wilt uitnodigen:"
+
+#~ msgid "New message from %s"
+#~ msgstr "Nieuw bericht van %s"
+
+#~ msgid "Your invitation has been declined"
+#~ msgstr "Uw uitnodiging is geweigerd."
+
+#~ msgid "Accept"
+#~ msgstr "Accepteren"
+
+#~ msgid "Decline"
+#~ msgstr "Weigeren"
+
+#~ msgid "Name"
+#~ msgstr "Naam"
+
+#~ msgid "Room"
+#~ msgstr "Ruimte"
+
+#~ msgid "Server"
+#~ msgstr "Server"
+
+#~ msgid "Auto Connect"
+#~ msgstr "Automatisch verbinden"
+
+#~ msgid "Information requested..."
+#~ msgstr "Informatie opgevraagd…"
+
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr "Wilt u dit contact echt uit de contactlijst verwijderen?"
+
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Vul een nieuwe naam in voor de groep\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Selecteren"
+
+#~ msgid "Unsorted"
+#~ msgstr "Ongesorteerd"
+
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server."
+#~ msgstr ""
+#~ "Geef de bijnaam die u wilt gebruiken voor\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "Contactinformatie kan van de server opgevraagd worden."
+
+#~ msgid "New file transfer request from %s"
+#~ msgstr "Nieuwe aanvraag voor bestandsoverdracht van %s"
+
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "Bestandsoverdracht is aan beide kanten niet ondersteund."
+
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "De bestandsoverdracht is geweigerd."
+
+#~ msgid "The other user decided not to continue."
+#~ msgstr "De andere gebruiker de transactie afgebroken."
+
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Er is een onbekende fout opgetreden tijdens de bestandsoverdracht."
+
+#~ msgid "%s would like to send you a file."
+#~ msgstr "%s wil u een bestand toesturen."
+
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Iemand wil u een bestand toesturen."
+
+#~ msgid "Select a file"
+#~ msgstr "Bestand selecteren"
+
+#~ msgid "Connecting..."
+#~ msgstr "Verbinden..."
+
+# Vrij vertaald (Wouter Bolsterlee)
+#~ msgid "Retry connection"
+#~ msgstr "Opnieuw verbinding maken"
+
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "%s wordt uitgenodigd om aan dit gesprek deel te nemen."
+
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "%s heeft het onderwerp ingesteld op: %s"
+
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Geef een nieuw onderwerp dat u voor deze chatruime wilt instellen:"
+
+#~ msgid "%s has joined the room"
+#~ msgstr "%s is de chatruimte binnengekomen"
+
+#~ msgid "%s has left the room"
+#~ msgstr "%s heeft de chatruimte verlaten"
+
+#~ msgid "Topic: %s"
+#~ msgstr "Onderwerp: %s"
+
+#~ msgid "Account"
+#~ msgstr "Account"
+
+#~ msgid "Conversation With"
+#~ msgstr "Gesprek met"
+
+#~ msgid "Date"
+#~ msgstr "Datum"
+
+#~ msgid "Allow multiple instances of the application to run at the same time"
+#~ msgstr "Meerdere keren opstarten van deze applicatie toestaan"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Beschikbare accounts tonen"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Met dit account verbinden bij opstarten"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "ACCOUNTNAAM"
+
+#~ msgid "You can not use --no-connect together with --account"
+#~ msgstr "U kunt --no-connect niet tegelijk met --account gebruiken"
+
+#~ msgid "No accounts available."
+#~ msgstr "Geen accounts beschikbaar."
+
+#~ msgid "Available accounts:"
+#~ msgstr "Beschikbare accounts:"
+
+#~ msgid "[default]"
+#~ msgstr "[standaard]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Er is geen account met de naam ‘%s’."
+
+#~ msgid "Join"
+#~ msgstr "_Binnengaan"
+
+#~ msgid "Create"
+#~ msgstr "Aanmaken"
+
+#~ msgid "Chat Rooms"
+#~ msgstr "Chatruimtes"
+
+#~ msgid "Found %d conference rooms"
+#~ msgstr "%d chatruimtes gevonden"
+
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "Zoeken naar chatruimes, even geduld…"
+
+#~ msgid "Browsing cancelled!"
+#~ msgstr "Zoeken gestopt!"
+
+#~ msgid "Default"
+#~ msgstr "Standaard"
+
+#~ msgid "Chat!"
+#~ msgstr "Chatten"
+
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s wil aan uw contactlijst worden toegevoegd."
+
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Iemand wil aan de contactlijst worden toegevoegd."
+
+#~ msgid "Subscription request"
+#~ msgstr "Inschrijvingsverzoek"
+
+#~ msgid "Show"
+#~ msgstr "Tonen"
+
+#~ msgid "Contact Information"
+#~ msgstr "Contactinformatie"
+
+#~ msgid "Contact has been removed"
+#~ msgstr "Het contact is verwijderd."
+
+#~ msgid "Subject: %s"
+#~ msgstr "Onderwerp: %s"
+
+#~ msgid "Suggestions for the word"
+#~ msgstr "Suggesties voor dit woord"
+
+#~ msgid "New subscription request from %s"
+#~ msgstr "Nieuw inschrijvingsverzoek van %s"
+
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "Wilt u deze persoon aan de contactlijst toevoegen?"
+
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "Wilt u %s aan de contactlijst toevoegen?"
+
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Geef uw wachtwoord voor account ‘%s’:"
+
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "Inloggen met account ‘%s’"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Wachtwoord onthouden?"
+
+#~ msgid "Do not show this again"
+#~ msgstr "Niet opnieuw tonen"
+
+#~ msgid "Could not display the help contents."
+#~ msgstr "De hulptekst kan niet worden weergegeven."
+
+#~ msgid "Select Your Avatar Image"
+#~ msgstr "Kies uw gebruikersafbeelding"
+
+#~ msgid "No Image"
+#~ msgstr "Geen afbeelding"
+
+#~ msgid "Cancel"
+#~ msgstr "Annuleren"
+
+#~ msgid "OK"
+#~ msgstr "OK"
+
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "De server lijkt niet te reageren."
+
+#~ msgid "Try again later."
+#~ msgstr "Probeer het later opnieuw."
+
+#~ msgid "Change"
+#~ msgstr "Wijzigen"
+
+#~ msgid "Contact goes offline"
+#~ msgstr "Contact gaat offline"
+
+#~ msgid "Contact goes online"
+#~ msgstr "Contact komt online"
+
+#~ msgid "Contact ID:"
+#~ msgstr "Contact ID:"
+
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Wilt u dit bestand accepteren?"
+
+#~ msgid "File Transfer Request"
+#~ msgstr "Aanvraag bestandsoverdracht"
+
+#~ msgid "File name:"
+#~ msgstr "Bestandsnaam:"
+
+#~ msgid "File size:"
+#~ msgstr "Bestandsgrootte:"
+
+#~ msgid "Not supported yet"
+#~ msgstr "Nog niet ondersteund"
+
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "Deze persoon wil u dit bestand toe sturen:"
+
+#~ msgid "Web site:"
+#~ msgstr "Website:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Accepteren"
+
+#~ msgid "_Deny"
+#~ msgstr "_Weigeren"
+
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Onderwerp:</b>"
+
+#~ msgid "Account:"
+#~ msgstr "Account:"
+
+#~ msgid "Browse:"
+#~ msgstr "Bladeren:"
+
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Bladwijzer bewerken"
+
+#~ msgid ""
+#~ "Enter the room name to join here or click on one or more rooms in the "
+#~ "list."
+#~ msgstr ""
+#~ "Vul hier de naam van de chatruimte in of kies een chatruimte uit de lijst."
+
+#~ msgid "Group Chat"
+#~ msgstr "Chatten"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#~ msgid "Join New"
+#~ msgstr "Nieuw groepsgesprek"
+
+#~ msgid "Join room on start_up"
+#~ msgstr "Chatruimte binnengaan bij _opstarten"
+
+#~ msgid "Join this chat room when Gossip starts and you are connected"
+#~ msgstr "Deze chatruimte binnengaan als Gossip start en u verbonden bent"
+
+#~ msgid "Manage Favorite Rooms"
+#~ msgstr "Bladwijzers beheren…"
+
+#~ msgid "N_ame:"
+#~ msgstr "_Naam:"
+
+#~ msgid "Re_fresh"
+#~ msgstr "Ver_versen"
+
+#~ msgid "S_erver:"
+#~ msgstr "S_erver:"
+
+#~ msgid ""
+#~ "This list represents all chat rooms hosted on the server you have entered."
+#~ msgstr ""
+#~ "Deze lijst toont alle chatruimtes op de server waarmee u verbonden bent."
+
+#~ msgid "_Nickname:"
+#~ msgstr "_Bijnaam:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Ruimte:"
+
+#~ msgid "-"
+#~ msgstr "-"
+
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Over</b>"
+
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "<b>Clientinformatie</b>"
+
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Groepen</b>"
+
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>Naam</b>"
+
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Persoonlijke details</b>"
+
+#~ msgid "<b>Status</b>"
+#~ msgstr "<b>Status</b>"
+
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>Inschrijving</b>"
+
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr ""
+#~ "<span size=\"smaller\">Voorbeeld: Wouter of gebruiker@server.org</span>"
+
+#~ msgid "Accou_nt:"
+#~ msgstr "Accou_nt:"
+
+#~ msgid "Add Contact"
+#~ msgstr "Contact toevoegen"
+
+#~ msgid "Alia_s:"
+#~ msgstr "Alia_s:"
+
+# hier geen 'gebruikersafbeelding', want dat is te groot (Wouter Bolsterlee)
+#~ msgid "Avatar:"
+#~ msgstr "Afbeelding:"
+
+#~ msgid "Birthday:"
+#~ msgstr "Verjaardag:"
+
+#~ msgid "C_hange"
+#~ msgstr "_Wijzigen"
+
+#~ msgid "Ch_at"
+#~ msgstr "Ch_atten"
+
+#~ msgid "Client:"
+#~ msgstr "Client:"
+
+#~ msgid "Con_tact:"
+#~ msgstr "Con_tact"
+
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Verbinden bij ops_tarten"
+
+#~ msgid "Contacts"
+#~ msgstr "Contacten"
+
+#~ msgid "Country:"
+#~ msgstr "Land:"
+
+#~ msgid "Decide _Later"
+#~ msgstr "_Later besluiten"
+
+#~ msgid "Edit Contact"
+#~ msgstr "Contact bewerken"
+
+#~ msgid "Edit Groups"
+#~ msgstr "Groepen bewerken"
+
+#~ msgid "Email:"
+#~ msgstr "E-mail:"
+
+#~ msgid "ID:"
+#~ msgstr "ID:"
+
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr ""
+#~ "Als u later wilt besluiten, wordt u bij de volgende keer inloggen opnieuw "
+#~ "gevraagd."
+
+#~ msgid "Name:"
+#~ msgstr "Naam:"
+
+#~ msgid "OS:"
+#~ msgstr "OS:"
+
+#~ msgid "Personal Details"
+#~ msgstr "Persoonlijke details"
+
+#~ msgid "R_egister"
+#~ msgstr "R_egistreren"
+
+#~ msgid "Search"
+#~ msgstr "Zoeken"
+
+#~ msgid ""
+#~ "Select the groups you want this contact to appear in, you can select more "
+#~ "than one group or no groups."
+#~ msgstr ""
+#~ "Selecteer de groepen waar u dit contact in wilt plaatsen. U kunt meerdere "
+#~ "of zelfs geen groepen kiezen."
+
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Geef de bijnaam die u wilt gebruiken voor\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "Contactinformatie kan van de server opgevraagd worden."
+
+#~ msgid "Spell Checker"
+#~ msgstr "Spellingchecker"
+
+#~ msgid "Subscription Request"
+#~ msgstr "Inschrijvingsverzoek"
+
+#~ msgid "Suggestions for the word:"
+#~ msgstr "Suggesties voor dit woord:"
+
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "Dit werkt als een filter voor de contactlijst hieronder. U kunt delen van "
+#~ "de naam of het ID van een contact invullen. Voorbeeld: ‘jabber.org’ toont "
+#~ "iedereen op die server."
+
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr ""
+#~ "Dit is de naam die voor dit contact getoond wordt in uw contactlijst"
+
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr ""
+#~ "Deze naam zal worden gebruikt om u mee te identificeren in chatvensters"
+
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr ""
+#~ "Deze naam zal worden gebruikt om u mee te identificeren als nieuwe "
+#~ "contacten uw gegevens opvragen"
+
+# Vrij vertaald (Wouter Bolsterlee)
+#~ msgid "Use default name here from the contact's VCard."
+#~ msgstr "Gebruik de naam van de VCard van het contact."
+
+#~ msgid "Use system pro_xy"
+#~ msgstr "Systeempro_xy gebruiken"
+
+#~ msgid "Version:"
+#~ msgstr "Versie:"
+
+#~ msgid "View Previous Conversations"
+#~ msgstr "Vorige gesprekken tonen"
+
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Welk account wilt u gebruiken?"
+
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "U bent niet ingeschreven voor dit contact."
+
+#~ msgid "_Birthday:"
+#~ msgstr "_Verjaardag:"
+
+#~ msgid "_Connect"
+#~ msgstr "_Verbinden"
+
+#~ msgid "_Description:"
+#~ msgstr "_Beschrijving:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "Verbinding ver_breken"
+
+#~ msgid "_Email:"
+#~ msgstr "_E-mail:"
+
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr "_Vul de naam of het adres in van de persoon met wie u wilt chatten:"
+
+#~ msgid "_For:"
+#~ msgstr "_Voor:"
+
+#~ msgid "_Full Name:"
+#~ msgstr "_Volledige naam:"
+
+#~ msgid "_Group:"
+#~ msgstr "_Groep:"
+
+#~ msgid "_Nick Name:"
+#~ msgstr "_Bijnaam:"
+
+#~ msgid "_Password:"
+#~ msgstr "_Wachtwoord:"
+
+#~ msgid "_Quit Message:"
+#~ msgstr "Bericht bij afsl_uiten:"
+
+#~ msgid "_Retrieve"
+#~ msgstr "Op_vragen"
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Inschrijven"
+
+#~ msgid "_Web site:"
+#~ msgstr "_Website:"
+
+#~ msgid "irc account settings"
+#~ msgstr "irc-accountgegevens"
+
+#~ msgid "msn account settings"
+#~ msgstr "msn-accountgegevens"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+# Hehe, egotripperij ;)
+#~ msgid "Martyn Russell"
+#~ msgstr "Wouter Bolsterlee"
+
+# De naam hieronder wordt nergens getoond, maar is toch leuk om te vertalen...
+# (Wouter Bolsterlee)
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>martyn@imendio.com</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Geef de bijnaam die u wilt gebruiken voor\n"
+#~ "<b>uws@jabber.xs4all.nl</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+
+#~ msgid "_Forget"
+#~ msgstr "_Vergeten"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Group:"
+#~ msgstr "Groep:"
+
+#~ msgid "Nickname:"
+#~ msgstr "Bijnaam:"
+
+#~ msgid "Web Site:"
+#~ msgstr "Website:"
+
+# hmmmm (Wouter Bolsterlee)
+#~ msgid "Favourite"
+#~ msgstr "Bladwijzer"
+
+#~ msgid "Add to _favourites"
+#~ msgstr "Aan _bladwijzers toevoegen"
+
+#~ msgid ""
+#~ "Customize your own nickname, the server and chatroom which you wish to "
+#~ "join."
+#~ msgstr ""
+#~ "Bewerk uw bijnaam, de server en de chatruimte waar u wilt binnengaan."
+
+#~ msgid "Edit your chat room details:"
+#~ msgstr "Bewerkt de gegevens van de chatruimte:"
+
+#~ msgid "Na_me:"
+#~ msgstr "Naa_m:"
+
+#~ msgid "New Chat Room"
+#~ msgstr "Nieuwe chatruimte"
+
+#~ msgid ""
+#~ "Pick a saved chat room from the presets available below and click Join to "
+#~ "start chatting."
+#~ msgstr ""
+#~ "Kies een opgeslagen chatruimte uit de onderstaande lijst en ga de ruimte "
+#~ "binnen om te chatten."
+
+#~ msgid "Save _this chat room"
+#~ msgstr "Deze chatruimte op_slaan"
+
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr "Kies ‘Inschrijven’ als u om statusberichten wilt vragen"
+
+#~ msgid "_Group Chat"
+#~ msgstr "_Groepsgesprek"
+
+#~ msgid "You have no Instant Messaging accounts configured!"
+#~ msgstr "Er zijn geen chat-accounts ingesteld!"
+
+#~ msgid ""
+#~ "Next you will be presented with the Account Information dialog to set "
+#~ "your details up."
+#~ msgstr ""
+#~ "De volgende stap is het invullen van uw accountgegevens in het "
+#~ "accountvenster."
+
+#~ msgid "Registering account"
+#~ msgstr "Bezig met registreren account"
+
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Voorbeeld:</span>"
+
+#~ msgid "Account Name"
+#~ msgstr "Accountnaam"
+
+#~ msgid "Connection Details"
+#~ msgstr "Verbindingsgegevens"
+
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Heeft u al een account op een Jabber-server?"
+
+#~ msgid "Enter a name for this account"
+#~ msgstr "Geef een naam voor dit account"
+
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr "Vul de poort die gebruikt wordt voor het verbinden met dit account"
+
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr "Vul de server die gebruikt wordt voor het verbinden met dit account"
+
+#~ msgid "Enter your real name here"
+#~ msgstr "Vul hier uw echte naam in"
+
+#~ msgid "Finished"
+#~ msgstr "Voltooid"
+
+#~ msgid "For increased security, enable this option"
+#~ msgstr "Schakel deze optie in voor een betere beveiling"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip is een moderne client voor het Jabber Instant Messaging-systeem.\n"
+#~ "\n"
+#~ "Deze assistent zal u helpen bij het instellen van Gossip en zal u met uw "
+#~ "favoriete Jabber-server verbinden.\n"
+#~ "\n"
+#~ "Klik om te beginnen op ‘Verder’."
+
+#~ msgid ""
+#~ "If you have another machine on your network which 'proxies' the "
+#~ "connection to the internet and you want to use it, enable this option"
+#~ msgstr ""
+#~ "Als u een andere machine op uw netwerk heeft die als ‘proxy’ fungeert "
+#~ "naar het internet, kies dan deze optie om deze ‘proxy’ te gebruiken"
+
+#~ msgid ""
+#~ "If you need to set specific connection details, like a different server "
+#~ "or port, you can configure that here:"
+#~ msgstr ""
+#~ "Als u specifieke connectiegegevens in wilt vullen, zoals bijvoorbeeld een "
+#~ "verschillende server of poort, kunt u dat hier instellen."
+
+#~ msgid ""
+#~ "Leave this blank if you don't want your password stored on a public "
+#~ "machine. If you decide to do this, you will be prompted each time you "
+#~ "connect for a password"
+#~ msgstr ""
+#~ "U kunt dit leeglaten als u niet wilt dat uw wachtwoord op een gedeelde "
+#~ "computer opgeslagen wordt. U wordt dan wel iedere keer om uw wachtwoord "
+#~ "gevraagd bij het maken van een verbinding."
+
+#~ msgid "Port:"
+#~ msgstr "Poort:"
+
+#~ msgid "Registering Account"
+#~ msgstr "Bezig met accountregistratie"
+
+#~ msgid "Resource:"
+#~ msgstr "Bron:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Welkom bij Gossip"
+
+#~ msgid "What is your name?"
+#~ msgstr "Wat is uw naam?"
+
+#~ msgid ""
+#~ "What name do you want to use to identify this account?\n"
+#~ "\n"
+#~ "This name could be something associated with the service provider, for "
+#~ "example, <b>Google</b>."
+#~ msgstr ""
+#~ "Welke naam wilt u gebruiken voor dit account?\n"
+#~ "\n"
+#~ "U kunt bijvoorbeeld de naam van de provider hiervoor gebruiken. "
+#~ "Voorbeeld: <b>Google</b>"
+
+#~ msgid "What password do you want to use?"
+#~ msgstr "Welk wachtwoord wilt u gebruiken?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Wat is uw gebruikersnaam?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Welke gebruikersnaam wilt u gebruiken?"
+
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "De accountgegevens kunnen later gewijzigd worden via ‘Accounts’ in het "
+#~ "menu ‘Bewerken’."
+
+#~ msgid ""
+#~ "You need to set a name for the connection, for example, <b>Home</b> or "
+#~ "<b>Laptop</b>."
+#~ msgstr ""
+#~ "Ieder account heeft een eigen naam, bijvoorbeeld <b>Thuis</b> of "
+#~ "<b>Kantoor</b>. Kies een naam voor dit account:"
+
+#~ msgid "Your Account"
+#~ msgstr "Uw account"
+
+#~ msgid "Your Identity"
+#~ msgstr "Uw identiteit"
+
+#~ msgid "Your new account has now been set up."
+#~ msgstr "Uw nieuwe account is gereed."
+
+#~ msgid "_No"
+#~ msgstr "_Nee"
+
+#~ msgid "_Yes"
+#~ msgstr "_Ja"
diff --git a/trunk/po/oc.po b/trunk/po/oc.po
new file mode 100644
index 000000000..b41bc8568
--- /dev/null
+++ b/trunk/po/oc.po
@@ -0,0 +1,1664 @@
+# Translation of oc.po to Occitan
+# Occitan translation of empathy.
+# Copyright (C) 2003-2007 The Free Software Foundation, Inc.
+# This file is distributed under the same license as the empathy package.
+#
+# Yannig Marchegay (Kokoyaya) <yannig@marchegay.org>, 2006-2008
+msgid ""
+msgstr ""
+"Project-Id-Version: oc\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-02-19 20:18+0100\n"
+"PO-Revision-Date: 2008-02-20 00:12+0100\n"
+"Last-Translator: Yannig Marchegay (Kokoyaya) <yannig@marchegay.org>\n"
+"Language-Team: Occitan <ubuntu-l10n-oci@lists.ubuntu.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr ""
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically login to your accounts on "
+"startup."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first empathy run."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:149
+msgid "People nearby"
+msgstr ""
+
+#: ../libempathy/empathy-utils.c:539
+msgid "Available"
+msgstr "Disponible"
+
+#: ../libempathy/empathy-utils.c:541
+msgid "Busy"
+msgstr "Ocupat"
+
+#: ../libempathy/empathy-utils.c:544
+msgid "Away"
+msgstr "Absent(a)"
+
+#: ../libempathy/empathy-utils.c:546
+msgid "Hidden"
+msgstr "Amagat"
+
+#: ../libempathy/empathy-utils.c:549
+msgid "Offline"
+msgstr "Desconnectat"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr "Yannig Marchegay (Kokoyaya) <yannig@marchegay.org>"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "Totes"
+
+#: ../libempathy-gtk/empathy-account-widget.c:276
+#: ../libempathy-gtk/empathy-account-widget.c:321
+#, c-format
+msgid "%s:"
+msgstr "%s :"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Avançat</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+msgid "Pass_word:"
+msgstr "_Mot de pas"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+#
+msgid "Pri_ority:"
+msgstr "_Prioritat :"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+msgid "_Port:"
+msgstr "_Pòrt :"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Servidor :"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:13
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Escais :"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:225
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:229
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:236
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:243
+msgid "<b>No Accounts Configured</b>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:403
+#
+msgid "Enabled"
+msgstr "Activat"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:413
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Comptes"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:896
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:902
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Compte novèl</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Paramètres</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "Cr_ear"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Tipe :"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:449
+msgid "Select Your Avatar Image"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:452
+msgid "No Image"
+msgstr "Pas cap d'imatge"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:512
+msgid "Images"
+msgstr "Imatges"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:516
+msgid "All Files"
+msgstr "Totes los fichièrs"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+msgid "End Call"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "Entrada"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "Mut"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "Sortida"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Start Call"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:7
+msgid "Volume"
+msgstr "Volum"
+
+#: ../libempathy-gtk/empathy-chat.c:445
+msgid "Disconnected"
+msgstr "Desconnectat"
+
+#: ../libempathy-gtk/empathy-chat.c:580
+msgid "offline"
+msgstr "desconnectat"
+
+#: ../libempathy-gtk/empathy-chat.c:583
+msgid "invalid contact"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:586
+msgid "permission denied"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:589
+msgid "too long message"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:592
+msgid "not implemented"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:595
+msgid "unknown"
+msgstr "desconegut"
+
+#: ../libempathy-gtk/empathy-chat.c:599
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:1056
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:1103
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.c:1558
+msgid "Connected"
+msgstr "Connectat"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Suprimir"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+msgid "Chat"
+msgstr "Chad"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "Cu_t"
+msgstr "_Copar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "In_vite..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invitation _message:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+msgid "Invite"
+msgstr "Convidar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Left"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Move Tab _Right"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "_Apondre un contacte..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Add To Favorites"
+msgstr "_Apondre als favorits"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Close"
+msgstr "_Tampar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Ensenhador"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Conversation"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+msgid "_Copy"
+msgstr "_Copiar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Detach Tab"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "_Edicion"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "_Ajuda"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Next Tab"
+msgstr "Onglet _seguent"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Paste"
+msgstr "_Pegar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Previous Tab"
+msgstr "Onglet _precedent"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "_Sala"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+msgid "_Show Contacts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat.glade.h:30
+msgid "_Tabs"
+msgstr "_Onglets"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:31
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Copy Link Address"
+msgstr "_Copiar l'adreça del ligam"
+
+#: ../libempathy-gtk/empathy-chat-view.c:449
+msgid "_Open Link"
+msgstr "_Dobrir lo ligam"
+
+#: ../libempathy-gtk/empathy-chat-window.c:699
+#, c-format
+msgid "Conversations (%d)"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chat-window.c:1299
+msgid "Typing a message."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "Nom"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "Sala"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+msgid "Account:"
+msgstr "Compte :"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Nom :"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "S_ervidor :"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Sala :"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:176
+msgid "Personal Information"
+msgstr "Entresenhas personalas"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+msgid "Edit Contact Information"
+msgstr "Modificar las entresenhas personalas"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:182
+msgid "Contact Information"
+msgstr "Entresenhas sul contacte"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:277
+msgid "I would like to add you to my contact list."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:301
+msgid "New Contact"
+msgstr "Contacte novèl"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:197
+msgid "_Contact"
+msgstr "_Contacte"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:201
+msgid "_Group"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+msgid "Chat with contact"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "Infor_mation"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "View contact information"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Re_name"
+msgstr "Re_nommar"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Rename"
+msgstr "Renommar"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+msgid "Edit the groups and name for this contact"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "_Remove"
+msgstr "_Suprimir"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "Remove contact"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "_Invite to Chat Room"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "_Send File..."
+msgstr "_Enviar lo fichièr..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "Send a file"
+msgstr "Enviar un fichièr"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+msgid "View previous conversations with this contact"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "_Call"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "Start a voice or video conversation with this contact"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1469
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.c:688
+msgid "Select"
+msgstr "Seleccionar"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:698
+#: ../libempathy-gtk/empathy-main-window.c:609
+msgid "Group"
+msgstr "Grop"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Grops</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Aliàs :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Aniversari :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Client :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Entresenhas del contacte"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "Adreça electronica :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Version :"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "Sit web :"
+
+#: ../libempathy-gtk/empathy-group-chat.c:251
+msgid "Enter the new topic you want to set for this room:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-group-chat.c:361
+#, c-format
+msgid "%s has joined the room"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-group-chat.c:364
+#, c-format
+msgid "%s has left the room"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-group-chat.c:445
+#, c-format
+msgid "Topic: %s"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-group-chat.c:574
+#, c-format
+msgid "Topic set to: %s"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-group-chat.c:576
+msgid "No topic defined"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-log-window.c:499
+msgid "Account"
+msgstr "Compte"
+
+#: ../libempathy-gtk/empathy-log-window.c:506
+msgid "Conversation"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-log-window.c:516
+msgid "Date"
+msgstr "Data"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "Recercar"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "Ac_tualizar"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:266
+msgid "Show and edit accounts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:630
+msgid "Contact"
+msgstr "Contacte"
+
+#: ../libempathy-gtk/empathy-main-window.c:813
+#
+msgid "_Edit account"
+msgstr "_Modificar lo compte"
+
+#: ../libempathy-gtk/empathy-main-window.c:896
+msgid "Network error"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "L'autentificacion a abocat"
+
+#: ../libempathy-gtk/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:905
+msgid "Name in use"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:926
+msgid "Certificate self signed"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "Error desconeguda"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Tièra de contactes"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Contèxte"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Gerir los favorits"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_A prepaus"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Comptes"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "Entresenhas _personalas"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "_Preferéncias"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Sortir"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "Contacte"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+#
+msgid "New Conversation"
+msgstr "Contacte novèl"
+
+#: ../libempathy-gtk/empathy-preferences.c:247
+msgid "Language"
+msgstr "Lenga"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Aparéncia</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Compòrtament</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Tièra de contactes</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Opcions</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Automatically _connect on startup "
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Chat Th_eme:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _away"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "Enable sounds when _busy"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "General"
+msgstr "General"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Notifications"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Preferences"
+msgstr "Preferéncias"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show _smileys as images"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Show co_mpact contact list"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "Themes"
+msgstr "Tèmas"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr ""
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Messatges personalizats..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Messatge personalizat"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Messatge :"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Enregistrar lo messatge"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Estat :"
+
+#: ../libempathy-gtk/empathy-private-chat.c:229
+#, c-format
+msgid "%s went offline"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-private-chat.c:243
+#, c-format
+msgid "%s has come online"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "Mot"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-status-icon.c:354
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-status-icon.c:625
+#, c-format
+msgid "Subscription requested by %s"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-status-icon.c:628
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Messatge : %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Estatut"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:780
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:78
+msgid "Classic"
+msgstr "Classic"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:79
+msgid "Simple"
+msgstr "Simple"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:80
+msgid "Clean"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-theme-manager.c:81
+msgid "Blue"
+msgstr "Blau"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr "Ret novèla"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+#
+msgid "<b>Network</b>"
+msgstr "<b>Ret</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+#
+msgid "<b>Servers</b>"
+msgstr "<b>Servidors</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+#
+msgid "Charset:"
+msgstr "Chad"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Ret"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Ret"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+#
+msgid "Nickname:"
+msgstr "Escais :"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+#
+msgid "Password:"
+msgstr "Mot de pas :"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+#
+msgid "Quit message:"
+msgstr "Messatge de sortida :"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+#
+msgid "Real name:"
+msgstr "Vertadièr nom :"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:13
+msgid "irc account settings"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+msgid "new server"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:512
+#
+msgid "Server"
+msgstr "Servidor"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:527
+#
+msgid "Port"
+msgstr "Pòrt"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:540
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr ""
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Arab"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Armenian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Baltic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+#
+msgid "Celtic"
+msgstr "Celtic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "European central"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Chinés simplificat"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Chinés tradicional"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Croat"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Cirillic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Cirillic/Rus"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Cirillic/Ucraïnian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Georgian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Grèc"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Gujarati"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Ebrèu"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Ebrèu visual"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Indi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Islandés"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Japonés"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Corean"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+#
+msgid "Nordic"
+msgstr "Nordic"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+#
+msgid "Persian"
+msgstr "Persian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Romanian"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "European del Sud"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Tailandés"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Turc"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+#
+msgid "Western"
+msgstr "Occidental"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+#
+msgid "Vietnamese"
+msgstr "Vietnamés"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr ""
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr ""
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr ""
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Entresenhas"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Preséncia"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr ""
+
+#: ../src/empathy.c:205
+msgid "- Empathy Instant Messenger"
+msgstr ""
+
+#~ msgid "New message"
+#~ msgstr "Messatge novèl"
+
+#~ msgid "Disable"
+#~ msgstr "Desactivar"
+
+#~ msgid "gtk-cancel"
+#~ msgstr "gtk-cancel"
+
+#~ msgid "gtk-ok"
+#~ msgstr "gtk-ok"
diff --git a/trunk/po/pl.po b/trunk/po/pl.po
new file mode 100644
index 000000000..7ccb47129
--- /dev/null
+++ b/trunk/po/pl.po
@@ -0,0 +1,2208 @@
+# Copyright (C) 2003-2004 Free Software Foundation, Inc.
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+# Aktualną wersję tego pliku możesz odnaleźć w repozytorium cvs.gnome.pl
+# (:pserver:anonymous@cvs.gnome.pl:/gnomepl, puste hasło)
+# Jeśli masz jakiekolwiek uwagi odnoszące się do tłumaczenia lub chcesz
+# pomóc w jego rozwijaniu i pielęgnowaniu, napisz do nas na adres:
+# translators@gnome.pl
+# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+msgid ""
+msgstr ""
+"Project-Id-Version: Empathy\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-08-19 14:56+0200\n"
+"PO-Revision-Date: 2007-08-10 21:38+0100\n"
+"Last-Translator: Tomasz Dominikowski <dominikowski@gmail.com>\n"
+"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Komunikator internetowy Empathy"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Wysyłanie i odbieranie wiadomości tekstowych"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Zawsze otwieraj osobne okna rozmów dla nowych rozmów."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "Motyw okna rozmów"
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Oddzielana przecinkami lista języków sprawdzania pisowni (np. en, fr, nl, "
+"pl)."
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Compact contact list"
+msgstr "Zmniejszona lista kontaktów"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr "Kryterium sortowania listy kontaktów"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr "Domyślny katalog, z którego są wybierane awatary"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr "Włączenie powiadamiania, gdy kontakt staje się dostępny"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr "Włącz_enie dźwięku przy stanie nieobecności"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr "Włączenie dźwięku przy stanie z_ajętości"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable spell checker"
+msgstr "Włączenie sprawdzania pisowni"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Ukrycie głównego okna"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Ukrycie głównego okna."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr "Otwieranie nowych rozmów w osobnych oknach"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr "Wyświetlanie awatarów"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show hint about closing the main window"
+msgstr "Wyświetlanie podpowiedzi o zamknięciu głównego okna"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Wyświetlanie rozłączonych kontaktów"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr "Języki sprawdzania pisowni"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Ostatni katalog, z którego był wybierany awatar."
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Motyw używany do wyświetlania konwersacji w oknach rozmowy."
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Używanie emotikonów"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Odgrywanie dźwięków powiadomień"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr "Używanie motywów dla pokojów rozmów"
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Określa, czy sprawdzać słowa wprowadzane w językach, w których zostało to "
+"określone. "
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Określa czy uśmieszki w rozmowach będą konwertowane do postaci graficzniej."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Określa czy dźwięki przy nadejściu wiadmości będą odtwarzane."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Określa czy dźwięki przy stanie nieobecności."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Określa czy dźwięki przy stanie zajętości."
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+"Określa, czy wyświetlać powiadomienie, gdy kontakty stają się dostępne."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Określa, czy należy wyświetlać awatary dla kontaktów na liście i oknach "
+"rozmów."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Określa czy należy wyświetlać kontakty nie będące w sieci na liście."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Określa, czy wyświetlać okno dialogowe podczas zamykania głównego okna "
+"przyciskiem \"x\" na pasku tytułowym."
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Określa, czy należy wyświetlać listę kontaktów w trybie zmniejszonym."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Określa, czy używać motywów dla pokoi rozmów."
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Określa, jakie kryterium używać podczas sortowania listy kontaktów. "
+"Domyślnie jest używane sortowanie wg nazwy kontaktów, wartość \"name\". "
+"Wartość \"state\" spowoduje sortowanie wg stanu kontaktu."
+
+#: ../libempathy/empathy-presence.c:185 ../libempathy/empathy-presence.c:285
+msgid "Offline"
+msgstr "Rozłączony"
+
+#: ../libempathy/empathy-presence.c:275
+msgid "Available"
+msgstr "Dostępny"
+
+#: ../libempathy/empathy-presence.c:277
+msgid "Busy"
+msgstr "Zajęty"
+
+#: ../libempathy/empathy-presence.c:280
+msgid "Away"
+msgstr "Nieobecny"
+
+#: ../libempathy/empathy-presence.c:282
+msgid "Hidden"
+msgstr "Ukryty"
+
+#: ../libempathy/empathy-tp-contact-list.c:354
+msgid "People nearby"
+msgstr "Ludzie w pobliżu"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Empathy jest oprogramowaniem wolnodostępnym; możesz go rozprowadzać dalej i/"
+"lub modyfikować na warunkach Powszechnej Licencji Publicznej GNU, wydanej "
+"przez Fundację Wolnodostępnego Oprogramowania - według wersji 2 tej "
+"Licencji lub którejś z późniejszych wersji. "
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Empathy jest rozpowszechniany z nadzieją, iż będzie on użyteczny - jednak "
+"BEZ JAKIEJKOLWIEK GWARANCJI, nawet domyślnej gwarancji PRZYDATNOŚCI "
+"HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. W celu uzyskania "
+"bliższych informacji - Powszechna Licencja Publiczna GNU. "
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Z pewnością wraz z niniejszym programem otrzymałeś też egzemplarz "
+"Powszechnej Licencji Publicznej GNU; jeśli nie - napisz do Free Software "
+"Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 "
+"USA"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Komunikator internetowy dla GNOME"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"GNOME PL Team <translators@gnome.pl>\n"
+"Tomasz Dominikowski <dominikowski@gmail.com>"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:336
+msgid "All"
+msgstr "Wszystkie"
+
+#: ../libempathy-gtk/empathy-account-widget-generic.c:146
+#: ../libempathy-gtk/empathy-account-widget-generic.c:208
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Zaawansowane</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Zapomnij hasło i wyczyść pole."
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+msgid "Login I_D:"
+msgstr "I_dentyfikator logowania:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+msgid "Pass_word:"
+msgstr "_Hasło:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr "_Zasób:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Use encryption (SS_L)"
+msgstr "Używanie szyfrowania (SS_L)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+msgid "_Port:"
+msgstr "_Port:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Serwer:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr "Ustawienia konta Jabber"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "ustawienia konta msn"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:217
+msgid "Disable"
+msgstr "Wyłącz"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:220
+msgid "Enable"
+msgstr "Włącz"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:254
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Nie zaznaczono żadnego konta</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:256
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Aby dodać nowe konto możesz kliknąć przycisk \"Dodaj\", a zostanie utworzony "
+"nowy wpis, który można skonfigurować.\n"
+"\n"
+"Jeśli nie chcesz dodać konta, kliknij na konto, które chcesz skonfigurować "
+"na liście po lewej stronie."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:265
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Brak skonfigurowanych kont</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:267
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Aby dodać nowe konto możesz kliknąć przycisk \"Dodaj\", a zostanie utworzony "
+"nowy wpis, który można skonfigurować."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:389
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Konta"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:893
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Zamierzasz usunąć konto %s!\n"
+"Czy jesteś tego pewien?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:899
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Wszystkie związane z tym kontem rozmowy i pokoje rozmów NIE zostaną "
+"usunięte, jeśli będziesz kontynuować.\n"
+"\n"
+"Jeśli zdecydujesz się na ponowne dodanie tego konta, znowu staną się "
+"dostępne."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Nowe konto</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Ustawienia</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "_Utwórz"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Aby dodać nowe konto możesz kliknąć przycisk \"Dodaj\", a zostanie utworzony "
+"nowy wpis, który można skonfigurować.\n"
+"\n"
+"Jeśli nie chcesz dodać konta, kliknij na konto, które chcesz skonfigurować "
+"na liście po lewej stronie."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Typ:"
+
+#: ../libempathy-gtk/empathy-chat.c:335
+msgid "Disconnected"
+msgstr "Rozłączony"
+
+#: ../libempathy-gtk/empathy-chat.c:450
+msgid "offline"
+msgstr "rozłączony"
+
+#: ../libempathy-gtk/empathy-chat.c:453
+msgid "invalid contact"
+msgstr "niepoprawny kontakt"
+
+#: ../libempathy-gtk/empathy-chat.c:456
+msgid "permission denied"
+msgstr "dostęp zabroniony"
+
+#: ../libempathy-gtk/empathy-chat.c:459
+msgid "too long message"
+msgstr "zbyt długa wiadomość"
+
+#: ../libempathy-gtk/empathy-chat.c:462
+msgid "not implemented"
+msgstr "niezaimplementowane"
+
+#: ../libempathy-gtk/empathy-chat.c:465
+msgid "unknown"
+msgstr "nieznany"
+
+#: ../libempathy-gtk/empathy-chat.c:469
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Błąd podczas wysyłania wiadomości \"%s\": %s"
+
+#: ../libempathy-gtk/empathy-chat.c:924
+msgid "Insert Smiley"
+msgstr "Wstaw uśmieszek"
+
+#: ../libempathy-gtk/empathy-chat.c:972
+msgid "_Check Word Spelling..."
+msgstr "_Sprawdź pisownię..."
+
+#: ../libempathy-gtk/empathy-chat.c:1397
+msgid "Connected"
+msgstr "Połączony"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Wyczyść"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr "Zmień _temat..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Chat"
+msgstr "Czat"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr "_Informacje o kontakcie"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Cu_t"
+msgstr "Wy_tnij"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "In_vite..."
+msgstr "Z_aproś..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "Wstaw _uśmieszek"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Invitation _message:"
+msgstr "Treść _zaproszenia:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invite"
+msgstr "Zaproś"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Dołącz do _nowego..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Przenieś zakładkę w _lewo"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Przenieś zakładkę w p_rawo"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr "Wybierz kogo chcesz zaprosić:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "Wysłano tobie zaproszenie do dołączenia do konferencji."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "_Dodaj kontakt..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "Dod_aj do ulubionych"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Close"
+msgstr "_Zamknij"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Rozmowa"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+msgid "_Copy"
+msgstr "_Kopiuj"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Odłącz zakładkę"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+#: ../libempathy-gtk/empathy-contact-list-view.c:216
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "M_odyfikuj"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "_Następna zakładka"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+msgid "_Paste"
+msgstr "_Wklej"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "_Poprzednia zakładka"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "_Pokój"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr "_Wyświetl listę kontaków"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Zakładki"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+#: ../libempathy-gtk/empathy-contact-list-view.c:232
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr "_Wyświetl poprzednie rozmowy"
+
+#: ../libempathy-gtk/empathy-chat-view.c:557
+msgid "_Copy Link Address"
+msgstr "S_kopiuj adres odnośnika"
+
+#: ../libempathy-gtk/empathy-chat-view.c:565
+msgid "_Open Link"
+msgstr "_Otwórz odnośnik"
+
+#: ../libempathy-gtk/empathy-chat-view.c:902
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-chat-window.c:703
+#: ../libempathy-gtk/empathy-chat-window.c:733
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "Nowa wiadomość"
+msgstr[1] "Nowe wiadomości"
+msgstr[2] "Nowe wiadomości"
+
+#: ../libempathy-gtk/empathy-chat-window.c:709
+msgid "Chat Room"
+msgstr "Pokój rozmów"
+
+#: ../libempathy-gtk/empathy-chat-window.c:714
+#: ../libempathy-gtk/empathy-chat-window.c:737
+#: ../libempathy-gtk/empathy-log-window.c:524
+#, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "Rozmowa"
+msgstr[1] "%d rozmowy"
+msgstr[2] "%d rozmów"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1288
+msgid "Typing a message."
+msgstr "Wprowadzanie wiadomości."
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:252
+msgid "Name"
+msgstr "Nazwa"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:270
+msgid "Room"
+msgstr "Pokój"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:279
+msgid "Auto Connect"
+msgstr "Automatyczne łączenie"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Konto:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Modyfikuj ulubiony pokój"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Dołącz do pokoju podczas _uruchomienia programu"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr ""
+"Dołącz do tego pokoju podczas uruchomienia Empathy, gdy jesteś połączony"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Modyfikuj ulubione pokoje"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "N_azwa:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "S_erwer:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Pseudonim"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Pokój"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:173
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Informacje o kontakcie"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:221
+msgid "I would like to add you to my contact list."
+msgstr "Chciałbym Cię dodać do mojej listy kontaktów."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:245
+msgid "New contact"
+msgstr "Nowy kontakt"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Z_decyduj później"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Prośba autoryzacji"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:196
+msgid "_Contact"
+msgstr "_Kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:200
+msgid "_Group"
+msgstr "_Grupa"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:204
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr "_Rozmowa"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:204
+msgid "Chat with contact"
+msgstr "Porozmawiaj z kontaktem"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:208
+msgid "Infor_mation"
+msgstr "Infor_macje"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:208
+msgid "View contact information"
+msgstr "Wyświetl informacje o kontakcie"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:212
+msgid "Re_name"
+msgstr "Zmień _nazwę"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:212
+msgid "Rename"
+msgstr "Zmień nazwę"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:216
+msgid "Edit the groups and name for this contact"
+msgstr "Modyfikuj grupy i nazwę dla tego kontaktu"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:220
+msgid "_Remove"
+msgstr "_Usuń"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:220
+msgid "Remove contact"
+msgstr "Usuń kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:224
+msgid "_Invite to Chat Room"
+msgstr "_Zaproś do pokoju rozmów"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:224
+msgid "Invite to a currently open chat room"
+msgstr "Zaproś do bieżącego pokoju rozmów"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:228
+msgid "_Send File..."
+msgstr "_Wyślij plik..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:228
+msgid "Send a file"
+msgstr "Wyślij plik"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:232
+msgid "View previous conversations with this contact"
+msgstr "Wyświetl poprzednie rozmowy z tym kontaktem"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1488
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Przepraszam, ale już nie chcę Cię na mojej liście kontaktów."
+
+#: ../libempathy-gtk/empathy-contact-widget.c:627
+msgid "Select"
+msgstr "Wybierz"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:637
+#: ../libempathy-gtk/empathy-main-window.c:613
+msgid "Group"
+msgstr "Grupa"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Informacje o kliencie</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Szczegóły kontaktu</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Kontakt</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Grupy</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Alias:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Urodziny:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Klient:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "E-mail:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Pełna nazwa:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "Identyfikator:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "Żądanie informacji..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "System:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Wybierz grupy, w których ma się pojawić ten kontakt, można wybrać więcej niż "
+"jedną grupę lub żadną."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Wersja:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "Strona WWW:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:252
+msgid "Enter the new topic you want to set for this room:"
+msgstr "Wprowadź nowy temat dla tego pokoju:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:360
+#, c-format
+msgid "%s has joined the room"
+msgstr "Użytkownik %s dołączył do pokoju"
+
+#: ../libempathy-gtk/empathy-group-chat.c:376
+#, c-format
+msgid "%s has left the room"
+msgstr "Użytkownik %s opuścił pokój"
+
+#: ../libempathy-gtk/empathy-group-chat.c:455
+#, c-format
+msgid "Topic: %s"
+msgstr "Temat: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:578
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Temat ustawiony na: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:580
+msgid "No topic defined"
+msgstr "Temat nie został określony"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Temat:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Rozmowa grupowa"
+
+#: ../libempathy-gtk/empathy-log-window.c:517
+msgid "Account"
+msgstr "Konto"
+
+#: ../libempathy-gtk/empathy-log-window.c:534
+msgid "Date"
+msgstr "Data"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "Rozmowy"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Search"
+msgstr "Wyszukiwanie"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "View Previous Conversations"
+msgstr "Wyświetl poprzednie konwersacje"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "_Dla:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "Pokoje rozmów"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Przeglądaj:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Wprowadź nazwę pokoju, do którego chcesz dołączyć lub kliknij jeden lub "
+"więcej pokoi na liście."
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Wprowadź serwer obsługujący pokój lub pozostaw puste, jeśli pokój znajduje "
+"się na tym samym serwerze co bieżące konto"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Dołącz"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Dołącz do nowego"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "_Odśwież"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"Ta lista przedstawia wszystkie pokoje rozmów utrzymywane na tym serwerze."
+
+#: ../libempathy-gtk/empathy-main-window.c:278
+msgid "Show and edit accounts"
+msgstr "Wyświetl i modyfikuj konta"
+
+#: ../libempathy-gtk/empathy-main-window.c:634
+msgid "Contact"
+msgstr "Kontakt"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact list"
+msgstr "Lista kontaktów"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Kontekst"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Połącz się z _ulubionymi"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr "Modyfikuj ulubione..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Wyświetlanie r_ozłączonych kontaktów"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+msgid "_About"
+msgstr "O _programie"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Konta"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Zawartość"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "Pomo_c"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Nowa wiadomość..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "Informacje o _użytkowniku"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Preferencje"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Zakończ"
+
+#: ../libempathy-gtk/empathy-preferences.c:243
+msgid "Language"
+msgstr "Język"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Wygląd</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Dźwięk</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Zachowanie</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Lista kontaktów</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Sprawdzanie pisowni dla języków:</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Opcje</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Obraz</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>Lista języków odzwierciedla stan faktycznie zainstalowanych słowników."
+"</small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Awatary są obrazkami wybieranymi przez użytkownika, wyświetlanymi na liście "
+"kontaktów"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "Motyw _rozmowy:"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Wyświetlanie powiadomień, gdy kontakty stają się d_ostępne"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Włącz_enie dźwięku przy stanie nieobecności"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Włączenie dźwięku przy stanie z_ajętości"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "Ogólne"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Powiadomienia"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Preferencje"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "Wyświetlanie _awatarów"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Konwertowanie _uśmieszków na obrazki"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "Wyświetlanie z_mniejszonej listy kontaktów"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "Sortuj wg _nazwy"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "Sortuj wg s_tanu"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Sprawdzanie pisowni"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "Motywy"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr "_Otwieranie nowych rozmów w osobnych oknach"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Play sound when messages arrive"
+msgstr "_Odtwarzanie dźwięku po nadejściu wiadomości"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Use for chat rooms"
+msgstr "_Używanie dla pokojów rozmów"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:690
+msgid "Custom messages..."
+msgstr "Własne wiadomości..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Własna wiadomość"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Wiadomość:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Zapisz wiadomość"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Stan:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:185
+#, c-format
+msgid "%s went offline"
+msgstr "Użytkownik %s rozłączył się"
+
+#: ../libempathy-gtk/empathy-private-chat.c:199
+#, c-format
+msgid "%s has come online"
+msgstr "Pojawił się użytkownik %s"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "Słowo"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "Sugestie dla słowa"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Sprawdzanie pisowni"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Sugestie dla słowa"
+
+#: ../libempathy-gtk/empathy-status-icon.c:302
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Nowa wiadomość od %s:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:554
+#, c-format
+msgid ""
+"Subscription requested for %s\n"
+"Message: %s"
+msgstr ""
+"Prośba subskrypcji dla %s\n"
+"Wiadomość: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Stan"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Wyświetl listę kontaków"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:87
+msgid "Classic"
+msgstr "Klasyczny"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:88
+msgid "Simple"
+msgstr "Prosty"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:89
+msgid "Clean"
+msgstr "Wyczyść"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:90
+msgid "Blue"
+msgstr "Niebieski"
+
+#: ../src/empathy.c:165
+msgid "Don't connect on startup"
+msgstr "Bez łączenia przy uruchamianiu"
+
+#: ../src/empathy.c:176
+msgid "- Empathy Instant Messenger"
+msgstr "- Komunikator internetowy Empathy"
+
+#~ msgid "Local Network"
+#~ msgstr "Sieć lokalna"
+
+#~ msgid "<b>Languages</b>"
+#~ msgstr "<b>Języki</b>"
+
+#~ msgid "_Enable spell checking"
+#~ msgstr "_Włączenie sprawdzania pisowni"
+
+#~ msgid "Clear List..."
+#~ msgstr "Wyczyść listę..."
+
+#~ msgid "Are you sure you want to clear the list?"
+#~ msgstr "Czy na pewno wyczyścić listę?"
+
+#~ msgid ""
+#~ "This will remove any custom messages you have added to the list of preset "
+#~ "status messages."
+#~ msgstr ""
+#~ "To usunie wszystkie własne komunikaty dodane do listy własnych "
+#~ "komunikatów o stanie."
+
+#~ msgid "Clear List"
+#~ msgstr "Wyczyść listę"
+
+#~ msgid "Enter status message:"
+#~ msgstr "Wprowadź komunikat stanu:"
+
+#~ msgid "Status Message Presets"
+#~ msgstr "Własne komunikaty stanu"
+
+#~ msgid "_Add to status message list"
+#~ msgstr "Dod_aj do listy komunikatów stanu"
+
+#~ msgid "<b>Account</b>"
+#~ msgstr "<b>Konto</b>"
+
+#~ msgid "A unique name for this account to identify it personally to you."
+#~ msgstr "Unikalna nazwa dla tego konta, abyś mógł się z nią identyfikować."
+
+#~ msgid "Imendio "
+#~ msgstr "Imendio"
+
+#~ msgid "Jabber"
+#~ msgstr "Jabber"
+
+#~ msgid "_Name:"
+#~ msgstr "_Nazwa:"
+
+#~ msgid "Contact List - Empathy"
+#~ msgstr "Lista kontaktów - Empathy"
+
+#~ msgid "Instant Messenger"
+#~ msgstr "Komunikator internetowy"
+
+#~ msgid "Create"
+#~ msgstr "Utwórz"
+
+#~ msgid "Sorry, I don't want you in my contact list."
+#~ msgstr "Przepraszam, nie chcę Ciebie na mojej liście kontaktów."
+
+#, fuzzy
+#~ msgid ""
+#~ "<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+#~ "small>"
+#~ msgstr "<span size=\"smaller\">Przykład: uzytkownik@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Komunikator internetowy"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "_Dołącz"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Odgrywanie dźwięków powiadomień"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Nieznany błąd"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Dostępny"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Nieznany błąd"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "Połączony"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "Połączony"
+
+#, fuzzy
+#~ msgid "This feature is unavailable."
+#~ msgstr "Serwer może być aktualnie niedostępny."
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Konto Jabbera"
+
+#~ msgid "Home"
+#~ msgstr "Dom"
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Serwer może być aktualnie niedostępny."
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Zakładanie konta"
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "_Rozłącz"
+
+#~ msgid "Connect"
+#~ msgstr "Połącz"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Konto zostało pomyślnie założone."
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Błąd przy rejestrowaniu konta"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Wpisz swoje hasło:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Wpisz swoje hasło:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Wprowadź nową nazwę dla grupy\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Information requested, please wait..."
+#~ msgstr "<b>Żądanie informacji, proszę czekać...</b>"
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "Prośba subskrypcji"
+#~ msgstr[1] "Prośba subskrypcji"
+
+#, fuzzy
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "Prośba o autoryzację"
+#~ msgstr[1] "Prośba o autoryzację"
+
+#, fuzzy
+#~ msgid "Edit Account _Details"
+#~ msgstr "Modyfikacja informacji o koncie"
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "Z_aakceptuj"
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "Czy chcesz usunąć kontakt\n"
+#~ "%s\n"
+#~ "ze swojej listy kontaktów?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Wprowadź nową nazwę dla grupy\n"
+#~ "%s"
+
+#~ msgid "Unsorted"
+#~ msgstr "Nieuporządkowana"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Nieznany błąd"
+
+#, fuzzy
+#~ msgid "%s would like to send you a file."
+#~ msgstr "Chciałbym cię dodać do mojej listy kontaktów."
+
+#, fuzzy
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Chciałbym cię dodać do mojej listy kontaktów."
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "Wybierz"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "_Połącz..."
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Połącz"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "_Rozmowa"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Lista dostępnych kont"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr ""
+#~ "Z którym kontem ma zostać nawiązane połączenie przy uruchamianiu programu"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "NAZWA-KONTA"
+
+#~ msgid "Available accounts:"
+#~ msgstr "Dostępne konta:"
+
+#~ msgid "[default]"
+#~ msgstr "[domyślne]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Brak konta o nazwie \"%s\"."
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "Zapisywanie szczegółów użytkownika, proszę czekać..."
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "[domyślne]"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "Czat"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s zostanie dodany do twojej listy kontaktów."
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "%s zostanie dodany do twojej listy kontaktów."
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "Prośba subskrypcji"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr ""
+#~ "Czy chcesz usunąć kontakt\n"
+#~ "%s\n"
+#~ "ze swojej listy kontaktów?"
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr ""
+#~ "Czy chcesz usunąć kontakt\n"
+#~ "%s\n"
+#~ "ze swojej listy kontaktów?"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Wpisz swoje hasło:"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Zapamiętać hasło?"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Czat"
+
+#, fuzzy
+#~ msgid "Contact goes online"
+#~ msgstr "Użytkownik %s wszedł na sieć"
+
+#, fuzzy
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Czy chcesz zaakceptować żądanie?"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "Naz_wa użytkownika:"
+
+#, fuzzy
+#~ msgid "File size:"
+#~ msgstr "Strona WWW:"
+
+#~ msgid "_Accept"
+#~ msgstr "Z_aakceptuj"
+
+#~ msgid "_Deny"
+#~ msgstr "_Odrzuć"
+
+#, fuzzy
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Ulubione:</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "Stan"
+
+#, fuzzy
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "Szczegóły użytkownika"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "Subskrypcja"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Przykład: uzytkownik@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Konto Jabbera"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "_Dodaj kontakt..."
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "Czat"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "_Dodaj kontakt..."
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Bez łączenia przy uruchamianiu"
+
+#~ msgid "Country:"
+#~ msgstr "Kraj:"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "_Dodaj kontakt..."
+
+#~ msgid "Edit Groups"
+#~ msgstr "Modyfikacja grup"
+
+#, fuzzy
+#~ msgid "ID:"
+#~ msgstr "JID"
+
+#~ msgid "Name:"
+#~ msgstr "Nazwa:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "_Szczegóły użytkownika"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "Z_ałóż konto..."
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Jaki pseudonim ma być używany dla tego kontaktu?"
+
+#, fuzzy
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "Ta nazwa będzie użyta do identyfikacji w oknach rozmowy."
+
+#, fuzzy
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr "Ta nazwa będzie użyta do identyfikacji w oknach rozmowy."
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Jakiej nazwy użytkownika chcesz używać?"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Połącz"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Opis"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Rozłącz"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "E-mail:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr "Wprowadź identyfikator osoby, do której chcesz wysłać wiadomość."
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Grupa"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Pseudonim"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Hasło:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "_Komunikaty stanu"
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "_Usuń"
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Subskrybuj"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Strona WWW:"
+
+#, fuzzy
+#~ msgid "irc account settings"
+#~ msgstr "<b>Ustawienia konta</b>"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Ustawione komunikaty stanu."
+
+#, fuzzy
+#~ msgid "Connecting"
+#~ msgstr "Połącz"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s zostanie dodany do twojej listy kontaktów."
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "_ID Jabbera dla nowego kontaktu:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "Wpisz swoje hasło:"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Informacje kontaktowe na temat %s"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/_Informacje o kontakcie"
+
+#, fuzzy
+#~ msgid "/Re_name Contact"
+#~ msgstr "/Z_mień nazwę kontaktu"
+
+#, fuzzy
+#~ msgid "/_Edit Groups"
+#~ msgstr "/Modyfi_kuj grupy"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "_Rozmowa"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Wprowadź nowy pseudonim dla kontaktu\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Modyfikacja grup dla %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Dziennik rozmowy"
+
+#~ msgid "Registering account"
+#~ msgstr "Zakładanie konta"
+
+#, fuzzy
+#~ msgid "Respond"
+#~ msgstr "Powód:"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "_Modyfikuj ulubione..."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Nazwa:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Gossip - Rozmowa"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Żądanie informacji, proszę czekać...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Przykład: uzytkownik@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Gossip - Rozmowa"
+
+#, fuzzy
+#~ msgid "Connection Details"
+#~ msgstr "Szczegóły użytkownika"
+
+#, fuzzy
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Czy posiadasz już konto na serwerze Jabbera?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr ""
+#~ "Wprowadź nowy pseudonim dla kontaktu\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "Wprowadź nowy pseudonim dla kontaktu\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Instalacja zakończona"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip jest nowoczesnym klientem systemu komunikacyjnego Jabber.\n"
+#~ "\n"
+#~ "Ten asystent pomoże Ci skonfigurować program Gossip i połączyć się z "
+#~ "twoim ulubionym serwerem Jabbera.\n"
+#~ "\n"
+#~ "Aby rozpocząć, kliknij \"Naprzód\"."
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "Prośba o autoryzację zostanie wsyłana jeśli chcesz być powiadamiany o "
+#~ "obecności użytkownika. Dopóki prośba nie zostanie zaakceptowana "
+#~ "użytkownik będzie pokazywany na twojej liście kontaktów jako \"Rozłączony"
+#~ "\"."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "W której grupie chcesz umieścić ten kontakt?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "ID Jabbera:"
+
+#~ msgid "Nickname:"
+#~ msgstr "Pseudonim:"
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "P_ort:"
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "Zakładanie konta"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "_Zasób:"
+
+#~ msgid "Sending request"
+#~ msgstr "Wysyłanie prośby o autoryzację."
+
+#~ msgid "Server:"
+#~ msgstr "Serwer:"
+
+#, fuzzy
+#~ msgid "Web Site:"
+#~ msgstr "Strona WWW:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Witaj w programie Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Jakiego komunikatora używa ten kontakt?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Jak się nazywasz?"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "Z jakiego serwera chcesz korzystać?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Jakiej nazwy użytkownika używasz?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Jakiej nazwy użytkownika chcesz używać?"
+
+#, fuzzy
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "W której grupie chcesz umieścić ten kontakt?"
+
+#, fuzzy
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Program Gossip został poprawnie skonfigurowany.\n"
+#~ "Można zmienić ustawienia swojego konta później, wybierając z menu Akcje-"
+#~ ">Połącz... "
+
+#, fuzzy
+#~ msgid "Your Account"
+#~ msgstr "Konto Jabbera"
+
+#~ msgid "Your Identity"
+#~ msgstr "Twoja tożsamość"
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "Gossip - Rozmowa"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Nie"
+
+#~ msgid "_Search..."
+#~ msgstr "_Znajdź..."
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Tak"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Zachowywanie ciszy przy stanie nieobecności"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Zachowywanie ciszy przy zajętości"
+
+#~ msgid "Height of main window"
+#~ msgstr "Wysokość głównego okna"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "Pozycja X (w poziomie) głównego okna."
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "Pozycja Y (w pionie) głównego okna."
+
+#~ msgid "The width of the main window."
+#~ msgstr "Szerokość głównego okna."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Szerokość głównego okna"
+
+#~ msgid "X position of main window"
+#~ msgstr "Pozycja X głównego okna"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Pozycja Y głównego okna"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip, klient pogaduszek sieciowych"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "Ukrycie głównego okna."
+
+#, fuzzy
+#~ msgid "Requested Information"
+#~ msgstr "_Informacje o koncie"
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "Użytkownik %s rozłączył się"
+
+#~ msgid "Available..."
+#~ msgstr "Dostępny..."
+
+#~ msgid "Busy..."
+#~ msgstr "Zajęty..."
+
+#~ msgid "Away..."
+#~ msgstr "Nieobecny..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "_Informacje o kontakcie"
+
+#, fuzzy
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>Opis</b>"
+
+#, fuzzy
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - Rozmowa grupowa"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "_Dołącz do rozmowy grupowej..."
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "P_ort:"
+
+#, fuzzy
+#~ msgid "Requested information."
+#~ msgstr "Informacje o kliencie"
+
+#, fuzzy
+#~ msgid "Requesting contact information, please wait..."
+#~ msgstr "Żądanie szczegółów użytkownika, proszę czekać..."
+
+#, fuzzy
+#~ msgid "Could not open connection"
+#~ msgstr "Nie można nawiązać połączenia"
+
+#, fuzzy
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "Z jakiego serwera chcesz korzystać?"
+
+#, fuzzy
+#~ msgid "Connection to the server failed."
+#~ msgstr "<b>Połączenie do serwera</b>"
+
+#~ msgid "Written by:"
+#~ msgstr "Autorzy:"
+
+#~ msgid "Artwork by:"
+#~ msgstr "Grafika:"
+
+#~ msgid "Translated by:"
+#~ msgstr "Tłumaczenie:"
+
+#, fuzzy
+#~ msgid "Account ID"
+#~ msgstr "_Informacje o koncie"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sRozmowa - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Wyświetl _dziennik"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "Wersja:"
+
+#, fuzzy
+#~ msgid "Latvian"
+#~ msgstr "Jem"
+
+#~ msgid "View Lo_g"
+#~ msgstr "Wyświetl dzienni_k"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - Rozmowa grupowa"
+
+#, fuzzy
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Dodaje kontakt"
+
+#, fuzzy
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "_Informacje o kontakcie"
+
+#, fuzzy
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - Modyfikacja rozmowy grupowej"
+
+#, fuzzy
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - Rozmowa grupowa"
+
+#, fuzzy
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - Wysyłanie wiadomości"
+
+#, fuzzy
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Szczegóły użytkownika"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Preferencje"
+
+#, fuzzy
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - Wysyłanie wiadomości"
+
+#, fuzzy
+#~ msgid "Personal Details Saved!"
+#~ msgstr "Szczegóły użytkownika"
+
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "Jaka wiadomość żądania ma zostać wysłana do %s?"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Upewnij się, że twoje informacje o koncie są poprawne."
+
+#~ msgid "%s wants to be notified of your status."
+#~ msgstr "%s chce być powiadamiany o twojej obecności."
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr ""
+#~ "Połączenie z serwerem zostało utracone. Czy chcesz się ponownie połączyć?"
+
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr ""
+#~ "Upewnij się, że informacje o koncie są poprawne. Serwer może być również "
+#~ "niedostępny."
+
+#~ msgid "Edit List..."
+#~ msgstr "Modyfikuj listę..."
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "Wystąpił błąd podczas rozmowy z użytkownikiem %s."
+
+#~ msgid "Details:"
+#~ msgstr "Szczegóły:"
+
+#~ msgid "An error occurred when chatting in the group chat %s."
+#~ msgstr "Wystąpił błąd podczas rozmowy grupowej %s."
+
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "Nie można dołączyć do rozmowy grupowej %s."
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip spróbuje użyć twojego konta:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Gossip spróbuje zarejestrować konto:"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "Od:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Gossip - Otrzymana wiadomość"
+
+#~ msgid "In reply to:"
+#~ msgstr "W odpowiedzi do:"
+
+#~ msgid "To:"
+#~ msgstr "Do:"
+
+#~ msgid "_Reply..."
+#~ msgstr "_Odpowiedz..."
+
+#~ msgid "_Send"
+#~ msgstr "_Wyślij"
+
+#~ msgid "C_onnect"
+#~ msgstr "_Połącz"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>Dostępne pokoje</b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>Informacja o pokoju</b>"
+
+#~ msgid "Gossip - Join Group Chat"
+#~ msgstr "Gossip - Dołączanie do rozmowy grupowej"
+
+#~ msgid "N_ickname:"
+#~ msgstr "_Pseudonim:"
+
+#~ msgid ""
+#~ "Pick a favorite, or enter nickname, server name, and the name of the chat "
+#~ "room to enter."
+#~ msgstr ""
+#~ "Wybież rozmowę z ulubioncyh lub wpisz pseudonim, nazwę serwera i nazwę "
+#~ "pokoju, do którego chcesz wejść."
+
+#~ msgid "R_emove"
+#~ msgstr "U_suń"
+
+#~ msgid "_Add"
+#~ msgstr "_Dodaj"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Personal information</b>"
+#~ msgstr "<b>Informacje o użytkowniku</b>"
+
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>Ustawione komunikaty stanu</b>"
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Informacja nie jest dostępna</i>"
+
+#~ msgid "Choose a Server"
+#~ msgstr "Wybierz serwer"
+
+#~ msgid "Choose from list:"
+#~ msgstr "Wybierz z listy:"
+
+#~ msgid "Information about ..."
+#~ msgstr "Informacje o programie ..."
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "Na jakim serwerze Jabbera masz konto?"
+
+#~ msgid "Sound"
+#~ msgstr "Dźwięk"
+
+#~ msgid "Use a different server"
+#~ msgstr "Użycie innego serwera"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Jaka wiadomość żądania ma zostać wysłana do ...?"
+
+#~ msgid "subscription_label"
+#~ msgstr "subscription_label"
+
+#~ msgid "About to leave..."
+#~ msgstr "Za chwilę zakończymy..."
+
+#~ msgid "Autoaway message"
+#~ msgstr "Automatyczny komunikat o nieobecności"
+
+#~ msgid "Away messages"
+#~ msgstr "Komunikaty niedostępności"
+
+#~ msgid "Message to show before going away"
+#~ msgstr "Komunikat wyświetlany przed przejściem w stan nieobecności"
+
+#~ msgid "Not at the computer"
+#~ msgstr "Nie jestem przy komputerze"
+
+#~ msgid "Just about to leave..."
+#~ msgstr "Zaraz zakończymy..."
+
+#~ msgid "A Jabber Client for GNOME"
+#~ msgstr "Klient Jabbera dla GNOME"
+
+#~ msgid "Gossip Website"
+#~ msgstr "Witryna programu Gossip"
+
+#~ msgid "Custom Busy Message..."
+#~ msgstr "Własny komunikat o zajętości..."
+
+#~ msgid "New Busy Message"
+#~ msgstr "Nowy komunikat o zajętości"
+
+#~ msgid "New Away Message"
+#~ msgstr "Nowy komunikat o nieobecności"
+
+#~ msgid "Working"
+#~ msgstr "Pracuję"
+
+#~ msgid "Sleeping"
+#~ msgstr "Śpię"
+
+#~ msgid "Enter the new message:"
+#~ msgstr "Podaj nową wiadomość:"
+
+#~ msgid "Reason for being busy:"
+#~ msgstr "Powód zajętości:"
diff --git a/trunk/po/pt.po b/trunk/po/pt.po
new file mode 100644
index 000000000..6c032c8c5
--- /dev/null
+++ b/trunk/po/pt.po
@@ -0,0 +1,2003 @@
+# gossip's Portuguese translation
+# Copyright © 2003, 2004 gossip
+# This file is distributed under the same license as the gossip package.
+# Duarte Loreto <happyguy_pt@hotmail.com>, 2003, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 2.8\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2004-08-13 18:20+0000\n"
+"Last-Translator: Duarte Loreto <happyguy_pt@hotmail.com>\n"
+"Language-Team: Portuguese <gnome_pt@yahoogroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Mensagens Instantâneas"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Mensagens Instantâneas"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "Adicionar à sua lista de contactos"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+#, fuzzy
+msgid "Enable sound when away"
+msgstr "Desabilitar sons quando _ausente"
+
+#: ../data/empathy.schemas.in.h:9
+#, fuzzy
+msgid "Enable sound when busy"
+msgstr "Desabilitar sons quando _ocupado"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Gossip - Enviar Mensagem"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Esconder a janela principal"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Esconder a janela principal."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "_Apresentar Lista de Contactos"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "A altura da janela principal."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Mostrar os contactos desligados"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+#, fuzzy
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Este nome será utilizado para o identificar em janelas de diálogo."
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Utilizar risonhos gráficos"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Utilizar sons de notificação"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Se converter ou não risonhos em imagens gráficas nos diálogos."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Se reproduzir ou não um som ao receber uma mensagem."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Se reproduzir ou não um som quando ausente."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Se reproduzir ou não um som quando ocupado."
+
+#: ../data/empathy.schemas.in.h:28
+#, fuzzy
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Se reproduzir ou não um som ao receber uma mensagem."
+
+#: ../data/empathy.schemas.in.h:29
+#, fuzzy
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Se apresentar ou não na lista de contactos os que estejam desligados."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Se apresentar ou não na lista de contactos os que estejam desligados."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Se apresentar ou não na lista de contactos os que estejam desligados."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Desligado"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Disponível"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Ocupado"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Ausente"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Apresentar Lista de Contactos"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Grupo"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "_Adicionar Contacto..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "_Esconder Lista de Contactos"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "Ligar"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "_Editar favoritas..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Apresentar Contactos _Desligados"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Aceitar"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+#, fuzzy
+msgid "_Accounts"
+msgstr "_Aceitar"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "_Adicionar Contacto..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Diálogo"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "Ligar"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "_Edit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Nova Mensagem..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+#, fuzzy
+msgid "_Personal Information"
+msgstr "Informação pessoal"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Preferências"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+#, fuzzy
+msgid "_Room"
+msgstr "_Sala:"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "_View Previous Conversations"
+msgstr "_Diálogo"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Estado"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Apresentar Lista de Contactos"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+#, fuzzy
+msgid "An Instant Messaging client for GNOME"
+msgstr "Gossip, Um Cliente de Mensagens Instantâneas"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr "Duarte Loreto"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Disponível"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Definições de Conta</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Definições de Conta</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+#, fuzzy
+msgid "Accounts"
+msgstr "Conta Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "<b>Favorita:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Favorita:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>Definições de Conta</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Diálogo"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+#, fuzzy
+msgid "Imendio "
+msgstr "Gossip Imendio"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "Nome:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "_Tópico:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">Exemplo: utilizador@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "Sen_ha:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+#, fuzzy
+msgid "Reso_urce:"
+msgstr "_Recurso:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "Utilizar _encriptação (SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "P_orto:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Servidor:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+#, fuzzy
+msgid "jabber account settings"
+msgstr "<b>Definições de Conta</b>"
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Desligado"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "Ligado"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Limpar"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Diálogo"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+#, fuzzy
+msgid "Contact Infor_mation"
+msgstr "_Informação de Contacto"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "Diálogo"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "Re_gistar..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Introduza a mensagem de estado:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Mover Separador à _Esquerda"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Mover Separador à _Direita"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+#, fuzzy
+msgid "_Add To Favorites"
+msgstr "_Editar favoritas..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Diálogo"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Destacar o Separador"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "Separador _Seguinte"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "Separador _Anterior"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+#, fuzzy
+msgid "_Show Contacts"
+msgstr "_Apresentar Lista de Contactos"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Separadores"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Copiar Endereço do Link"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Abrir o Link"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "_Nova Mensagem..."
+msgstr[1] "_Nova Mensagem..."
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Gossip - Diálogo"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "_Diálogo"
+msgstr[1] "_Diálogo"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "A escrever uma mensagem."
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "_Adicionar Contacto..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "Grupo"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "Adicionar um contacto"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "_Informação de Contacto"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "Informação de contacto"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/Re_nomear grupo"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "Nome de _utilizador:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr ""
+"Introduza uma nova alcunha para o contacto\n"
+"%s"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "_Remover"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/_Remover contacto"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "Gossip - Editar Diálogos em Grupo"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "Seleccionar"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "_Diálogo"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "Aparência"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>Favorita:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Favorita:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "Estado"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "Ligar"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>Descrição</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+#, fuzzy
+msgid "Chat Th_eme:"
+msgstr "_Nome do diálogo:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+#, fuzzy
+msgid "Enable sounds when _away"
+msgstr "Desabilitar sons quando _ausente"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+#, fuzzy
+msgid "Enable sounds when _busy"
+msgstr "Desabilitar sons quando _ocupado"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "Utilizar sons de notificação"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "_Preferências"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+#, fuzzy
+msgid "Show _smileys as images"
+msgstr "Converter ri_sonhos em imagens gráficas"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "_Apresentar Lista de Contactos"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+#, fuzzy
+msgid "_Play sound when messages arrive"
+msgstr "Reproduzir um som ao receber mensagens"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "Gossip - Editar Diálogos em Grupo"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+#, fuzzy
+msgid "Custom message..."
+msgstr "Mensagem de pedido"
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "_Limpar"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "Deseja aceitar o pedido?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+#, fuzzy
+msgid "Clear List"
+msgstr "_Limpar"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Introduza a mensagem de estado:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "Mensagens de Estado"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "Mensagens de estados pré-definidas"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s desligou-se"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, fuzzy, c-format
+msgid "%s has come online"
+msgstr "%s ligou-se"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "_Limpar"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Não estabelecer ligação ao iniciar"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "Mensagens Instantâneas"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Mensagens Instantâneas"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "_Juntar"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "Erro desconhecido"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Utilizar sons de notificação"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Erro desconhecido"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Disponível"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Erro desconhecido"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "Ligado"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "Ligado"
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Conta Jabber"
+
+#~ msgid "Home"
+#~ msgstr "Página Pessoal"
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "A registar a conta"
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "_Desligar"
+
+#~ msgid "Connect"
+#~ msgstr "Ligar"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Conta registada com sucesso"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Falha ao registar a conta"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Introduza a sua senha:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Introduza a sua senha:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Introduza um novo nome para o grupo\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Information requested, please wait..."
+#~ msgstr "<b>Informação pedida, Aguarde...</b>"
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Desejo adicioná-lo à minha lista de contactos."
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "_Nova Mensagem..."
+#~ msgstr[1] "_Nova Mensagem..."
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "Pedido de Subscrição"
+#~ msgstr[1] "Pedido de Subscrição"
+
+#, fuzzy
+#~ msgid "Edit Account _Details"
+#~ msgstr "Editar Informação de Conta"
+
+#~ msgid "New message from %s"
+#~ msgstr "Nova mensagem de %s"
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "_Aceitar"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Nome:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Sala:"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "Ligar"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "<b>Informação pedida, Aguarde...</b>"
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "Deseja remover o contacto\n"
+#~ "%s\n"
+#~ "da sua lista de contactos?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Introduza um novo nome para o grupo\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Seleccionar"
+
+#~ msgid "Unsorted"
+#~ msgstr "Sem ordenação"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Erro desconhecido"
+
+#, fuzzy
+#~ msgid "%s would like to send you a file."
+#~ msgstr "Desejo adicioná-lo à minha lista de contactos."
+
+#, fuzzy
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Desejo adicioná-lo à minha lista de contactos."
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "Seleccionar"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "_Ligar..."
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Ligar"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Que alcunha deseja utilizar para este contacto?"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "_Tópico:"
+
+#, fuzzy
+#~ msgid "Account"
+#~ msgstr "Conta Jabber"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "_Diálogo"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Listar as contas disponíveis"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Com que conta estabelecer ligação ao iniciar"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "NOME-CONTA"
+
+#~ msgid "Available accounts:"
+#~ msgstr "Contas disponíveis:"
+
+#~ msgid "[default]"
+#~ msgstr "[omissão]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Não existe qualquer conta com o nome '%s'."
+
+#, fuzzy
+#~ msgid "Join"
+#~ msgstr "_Juntar"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Diálogo"
+
+#, fuzzy
+#~ msgid "Chat Rooms"
+#~ msgstr "Gossip - Diálogo"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "A gravar os dados pessoais, aguarde..."
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "[omissão]"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "Diálogo"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s será adicionado à sua lista de contactos."
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "%s será adicionado à sua lista de contactos."
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "Pedido de Subscrição"
+
+#, fuzzy
+#~ msgid "Contact Information"
+#~ msgstr "_Informação de Contacto"
+
+#, fuzzy
+#~ msgid "New subscription request from %s"
+#~ msgstr "Pedido de Subscrição"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr ""
+#~ "Deseja remover o contacto\n"
+#~ "%s\n"
+#~ "da sua lista de contactos?"
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr ""
+#~ "Deseja remover o contacto\n"
+#~ "%s\n"
+#~ "da sua lista de contactos?"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Introduza a sua senha:"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Recordar a Senha?"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Diálogo"
+
+#, fuzzy
+#~ msgid "Contact goes online"
+#~ msgstr "%s ligou-se"
+
+#, fuzzy
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Deseja aceitar o pedido?"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "Nome de _utilizador:"
+
+#, fuzzy
+#~ msgid "File size:"
+#~ msgstr "Página web:"
+
+#~ msgid "Web site:"
+#~ msgstr "Página web:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Aceitar"
+
+#~ msgid "_Deny"
+#~ msgstr "_Negar"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Favorita:</b>"
+
+#, fuzzy
+#~ msgid "Account:"
+#~ msgstr "Conta Jabber"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Gossip - Editar Diálogos em Grupo"
+
+#, fuzzy
+#~ msgid "Group Chat"
+#~ msgstr "Gossip - Diálogo"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "_Juntar"
+
+#, fuzzy
+#~ msgid "Join room on start_up"
+#~ msgstr "Não estabelecer ligação ao iniciar"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "Nome:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "Servidor:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "_Alcunha:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Sala:"
+
+#, fuzzy
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Favorita:</b>"
+
+#, fuzzy
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "Informação de cliente"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Favorita:</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "Estado"
+
+#, fuzzy
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "Detalhes Pessoais"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "Subscrição"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Exemplo: utilizador@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Conta Jabber"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "_Adicionar Contacto..."
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "Diálogo"
+
+#~ msgid "Client:"
+#~ msgstr "Cliente:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "_Adicionar Contacto..."
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Não estabelecer ligação ao iniciar"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "_Adicionar Contacto..."
+
+#~ msgid "Country:"
+#~ msgstr "País:"
+
+#~ msgid "Decide _Later"
+#~ msgstr "_Decidir Mais Tarde"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "_Adicionar Contacto..."
+
+#~ msgid "Edit Groups"
+#~ msgstr "Editar Grupos"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
+
+#, fuzzy
+#~ msgid "ID:"
+#~ msgstr "JID"
+
+#~ msgid "Name:"
+#~ msgstr "Nome:"
+
+#~ msgid "OS:"
+#~ msgstr "SO:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "Detalhes _Pessoais"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "Re_gistar..."
+
+#, fuzzy
+#~ msgid "Search"
+#~ msgstr "_Procurar..."
+
+#, fuzzy
+#~ msgid "Spell Checker"
+#~ msgstr "Gossip - Enviar Mensagem"
+
+#, fuzzy
+#~ msgid "Subscription Request"
+#~ msgstr "Pedido de Subscrição"
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Que alcunha deseja utilizar para este contacto?"
+
+#, fuzzy
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "Este nome será utilizado para o identificar em janelas de diálogo."
+
+#, fuzzy
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr "Este nome será utilizado para o identificar em janelas de diálogo."
+
+#~ msgid "Version:"
+#~ msgstr "Versão:"
+
+#, fuzzy
+#~ msgid "View Previous Conversations"
+#~ msgstr "_Diálogo"
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Que nome de utilizador deseja utilizar?"
+
+#, fuzzy
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr ""
+#~ "Não se encontra subscrito no estado deste contacto. Subscreva para "
+#~ "receber o seu estado."
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Ligar"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Descrição"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Desligar"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "Email:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Introduza o ID de utilizador da pessoa para quem deseja enviar uma "
+#~ "mensagem de diálogo."
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "P_orto:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "Nome:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Grupo"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Alcunha:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "Sen_ha:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "Mensagens de E_stados"
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "_Remover"
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Subscrever"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Página web:"
+
+#, fuzzy
+#~ msgid "irc account settings"
+#~ msgstr "<b>Definições de Conta</b>"
+
+#, fuzzy
+#~ msgid "msn account settings"
+#~ msgstr "<b>Definições de Conta</b>"
+
+#~ msgid "Preset status messages"
+#~ msgstr "Mensagens de estados pré-definidas"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Mensagens de estados pré-definidas."
+
+#, fuzzy
+#~ msgid "Connecting"
+#~ msgstr "Ligar"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s será adicionado à sua lista de contactos."
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "ID _Jabber do novo contacto:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "Introduza a sua senha:"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Informação de Contacto para %s"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/_Informação de Contacto"
+
+#, fuzzy
+#~ msgid "/Re_name Contact"
+#~ msgstr "/Re_nomear contacto"
+
+#, fuzzy
+#~ msgid "/_Edit Groups"
+#~ msgstr "/_Editar grupos"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "_Diálogo"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Introduza uma nova alcunha para o contacto\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Editar os grupos de %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Registo de Diálogo"
+
+#~ msgid "Registering account"
+#~ msgstr "A registar a conta"
+
+#, fuzzy
+#~ msgid "Respond"
+#~ msgstr "Motivo:"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "_Editar favoritas..."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Nome:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Gossip - Diálogo"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Informação pedida, Aguarde...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Exemplo: utilizador@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Gossip - Diálogo"
+
+#, fuzzy
+#~ msgid "Connection Details"
+#~ msgstr "Detalhes Pessoais"
+
+#, fuzzy
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Já possui uma conta num servidor Jabber?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr ""
+#~ "Introduza uma nova alcunha para o contacto\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "Introduza uma nova alcunha para o contacto\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Configuração Terminada"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip é um moderno cliente para o sistema de Mensagens Instantâneas "
+#~ "Jabber.\n"
+#~ "\n"
+#~ "Este assistente irá ajudá-lo a configurar o Gossip e ligá-lo ao seu "
+#~ "servidor Jabber favorito.\n"
+#~ "\n"
+#~ "Para começar, prima \"Prosseguir\"."
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "Por forma a subscrever notificações de presença do utilizador, será "
+#~ "enviado um pedido. Até que este pedido seja aprovado, o utilizador será "
+#~ "sempre apresentado como \"Desligado\" na sua lista de contactos."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "Em que grupo deseja colocar este contacto?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "ID Jabber:"
+
+#~ msgid "Nickname:"
+#~ msgstr "Alcunha:"
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "P_orto:"
+
+#, fuzzy
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr ""
+#~ "Não se encontra subscrito no estado deste contacto. Subscreva para "
+#~ "receber o seu estado."
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "A registar a conta"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "_Recurso:"
+
+#~ msgid "Sending request"
+#~ msgstr "A enviar pedido"
+
+#~ msgid "Server:"
+#~ msgstr "Servidor:"
+
+#, fuzzy
+#~ msgid "Web Site:"
+#~ msgstr "Página web:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Bem Vindo ao Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Que sistema de mensagens instantâneas utiliza o contacto?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Qual é o seu nome?"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "Que servidor deseja utilizar?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Que nome de utilizador utiliza?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Que nome de utilizador deseja utilizar?"
+
+#, fuzzy
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "Em que grupo deseja colocar este contacto?"
+
+#, fuzzy
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Gossip está agora correctamente configurado para o seu sistema.\n"
+#~ "Pode alterar as suas definições de conta mais tarde, seleccionando o item "
+#~ "de menu Diálogo->Ligar..."
+
+#, fuzzy
+#~ msgid "Your Account"
+#~ msgstr "Conta Jabber"
+
+#~ msgid "Your Identity"
+#~ msgstr "A Sua Identidade"
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "Gossip - Diálogo"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Não"
+
+#~ msgid "_Search..."
+#~ msgstr "_Procurar..."
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Sim"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Silencioso quando ausente"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Silencioso quando ocupado"
+
+#~ msgid "Height of main window"
+#~ msgstr "Altura da janela principal"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "A posição X da janela principal."
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "A posição Y da janela principal."
+
+#~ msgid "The width of the main window."
+#~ msgstr "A largura da janela principal."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Largura da janela principal"
+
+#~ msgid "X position of main window"
+#~ msgstr "Posição X da janela principal"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Posição Y da janela principal"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip, Um Cliente de Mensagens Instantâneas"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "Esconder a janela principal."
+
+#, fuzzy
+#~ msgid "Requested Information"
+#~ msgstr "Informação de Cont_a"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "Mensagem de Estado"
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "%s desligou-se"
+
+#~ msgid "Available..."
+#~ msgstr "Disponível..."
+
+#~ msgid "Busy..."
+#~ msgstr "Ocupado..."
+
+#~ msgid "Away..."
+#~ msgstr "Ausente..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "_Informação de Contacto"
+
+#, fuzzy
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>Descrição</b>"
+
+#, fuzzy
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - Diálogo"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "_Juntar-se a Diálogo em Grupo..."
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "P_orto:"
+
+#, fuzzy
+#~ msgid "Requested information."
+#~ msgstr "Informação de cliente"
+
+#, fuzzy
+#~ msgid "Requesting contact information, please wait..."
+#~ msgstr "A pedir os dados pessoais, aguarde..."
+
+#, fuzzy
+#~ msgid "Could not open connection"
+#~ msgstr "Incapaz de estabelecer uma ligação"
+
+#, fuzzy
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "Que servidor deseja utilizar?"
+
+#, fuzzy
+#~ msgid "Connection to the server failed."
+#~ msgstr "<b>Ligar-se ao servidor</b>"
+
+#~ msgid "Written by:"
+#~ msgstr "Escrito por:"
+
+#~ msgid "Artwork by:"
+#~ msgstr "Arte gráfica por:"
+
+#~ msgid "Translated by:"
+#~ msgstr "Traduzido por:"
+
+#, fuzzy
+#~ msgid "Account ID"
+#~ msgstr "Informação de Cont_a"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sDiálogo - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Apresentar _Registo"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "Versão:"
+
+#~ msgid "View Lo_g"
+#~ msgstr "Ver Re_gisto"
+
+#, fuzzy
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - Juntar-se ao Diálogo em Grupo"
+
+#, fuzzy
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Adicionar um contacto"
+
+#, fuzzy
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "_Informação de Contacto"
+
+#, fuzzy
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - Editar Diálogos em Grupo"
+
+#, fuzzy
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - Diálogo"
+
+#, fuzzy
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - Enviar Mensagem"
+
+#, fuzzy
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Detalhes Pessoais"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Preferências"
+
+#, fuzzy
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - Enviar Mensagem"
+
+#, fuzzy
+#~ msgid "Personal Details Saved!"
+#~ msgstr "Detalhes Pessoais"
+
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "Que mensagem de pedido deseja enviar a %s?"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Certifique-se de que a sua informação de conta está correcta."
+
+#~ msgid "%s wants to be notified of your status."
+#~ msgstr "%s deseja ser notificado do seu estado."
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Foi desligado do servidor. Deseja ligar-se novamente?"
+
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr ""
+#~ "Certifique-se de que a sua informação de conta está correcta. O servidor "
+#~ "poderá também estar temporariamente indisponível."
+
+#~ msgid "Edit List..."
+#~ msgstr "Editar a Lista..."
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "Ocorreu um erro durante o diálogo com %s."
+
+#~ msgid "Details:"
+#~ msgstr "Detalhes:"
+
+#~ msgid "An error occurred when chatting in the group chat %s."
+#~ msgstr "Ocorreu um erro durante o diálogo em grupo %s."
+
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "Incapaz de se juntar ao diálogo em grupo %s."
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip irá agora tentar utilizar a sua conta:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Gossip irá agora tentar registar a conta:"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "De:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Gossip - Mensagem Recebida"
+
+#~ msgid "In reply to:"
+#~ msgstr "Em resposta a:"
+
+#~ msgid "To:"
+#~ msgstr "Para:"
+
+#~ msgid "_Reply..."
+#~ msgstr "_Responder..."
+
+#~ msgid "_Send"
+#~ msgstr "_Enviar"
+
+#~ msgid "C_onnect"
+#~ msgstr "_Ligar"
+
+#~ msgid "Connect _Server:"
+#~ msgstr "Ligar ao _Servidor:"
+
+#~ msgid "_Jabber ID:"
+#~ msgstr "ID _Jabber:"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>Salas de diálogo disponíveis</b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>Informação de sala de diálogo</b>"
+
+#~ msgid "Imendio Gossip - Group Chat"
+#~ msgstr "Gossip Imendio - Diálogo em Grupo"
+
+#~ msgid "N_ickname:"
+#~ msgstr "_Alcunha:"
+
+#~ msgid ""
+#~ "Pick a favorite, or enter nickname, server name, and the name of the chat "
+#~ "room to enter."
+#~ msgstr ""
+#~ "Seleccione uma favorita ou introduza alcunha, nome de servidor e o nome "
+#~ "da sala de diálogo à qual se juntar."
+
+#~ msgid "R_emove"
+#~ msgstr "R_emover"
+
+#~ msgid "_Add"
+#~ msgstr "_Adicionar"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Personal information</b>"
+#~ msgstr "<b>Informação pessoal</b>"
+
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>Mensagens de estado pré-definidas</b>"
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Informação indisponível</i>"
+
+#~ msgid "Choose a Server"
+#~ msgstr "Seleccione um Servidor"
+
+#~ msgid "Choose from list:"
+#~ msgstr "Seleccione da lista:"
+
+#~ msgid "Information about ..."
+#~ msgstr "Informação sobre ..."
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "Em que servidor possui uma conta Jabber?"
+
+#~ msgid "Sound"
+#~ msgstr "Som"
+
+#~ msgid "Use a different server"
+#~ msgstr "Utilizar outro servidor"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Que mensagem de pedido deseja enviar para ...?"
+
+#~ msgid "subscription_label"
+#~ msgstr "etiqueta_subscrição"
diff --git a/trunk/po/pt_BR.po b/trunk/po/pt_BR.po
new file mode 100644
index 000000000..a2bf07c33
--- /dev/null
+++ b/trunk/po/pt_BR.po
@@ -0,0 +1,2685 @@
+# Brazilian Portuguese translation of Empathy.
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the empathy package.
+# Luiz Guaraldo <software.livre@terra.com.br>, 2004.
+# André Filipe de Assunção e Brito <decko@ufpr.br>, 2007.
+# Og Maciel <ogmaciel@gnome.org>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Empathy\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-03-01 19:41-0300\n"
+"PO-Revision-Date: 2008-03-01 23:37-0300\n"
+"Last-Translator: Og Maciel <ogmaciel@gnome.org>\n"
+"Language-Team: Gnome-BR <gnome-l10n-br@listas.cipsga.org.br>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Mensageiro Instantâneo Empathy"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Envie e receba mensagens instantâneas"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Sempre abrir uma janela de bate-papo separada para novos bate-papos."
+
+#: ../data/empathy.schemas.in.h:2
+msgid ""
+"Character to add after nickname when using nick completion (tab) in group "
+"chat."
+msgstr ""
+"Caracteres para adicionar depois do apelido quando usando completamento de "
+"apelidos (tab) em bate-papo em grupo."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Tema para a janela de bate-papo"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr "Verifica se o Empathy deve conectar automaticamente ao iniciar"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Verifica se o NetworkManager deve ser usado"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Verifica se conta no Salut foi criada"
+
+#: ../data/empathy.schemas.in.h:7
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Lista de idiomas de verificação ortográfica separada por vírgulas para usar "
+"(ex: en, fr, nl)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Lista de contatos compacta"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Critério de ordenação da lista de contatos"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Diretório padrão de onde selecionar imagens de avatar"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr ""
+"Habilitar notificações instantâneas quando um contato estiver disponível"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Habilitar áudio quando ausente"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Habilitar áudio quando ocupado"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Habilitar verificador ortográfico"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Ocultar janela principal"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Oculta a janela principal."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Caractere de completamento de apelidos"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Abrir novos bate-papos em janelas separadas"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Mostrar avatares"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Mostrar dica sobre como fechar a janela principal"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Mostrar contatos desconectados"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Idiomas para verificação ortográfica"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "O último diretório onde uma imagem de avatar foi escolhida."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "O tema que é usado para exibir a conversação em janelas de bate-papo."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Usar smileys gráficos"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Usar notificações com áudio"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Usar tema para salas de bate-papo"
+
+#: ../data/empathy.schemas.in.h:28
+msgid ""
+"Whether or not Empathy should automatically login to your accounts on "
+"startup."
+msgstr "Conecta automaticamente ou não suas contas ao iniciar."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not the Salut account has been created on the first empathy run."
+msgstr ""
+"Se o cadastro do Salut foi criado na primeira execução do empathy ou não."
+
+#: ../data/empathy.schemas.in.h:30
+msgid ""
+"Whether or not the network manager should be used to automatically "
+"disconnect/reconnect."
+msgstr ""
+"Usa ou não o gerenciador de rede para desconectar/reconectar automaticamente."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+"Verifica ou não palavras digitadas usando os idiomas escolhidos para "
+"verificação ortográfica."
+
+#: ../data/empathy.schemas.in.h:32
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Converte ou não smileys para imagens gráficas durante conversações."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Reproduz um áudio ou não quando receber mensagens."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Reproduz áudio ou não quando ausente."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Reproduz áudio ou não quando ocupado."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Mostra ou não uma notificação quando um contato ficar disponível."
+
+#: ../data/empathy.schemas.in.h:37
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Mostra ou não avatares para contatos na lista de contatos e janelas de bate-"
+"papo."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Mostra ou não contatos que estejam desconectados na lista de contatos."
+
+#: ../data/empathy.schemas.in.h:39
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Mostra ou não o diálogo de mensagens sobre fechar a janela principal com o "
+"botão \"x\" na barra do título."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Mostra ou não a lista de contatos no modo compacto."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Usa ou não o tema em salas de bate-papo."
+
+#: ../data/empathy.schemas.in.h:42
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+"Qual critério para usar quando ordenando a lista de contatos. Por padrão a "
+"ordenação é feita usando o nome do contato com o valor \"nome\". Um valor de "
+"\"estado\" ordenará a lista de contatos por estado."
+
+#: ../libempathy/empathy-tp-contact-list.c:724 ../src/empathy.c:149
+msgid "People nearby"
+msgstr "Pessoas por perto"
+
+#: ../libempathy/empathy-utils.c:540
+msgid "Available"
+msgstr "Disponível"
+
+#: ../libempathy/empathy-utils.c:542
+msgid "Busy"
+msgstr "Ocupado"
+
+#: ../libempathy/empathy-utils.c:545
+msgid "Away"
+msgstr "Longe"
+
+#: ../libempathy/empathy-utils.c:547
+msgid "Hidden"
+msgstr "Oculto"
+
+#: ../libempathy/empathy-utils.c:550
+msgid "Offline"
+msgstr "Desconectado"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Empathy é um software livre; você pode redistribuí-lo e/ou modificá-lo "
+"dentro dos termos da Licença Pública Geral GNU como publicada pela Fundação "
+"do Software Livre (FSF); na versão 2 da Licença, ou (na sua opinião) "
+"qualquer versão."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"O Empathy é distribuído na esperança de que será útil, mas SEM NENHUMA "
+"GARANTIA; sem mesmo a garantia implícita de COMERCIABILIDADE ou ADEQUAÇÃO A "
+"PROPÓSITOS ESPECÍFICOS. Veja a Licença Pública Geral GNU para mais detalhes."
+
+#: ../libempathy-gtk/empathy-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com o "
+"Empathy; se não, escreva para a Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Um cliente de Mensagens Instantâneas para o GNOME"
+
+#: ../libempathy-gtk/empathy-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Luiz Guaraldo <software.livre@terra.com.br>\n"
+"André Filipe de Assunção e Brito <decko@ufpr.br>\n"
+"Og Maciel <ogmaciel@gnome.org>"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:337
+msgid "All"
+msgstr "Todos"
+
+#: ../libempathy-gtk/empathy-account-widget.c:276
+#: ../libempathy-gtk/empathy-account-widget.c:321
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Avançado</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Sobrescrever configurações do servidor</b>"
+
+# Tooltip.
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Esquece a senha e apaga a entrada."
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+msgid "Login I_D:"
+msgstr "I_D de login:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+msgid "Pass_word:"
+msgstr "Se_nha:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "Pri_oridade:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "Rec_urso:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Usar criptografia SS_L"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "Criptografia r_equerida (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Ignorar erros de certificado SSL"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+msgid "_Port:"
+msgstr "_Porta:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Servidor:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:13
+msgid "jabber account settings"
+msgstr "configurações da conta jabber"
+
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:7
+msgid "msn account settings"
+msgstr "configurações da conta msn"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_E-mail:"
+msgstr "_E-mail:"
+
+# A mensagem original termina em espaço, mas suas análogas não.
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Nome:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "ID do _Jabber:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "_Sobrenome:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Apelido:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "Nome _Publicado:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:8
+msgid "salut account settings"
+msgstr "configurações da conta salut"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:225
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+"Para adicionar uma nova conta, você pode clicar no botão \"Adicionar\" e uma "
+"nova entrada será criada para você configurar."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:229
+msgid ""
+"To add a new account, you first have to install a backend for each protocol "
+"you want to use."
+msgstr ""
+"Para adicionar uma nova conta, é necessário primeiro instalar um backend "
+"para cada protocolo que você deseja usar."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:236
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Nenhuma Conta Selecionada</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Se você não deseja adicionar uma conta, simplesmente clique na conta que "
+"você deseja configurar na lista à esquerda."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:243
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Nenhuma Conta Configurada</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:411
+msgid "Enabled"
+msgstr "Habilitado"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:421
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Contas"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:904
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Você está prestes a remover sua conta %s!\n"
+"Você tem certeza que deseja prosseguir?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:910
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Qualquer conversações e salas de bate-papo associados NÃO serão removidos se "
+"você decidir prosseguir.\n"
+"\n"
+"Caso você decida adicionar a conta novamente mais tarde, elas ainda estarão "
+"disponíveis."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Nova Conta</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Configurações</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "Cr_iar"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+"Para adicionar uma nova conta, você pode clicar no botão \"Adicionar\" e uma "
+"nova entrada será criada para você configurar.\n"
+"\n"
+"Se você não deseja adicionar uma conta, simplesmente clique na conta que "
+"você deseja configurar na lista à esquerda."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Tipo:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:449
+msgid "Select Your Avatar Image"
+msgstr "Selecione sua Imagem de Avatar"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:452
+msgid "No Image"
+msgstr "Nenhuma Imagem"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:512
+msgid "Images"
+msgstr "Imagens"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:516
+msgid "All Files"
+msgstr "Todos Arquivos"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Clique para ampliar"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:1
+msgid "End Call"
+msgstr "Desligar"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:2
+msgid "Input"
+msgstr "Entrada"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:3
+msgid "Mute"
+msgstr "Sem áudio"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:4
+msgid "Output"
+msgstr "Saída"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:5
+msgid "Send Video"
+msgstr "Enviar Vídeo"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:6
+msgid "Start Call"
+msgstr "Iniciar Chamada"
+
+#: ../libempathy-gtk/empathy-call-window.glade.h:7
+msgid "Volume"
+msgstr "Volume"
+
+#: ../libempathy-gtk/empathy-chat.c:445
+msgid "Disconnected"
+msgstr "Desconectado"
+
+#: ../libempathy-gtk/empathy-chat.c:580
+msgid "offline"
+msgstr "desconectado"
+
+#: ../libempathy-gtk/empathy-chat.c:583
+msgid "invalid contact"
+msgstr "contato inválido"
+
+#: ../libempathy-gtk/empathy-chat.c:586
+msgid "permission denied"
+msgstr "permissão negada"
+
+#: ../libempathy-gtk/empathy-chat.c:589
+msgid "too long message"
+msgstr "mensagem muito longa"
+
+#: ../libempathy-gtk/empathy-chat.c:592
+msgid "not implemented"
+msgstr "não implementado"
+
+#: ../libempathy-gtk/empathy-chat.c:595
+msgid "unknown"
+msgstr "desconhecido"
+
+#: ../libempathy-gtk/empathy-chat.c:599
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Erro enviando mensagem \"%s\": %s"
+
+#: ../libempathy-gtk/empathy-chat.c:1056
+msgid "Insert Smiley"
+msgstr "Inserir Smiley"
+
+#: ../libempathy-gtk/empathy-chat.c:1103
+msgid "_Check Word Spelling..."
+msgstr "_Checar Ortografia..."
+
+#: ../libempathy-gtk/empathy-chat.c:1558
+msgid "Connected"
+msgstr "Conectado"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "C_lear"
+msgstr "_Limpar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Ca_ll"
+msgstr "C_hamar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:3
+msgid "Change _Topic..."
+msgstr "Mudar _Tópico..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:4
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+msgid "Chat"
+msgstr "Bate-Papo"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:5
+msgid "Contact Infor_mation"
+msgstr "Infor_mação do Contato"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:6
+msgid "Cu_t"
+msgstr "Recor_tar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:7
+msgid "In_vite..."
+msgstr "Con_vidar..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:8
+msgid "Insert _Smiley"
+msgstr "Inserir _Smiley"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:9
+msgid "Invitation _message:"
+msgstr "_Mensagem de convite:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:10
+msgid "Invite"
+msgstr "Convidar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:11
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Entrar em _Novo..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:12
+msgid "Move Tab _Left"
+msgstr "Mover Aba Para a _Esquerda"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:13
+msgid "Move Tab _Right"
+msgstr "Mover Aba Para a _Direita"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:14
+msgid "Select who would you like to invite:"
+msgstr "Selecione quem você gostaria convidar:"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:15
+msgid "You have been invited to join a chat conference."
+msgstr "Você foi convidado a participar de uma conferência de bate-papo."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:16
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+msgid "_Add Contact..."
+msgstr "_Adicionar Contato..."
+
+#: ../libempathy-gtk/empathy-chat.glade.h:17
+msgid "_Add To Favorites"
+msgstr "_Adicionar aos Favoritos"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:18
+msgid "_Close"
+msgstr "_Fechar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:19
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Sumário"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:20
+msgid "_Conversation"
+msgstr "_Conversação"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:21
+msgid "_Copy"
+msgstr "_Copiar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:22
+msgid "_Detach Tab"
+msgstr "_Destacar Aba"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:23
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+msgid "_Edit"
+msgstr "_Editar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:24
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "Aj_uda"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:25
+msgid "_Next Tab"
+msgstr "_Próxima Aba"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:26
+msgid "_Paste"
+msgstr "C_olar"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:27
+msgid "_Previous Tab"
+msgstr "Aba _Anterior"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:28
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+msgid "_Room"
+msgstr "_Sala"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:29
+msgid "_Show Contacts"
+msgstr "_Mostrar Contatos"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:30
+msgid "_Tabs"
+msgstr "_Abas"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:31
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+msgid "_View Previous Conversations"
+msgstr "_Ver Conversações Anteriores"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Copy Link Address"
+msgstr "_Copiar Endereço do Link"
+
+#: ../libempathy-gtk/empathy-chat-view.c:449
+msgid "_Open Link"
+msgstr "Abrir _o Link"
+
+#: ../libempathy-gtk/empathy-chat-window.c:699
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Conversações (%d)"
+
+#: ../libempathy-gtk/empathy-chat-window.c:1299
+msgid "Typing a message."
+msgstr "Digitando uma mensagem."
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:258
+msgid "Name"
+msgstr "Nome"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:276
+msgid "Room"
+msgstr "Sala"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.c:285
+msgid "Auto Connect"
+msgstr "Conectar Automaticamente"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:1
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:1
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+msgid "Account:"
+msgstr "Conta:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Editar Sala Favorita"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Entrar na sala ao _iniciar"
+
+# Tooltip.
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr ""
+"Entra nesta sala de bate-papo quando o Empathy iniciar e você estiver "
+"conectado"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Gerenciar Salas Favoritas"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Nome:"
+
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "S_ervidor:"
+
+# Evitar colisão com _Salvar
+#: ../libempathy-gtk/empathy-chatrooms-window.glade.h:9
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "Sa_la:"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:176
+msgid "Personal Information"
+msgstr "Informações Pessoais"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:179
+msgid "Edit Contact Information"
+msgstr "Editar Informações do Contato"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:182
+msgid "Contact Information"
+msgstr "Informações do Contato"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:277
+msgid "I would like to add you to my contact list."
+msgstr "Eu gostaria de adicioná-lo à minha lista de contatos."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:301
+msgid "New Contact"
+msgstr "Novo Contato"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Decidir _Depois"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Requisição de Inscrição"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:197
+msgid "_Contact"
+msgstr "_Contato"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:201
+msgid "_Group"
+msgstr "_Grupo"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+msgid "_Chat"
+msgstr "_Bate-Papo"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:205
+msgid "Chat with contact"
+msgstr "Bater papo com o contato"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "Infor_mation"
+msgstr "Infor_mações"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:209
+msgid "View contact information"
+msgstr "Ver informações do contato"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Re_name"
+msgstr "Re_nomear"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:213
+msgid "Rename"
+msgstr "Renomear"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:217
+msgid "Edit the groups and name for this contact"
+msgstr "Editar os grupos e nome para este contato"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "_Remove"
+msgstr "_Remover"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:221
+msgid "Remove contact"
+msgstr "Remover contato"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "_Invite to Chat Room"
+msgstr "Conv_idar para Sala de Bate-Papo"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:225
+msgid "Invite to a currently open chat room"
+msgstr "Convidar para uma sala de bate-papo já aberta"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "_Send File..."
+msgstr "E_nviar Arquivo..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:229
+msgid "Send a file"
+msgstr "Enviar um arquivo"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:233
+msgid "View previous conversations with this contact"
+msgstr "Ver conversações anteriores com este contato"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "_Call"
+msgstr "_Chamar"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:238
+msgid "Start a voice or video conversation with this contact"
+msgstr "Iniciar uma conversação por voz ou vídeo com este contato"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1469
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Desculpe, mas eu não desejo mais mantê-lo em minha lista de contatos."
+
+#: ../libempathy-gtk/empathy-contact-widget.c:688
+msgid "Select"
+msgstr "Selecionar"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:698
+#: ../libempathy-gtk/empathy-main-window.c:609
+msgid "Group"
+msgstr "Grupo"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Informações do Cliente</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Detalhes do Contato</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Contato</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Grupos</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Apelido:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Aniversário:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Cliente:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Informação do contato"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "E-mail:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Nome completo:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:12
+msgid "Identifier:"
+msgstr "Identificação:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Information requested..."
+msgstr "Informação solicitada..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "OS:"
+msgstr "SO:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid ""
+"Select the groups you want this contact to appear in, you can select more "
+"than one group or no groups."
+msgstr ""
+"Selecione os grupos nos quais este contato aparecerá; você pode selecionar "
+"mais de um grupo ou nenhum grupo."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Version:"
+msgstr "Versão:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Web site:"
+msgstr "Site da Web:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:251
+msgid "Enter the new topic you want to set for this room:"
+msgstr "Digite o novo tópico que você deseja definir para esta sala:"
+
+#: ../libempathy-gtk/empathy-group-chat.c:361
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s entrou na sala"
+
+#: ../libempathy-gtk/empathy-group-chat.c:364
+#, c-format
+msgid "%s has left the room"
+msgstr "%s saiu da sala"
+
+#: ../libempathy-gtk/empathy-group-chat.c:445
+#, c-format
+msgid "Topic: %s"
+msgstr "Tópico: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:574
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Tópico definido como: %s"
+
+#: ../libempathy-gtk/empathy-group-chat.c:576
+msgid "No topic defined"
+msgstr "Nenhum tópico definido"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Tópico:</b>"
+
+#: ../libempathy-gtk/empathy-group-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Bate-Papo em Grupo"
+
+#: ../libempathy-gtk/empathy-log-window.c:499
+msgid "Account"
+msgstr "Conta"
+
+#: ../libempathy-gtk/empathy-log-window.c:506
+msgid "Conversation"
+msgstr "Conversação"
+
+#: ../libempathy-gtk/empathy-log-window.c:516
+msgid "Date"
+msgstr "Data"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:1
+msgid "Conversations"
+msgstr "Conversações"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Previous Conversations"
+msgstr "Conversações Anteriores"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Search"
+msgstr "Pesquisar"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:4
+msgid "_For:"
+msgstr "_Por:"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.c:286
+msgid "Chat Rooms"
+msgstr "Salas de Bate-Papo"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Navegar:"
+
+# Tooltip, but imperative sentence is correct.
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:3
+msgid ""
+"Enter the room name to join here or click on one or more rooms in the list."
+msgstr ""
+"Digite o nome da sala em que você deseja entrar aqui ou clique em uma sala "
+"ou mais na lista."
+
+# Tooltip, but imperative sentence is correct.
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:4
+msgid ""
+"Enter the server which hosts the room, or leave it empty if the room is on "
+"the current account's server"
+msgstr ""
+"Digite o servidor que hospeda a sala, ou deixe o campo vazio caso a sala "
+"esteja no servidor da conta atual"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Entrar"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Entrar em Nova"
+
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "Atualiza_r"
+
+# Tooltip.
+#: ../libempathy-gtk/empathy-new-chatroom-dialog.glade.h:8
+msgid ""
+"This list represents all chat rooms hosted on the server you have entered."
+msgstr ""
+"Esta lista representa todas as salas de bate-papo hospedadas no servidor que "
+"você entrou."
+
+#: ../libempathy-gtk/empathy-main-window.c:266
+msgid "Show and edit accounts"
+msgstr "Mostrar e editar contas"
+
+#: ../libempathy-gtk/empathy-main-window.c:630
+msgid "Contact"
+msgstr "Contato"
+
+#: ../libempathy-gtk/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "_Editar conta"
+
+#: ../libempathy-gtk/empathy-main-window.c:896
+msgid "Network error"
+msgstr "Erro de rede"
+
+#: ../libempathy-gtk/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "Falha de autenticação"
+
+#: ../libempathy-gtk/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "Erro de criptografia"
+
+#: ../libempathy-gtk/empathy-main-window.c:905
+msgid "Name in use"
+msgstr "Nome já em uso"
+
+#: ../libempathy-gtk/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr "Certificado não fornecido"
+
+#: ../libempathy-gtk/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr "Certificado não confiável"
+
+#: ../libempathy-gtk/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr "Certificado expirado"
+
+#: ../libempathy-gtk/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr "Certificado não ativado"
+
+#: ../libempathy-gtk/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr "Certificado com nome de máquina incorreto"
+
+#: ../libempathy-gtk/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr "Certificado com impressão digital incorreto"
+
+#: ../libempathy-gtk/empathy-main-window.c:926
+msgid "Certificate self signed"
+msgstr "Certificado próprio"
+
+#: ../libempathy-gtk/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "Erro de certificado"
+
+#: ../libempathy-gtk/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "Erro desconhecido"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Lista de Contatos"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Contexto"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Entrar em _Favoritos"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Gerenciar Favoritos"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Mostrar Contatos _Offline"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_Sobre"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "Cont_as"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_Nova Conversação..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "Informação _Pessoal"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+msgid "_Preferences"
+msgstr "_Preferências"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "Sai_r"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Chamar"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "ID do Contato:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Nova Conversação"
+
+#: ../libempathy-gtk/empathy-preferences.c:247
+msgid "Language"
+msgstr "Idioma"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Aparência</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Áudio</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Comportamento</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Lista de Contatos</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Habilitar verificação ortográfica para os idiomas:</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Opções</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Visual</b>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>A lista de idiomas representa somente os idiomas para os quais você "
+"já possui dicionários instalados.</small>"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:9
+msgid "Automatically _connect on startup "
+msgstr "Conectar automati_camente ao iniciar "
+
+# Tooltip.
+#: ../libempathy-gtk/empathy-preferences.glade.h:10
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Avatares são imagens escolhidas pelo usuário exibidas na lista de contatos"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:11
+msgid "Chat Th_eme:"
+msgstr "T_ema do Bate-Papo:"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:12
+msgid "Display notifications when contacts come _online"
+msgstr "Exibir notificações quando contatos entrarem _online"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:13
+msgid "Enable sounds when _away"
+msgstr "Habilitar áudio quando _ausente"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:14
+msgid "Enable sounds when _busy"
+msgstr "Habilitar áudio quando ocupa_do"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:15
+msgid "General"
+msgstr "Geral"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:16
+msgid "Notifications"
+msgstr "Notificações"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:17
+msgid "Preferences"
+msgstr "Preferências"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:18
+msgid "Show _avatars"
+msgstr "Mostrar _avatares"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:19
+msgid "Show _smileys as images"
+msgstr "Mostrar _smileys como imagens"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:20
+msgid "Show co_mpact contact list"
+msgstr "Mostrar lista de contatos co_mpacta"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:21
+msgid "Sort by _name"
+msgstr "Ordenar por _nome"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:22
+msgid "Sort by s_tate"
+msgstr "Ordenar por es_tado"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:23
+msgid "Spell Checking"
+msgstr "Ortografia"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:24
+msgid "Themes"
+msgstr "Temas"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Abrir novos bate-papos em janelas separadas"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "Re_produzir áudio quando mensagens forem recebidas"
+
+#: ../libempathy-gtk/empathy-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "_Usar em salas de bate-papo"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Mensagens personalizadas..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Mensagem personalizada"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Mensagem:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Salvar mensagem"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Status:"
+
+#: ../libempathy-gtk/empathy-private-chat.c:229
+#, c-format
+msgid "%s went offline"
+msgstr "%s desconectou"
+
+#: ../libempathy-gtk/empathy-private-chat.c:243
+#, c-format
+msgid "%s has come online"
+msgstr "%s conectou"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:85
+msgid "Word"
+msgstr "Palavra"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:258
+msgid "Suggestions for the word"
+msgstr "Sugestões para a palavra"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Verificador Ortográfico"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Sugestões para a palavra:"
+
+#: ../libempathy-gtk/empathy-status-icon.c:369
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Nova mensagem de %s:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:434
+#, c-format
+msgid ""
+"Incoming call from %s:\n"
+"%s"
+msgstr ""
+"Chamada de %s:\n"
+"%s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:738
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Inscrição solicitada por %s"
+
+#: ../libempathy-gtk/empathy-status-icon.c:741
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Mensagem: %s"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Status"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Mostrar Lista de Contatos"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:780
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%A, %d de %B de %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:78
+msgid "Classic"
+msgstr "Clássico"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:79
+msgid "Simple"
+msgstr "Simples"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:80
+msgid "Clean"
+msgstr "Simples"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:81
+msgid "Blue"
+msgstr "Azul"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr "Nova rede"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Rede</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Servidores</b>"
+
+# Changed from Og's "conjunto de caracteres because of little room.
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Codificação:"
+
+# Tooltip.
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Cria uma nova rede de IRC"
+
+# Tooltip.
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Edita a rede de IRC selecionada"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Rede"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Rede:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Apelido:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Senha:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Mensagem de saída:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Nome verdadeiro:"
+
+# Tooltip.
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Remove a rede de IRC selecionada"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:13
+msgid "irc account settings"
+msgstr "configurações da conta de irc"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+msgid "new server"
+msgstr "novo servidor"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:512
+msgid "Server"
+msgstr "Servidor"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:527
+msgid "Port"
+msgstr "Porta"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:540
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Localidade atual"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Árabe"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Armênio"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Báltico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Celta"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Europeu Central"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Chinês Simplificado"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Chinês Tradicional"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Croata"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Cirílico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Cirílico/Russo"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Cirílico/Ucraniano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Georgiano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Grego"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Guzerate"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Hebraico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Hebraico Visual"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Islandês"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Japonês"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Coreano"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Nórdico"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Persa"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Romeno"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Europeu do Sul"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Tailandês"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Turco"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Ocidental"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnamita"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid ""
+"The contact to display in the applet. Empty means no contact is displayed."
+msgstr ""
+"O contato para exibir no miniaplicativo. Vazio significa que nenhum contato "
+"será exibido."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr ""
+"O símbolo do avatar do contato. Vazio significa que o contato não possui um "
+"avatar."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megafone"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Fale!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Informação"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Presença"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:89
+msgid "Set your own presence"
+msgstr "Configure sua própria presença"
+
+#: ../src/empathy.c:205
+msgid "- Empathy Instant Messenger"
+msgstr "- Mensageiro Instantâneo Empathy"
+
+#~ msgid "Call from %s"
+#~ msgstr "Chamada de %s"
+
+#~ msgid "_New Message..."
+#~ msgstr "_Nova Mensagem..."
+
+#~ msgid "New message"
+#~ msgstr "Nova mensagem"
+
+#~ msgid "Disable"
+#~ msgstr "Desabilitar"
+
+#~ msgid "Edit Account _Details"
+#~ msgstr "Editar _Detalhes da Conta"
+
+#~ msgid "gtk-cancel"
+#~ msgstr "gtk-cancel"
+
+#~ msgid "gtk-ok"
+#~ msgstr "gtk-ok"
+
+#~ msgid "Instant Messenger"
+#~ msgstr "Mensageiro Instantâneo"
+
+#, fuzzy
+#~ msgid "Contact List - Empathy"
+#~ msgstr "_Ocultar Lista de Contatos"
+
+#, fuzzy
+#~ msgid "<b>Account</b>"
+#~ msgstr "<b>Favoritos:</b>"
+
+#, fuzzy
+#~ msgid "Imendio "
+#~ msgstr "Imendio Gossip"
+
+#~ msgid "Jabber"
+#~ msgstr "Jabber"
+
+#, fuzzy
+#~ msgid ""
+#~ "<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+#~ "small>"
+#~ msgstr "<span size=\"small\">Por exemplo: usuario@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Chat Room"
+#~ msgstr "Gossip - Chat"
+
+#, fuzzy
+#~ msgid "Clear List..."
+#~ msgstr "_Limpar"
+
+#, fuzzy
+#~ msgid "Are you sure you want to clear the list?"
+#~ msgstr "Você quer aceitar a solicitação"
+
+#, fuzzy
+#~ msgid "Clear List"
+#~ msgstr "_Limpar"
+
+#~ msgid "Enter status message:"
+#~ msgstr "Digite mensagem de status:"
+
+#, fuzzy
+#~ msgid "Status Message Presets"
+#~ msgstr "mensagens de Status"
+
+#, fuzzy
+#~ msgid "_Add to status message list"
+#~ msgstr "Mensagem de status presente"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Mensageiro Instantâneo"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "_Juntar-se"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Usar sons de notificação"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Erro desconhecido"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Disponível"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Erro desconhecido"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "Conectado"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "Conectado"
+
+#~ msgid "Home"
+#~ msgstr "Início"
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Detalhes do Registro"
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "_desconectar"
+
+#~ msgid "Connect"
+#~ msgstr "Conectar"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Conta registrada com sucesso"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Falha no registro da conta"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Por favor, digite sua senha:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Por favor, digite sua senha:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Por favor, digite um novo nome para o grupo\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Information requested, please wait..."
+#~ msgstr "<b>Informação solicitada, por favor, aguarde...</b>"
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "Requisição de Inscrição"
+#~ msgstr[1] "Requisição de Inscrição"
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "_Aceitar"
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "Você quer remover o contato\n"
+#~ "%s\n"
+#~ "de sua lista de contatos?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Por favor, digite um novo nome para o grupo\n"
+#~ "%s"
+
+# This needs to be done better, could have group_is_unsorted().
+#~ msgid "Unsorted"
+#~ msgstr "Desorganizado"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Erro desconhecido"
+
+#, fuzzy
+#~ msgid "%s would like to send you a file."
+#~ msgstr "Eu gostaria de adicioná-lo à minha lista de contatos."
+
+#, fuzzy
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Eu gostaria de adicioná-lo à minha lista de contatos."
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "Selecionar"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "_Conectar..."
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Conectar"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "_Conversa"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Lista de contas disponíveis"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "NOME-DA-CONTA"
+
+#~ msgid "Available accounts:"
+#~ msgstr "Contas disponíveis:"
+
+#~ msgid "[default]"
+#~ msgstr "[default]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Não existe conta com o nome ' %s'."
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Chat"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "<b>Esperando resposta do servidor...</b>"
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "[default]"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "Chat"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s será adicionado à sua lista de contatos."
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "%s será adicionado à sua lista de contatos."
+
+#, fuzzy
+#~ msgid "New subscription request from %s"
+#~ msgstr "Requisição de Inscrição"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr ""
+#~ "Você quer remover o contato\n"
+#~ "%s\n"
+#~ "de sua lista de contatos?"
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr ""
+#~ "Você quer remover o contato\n"
+#~ "%s\n"
+#~ "de sua lista de contatos?"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Por favor, digite sua senha:"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Lembrar senha?"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Chat"
+
+#, fuzzy
+#~ msgid "Contact goes online"
+#~ msgstr "%s conectou"
+
+#, fuzzy
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Você quer aceitar a solicitação"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "Nome de usuário:"
+
+#, fuzzy
+#~ msgid "File size:"
+#~ msgstr "Site da Web:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Aceitar"
+
+#~ msgid "_Deny"
+#~ msgstr "_Negar"
+
+#, fuzzy
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Favoritos:</b>"
+
+#, fuzzy
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "Detalhes pessoais"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "Inscrever-se"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"small\">Por exemplo: usuario@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Conta Jabber"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "_Adicionar Contato..."
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "Chat"
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Não conectar ao iniciar"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "_Adicionar Contato..."
+
+#~ msgid "Country:"
+#~ msgstr "País:"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "_Adicionar Contato..."
+
+#~ msgid "Edit Groups"
+#~ msgstr "Editar Grupos"
+
+#, fuzzy
+#~ msgid "ID:"
+#~ msgstr "JID"
+
+#~ msgid "Name:"
+#~ msgstr "Nome:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "_Detalhes pessoais"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "Re_gistrar..."
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Qual o apelido que você quer usar para esse contato?"
+
+#, fuzzy
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "Este nome será utilizado para identificá-lo em janelas de chat."
+
+#, fuzzy
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr "Este nome será utilizado para identificá-lo em janelas de chat."
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Qual nome de usuário você quer usar?"
+
+#, fuzzy
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr ""
+#~ "Você não está inscrito para receber o estado deste contato. Pressione "
+#~ "Inscrever-se para receber seu estado."
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Conectar"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "descrição"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_desconectar"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Adicione o ID de usuário da pessoa para quem quer enviar mensagem de chat."
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Grupo"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "A_pelido:"
+
+#~ msgid "_Password:"
+#~ msgstr "_Senha:"
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "_Remover"
+
+#~ msgid "_Subscribe"
+#~ msgstr "In_screver-se"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Site da Web:"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Mensagem de status presente."
+
+#, fuzzy
+#~ msgid "Connecting"
+#~ msgstr "Conectar"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s será adicionado à sua lista de contatos."
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "_ID Jabber do novo contato:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "Por favor, digite sua senha:"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Informação de Contato de %s"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/_Informação do Contato"
+
+#, fuzzy
+#~ msgid "/Re_name Contact"
+#~ msgstr "/Re_nomear contato"
+
+#, fuzzy
+#~ msgid "/_Edit Groups"
+#~ msgstr "/_Editar grupos"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "_Conversa"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Por favor, digite o novo apelido para o contato\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Editar grupos de %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Log da Conversa"
+
+#~ msgid "Registering account"
+#~ msgstr "Registrando conta"
+
+#, fuzzy
+#~ msgid "Respond"
+#~ msgstr "Motivo:"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "_Editar favoritos..."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Nome:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Gossip - Chat"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Informação solicitada, por favor, aguarde...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"small\">Por exemplo: usuario@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Gossip - Chat"
+
+#, fuzzy
+#~ msgid "Connection Details"
+#~ msgstr "Detalhes do Registro"
+
+#, fuzzy
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Você já tem uma conta em um servidor Jabber?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr ""
+#~ "Por favor, digite o novo apelido para o contato\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "Por favor, digite o novo apelido para o contato\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Configuração Terminada"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip é um moderno cliente para o sistema de Mensagens Instantâneas "
+#~ "Jabber.\n"
+#~ "\n"
+#~ "Este assistente o ajudará a configurar o gossip e conectá-lo ao seu "
+#~ "servidor Jabber favorito.\n"
+#~ "\n"
+#~ "Para iniciar, clique em \"Proseguir\"."
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "Para que possa receber notificações de presença do usuário uma "
+#~ "solicitação será enviada. Enquanto a solicitação está sendo aprovada, o "
+#~ "usuário sempre aparecerá como \"Offline\" em sua lista de contatos."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "Em qual grupo você quer adicionar esse contato?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "ID Jabber:"
+
+#, fuzzy
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr ""
+#~ "Você não está inscrito para receber o estado deste contato. Pressione "
+#~ "Inscrever-se para receber seu estado."
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "Registrando conta"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "_Recursos:"
+
+#~ msgid "Sending request"
+#~ msgstr "enviando solicitação"
+
+#, fuzzy
+#~ msgid "Web Site:"
+#~ msgstr "Site da Web:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Bem vindo ao Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Qual o sistema de mensagens instantâneas o contato usa?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Como você se chama?"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "Qual servidor você quer usar?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Qual nome de usuário você usa?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Qual nome de usuário você quer usar?"
+
+#, fuzzy
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "Em qual grupo você quer adicionar esse contato?"
+
+#, fuzzy
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Gossip já está configurado corretamente em seu sistema.\n"
+#~ "Você pode alterar as configurações de sua conta selecionando o menuChat-"
+#~ ">Contato..."
+
+#, fuzzy
+#~ msgid "Your Account"
+#~ msgstr "Conta Jabber"
+
+#~ msgid "Your Identity"
+#~ msgstr "Sua Identificação"
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "Gossip - Chat"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Não"
+
+#~ msgid "_Search..."
+#~ msgstr "_Procurar..."
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Sim"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Ficar em silêncio quando longe"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Ficar em silêncio quando ocupado"
+
+#~ msgid "Height of main window"
+#~ msgstr "Altura da janela principal"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "A posição X da janela principal."
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "A posição Y da janela principal."
+
+#~ msgid "The width of the main window."
+#~ msgstr "A largura da janela principal."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Largura da janela principal"
+
+#~ msgid "X position of main window"
+#~ msgstr "Posição X da janela principal"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Posição Y da janela principal."
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip, Cliente de Mensagens Instantâneas"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "Ocultar a janela principal."
+
+#, fuzzy
+#~ msgid "Requested Information"
+#~ msgstr "Informação da Cont_a"
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "%s desconectou"
+
+#~ msgid "Available..."
+#~ msgstr "Disponível..."
+
+#~ msgid "Busy..."
+#~ msgstr "Ocupado..."
+
+#~ msgid "Away..."
+#~ msgstr "Longe..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "_Informação do Contato"
+
+#, fuzzy
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>Descrição</b>"
+
+#, fuzzy
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - Chat"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "_Juntar-se a Grupo de Chat..."
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "P_orta:"
+
+#, fuzzy
+#~ msgid "Requested information."
+#~ msgstr "Informação do Cliente"
+
+#, fuzzy
+#~ msgid "Requesting contact information, please wait..."
+#~ msgstr "Solicitando detalhes pessoais, por favor aguarde..."
+
+#, fuzzy
+#~ msgid "Could not open connection"
+#~ msgstr "Impossível conectar"
+
+#, fuzzy
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "Qual servidor você quer usar?"
+
+#, fuzzy
+#~ msgid "Connection to the server failed."
+#~ msgstr "<b>Conectar ao servidor</b>"
+
+#~ msgid "Written by:"
+#~ msgstr "Escrito por:"
+
+#~ msgid "Artwork by:"
+#~ msgstr "Arte de:"
+
+#~ msgid "Translated by:"
+#~ msgstr "Traduzido por:"
+
+#, fuzzy
+#~ msgid "Account ID"
+#~ msgstr "Informação da Cont_a"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sChat - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Mostrar _Log"
+
+#~ msgid "View Lo_g"
+#~ msgstr "Ver Lo_g"
+
+#, fuzzy
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - Juntar-se ao Grupo de Chat"
+
+#, fuzzy
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Adicionar contato"
+
+#, fuzzy
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "_Informação do Contato"
+
+#, fuzzy
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - Editar Grupos de Chats"
+
+#, fuzzy
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - Chat"
+
+#, fuzzy
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - Mensagem Enviada"
+
+#, fuzzy
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Detalhes pessoais"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Preferências"
+
+#, fuzzy
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - Mensagem Enviada"
+
+#, fuzzy
+#~ msgid "Personal Details Saved!"
+#~ msgstr "Detalhes pessoais"
+
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "Qual mensagem de solicitação você quer mandar para %s?"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Tenha certeza que as informações de sua conta estão corretas."
+
+#~ msgid "%s wants to be notified of your status."
+#~ msgstr "%s quer ser notificado de seu status."
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Você foi desconectado do servidor. Você quer reconectar?"
+
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr ""
+#~ "Tenha certeza que as informações de sua conta estão corretas. O servidor "
+#~ "ainda pode estar indisponível no momento."
+
+#~ msgid "Edit List..."
+#~ msgstr "Editar Lista..."
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "Ocorreu um erro enquanto conversava com %s."
+
+#~ msgid "Details:"
+#~ msgstr "Detalhes:"
+
+#~ msgid "An error occurred when chatting in the group chat %s."
+#~ msgstr "Ocorreu um erro enquanto conversava no grupo de chat %s."
+
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "Impossível entrar no grupo de chat %s."
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip irá, agora, tentar usar sua conta:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Gossip irá, agora, tentar registrar a conta:"
+
+#~ msgid "Saving personal details, please wait..."
+#~ msgstr "Salvando detalhes pessoais, por favor aguarde..."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "De:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Gossip - Mensagem Recebida"
+
+#~ msgid "In reply to:"
+#~ msgstr "Em resposta a:"
+
+#~ msgid "To:"
+#~ msgstr "Para:"
+
+#~ msgid "_Reply..."
+#~ msgstr "_Responder..."
+
+#~ msgid "_Send"
+#~ msgstr "_Enviar"
+
+#~ msgid "C_onnect"
+#~ msgstr "C_onectar"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>Salas de chat disponíveis</b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>Informação da sala de chat</b>"
+
+#~ msgid "Imendio Gossip - Group Chat"
+#~ msgstr "Imendio Gossip - Grupo de Chat"
+
+#~ msgid "N_ickname:"
+#~ msgstr "Apel_ido:"
+
+#~ msgid ""
+#~ "Pick a favorite, or enter nickname, server name, and the name of the chat "
+#~ "room to enter."
+#~ msgstr ""
+#~ "Pegue um dos favoritos ou digite apelido, servidor e o nome da sala de "
+#~ "chat que quer entrar."
+
+#~ msgid "R_emove"
+#~ msgstr "R_emover"
+
+#~ msgid "_Add"
+#~ msgstr "_Adicionar"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid ""
+#~ "<b>Finding the best server...</b>\n"
+#~ "This will take a few moments, please wait."
+#~ msgstr ""
+#~ "<b>Procurando o melhor servidor...</b>\n"
+#~ "Isto levará alguns momentos. Por favor, espere."
+
+#~ msgid "<b>Personal information</b>"
+#~ msgstr "<b>Informação pessoal</b>"
+
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>Mensagem de status presente</b>"
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Informação não disponível</i>"
+
+#~ msgid "Add Another Account"
+#~ msgstr "Adicionar outra Conta"
+
+#~ msgid "Choose a Server"
+#~ msgstr "escolha um servidor"
+
+#~ msgid "Choose from list:"
+#~ msgstr "Escolha da lista:"
+
+#~ msgid "Discover Services"
+#~ msgstr "Descubra Serviços"
+
+#~ msgid "Information about ..."
+#~ msgstr "Informação sobre..."
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "Em qual servidor você tem uma conta Jabber?"
+
+#~ msgid "Registering Service"
+#~ msgstr "Registrando Serviço"
+
+#~ msgid "Sever Details"
+#~ msgstr "Detalhes do Servidor"
+
+#~ msgid "Sound"
+#~ msgstr "Som"
+
+#~ msgid ""
+#~ "This wizard will allow you to configure your account settings for another "
+#~ "protocol. "
+#~ msgstr ""
+#~ "Este assistente o ajudará a configurar sua conta para outro protocolo."
+
+#~ msgid "Use a different server"
+#~ msgstr "User um servidor diferente"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Qual mensagem de solicitação você quer enviar para ... ?"
+
+#~ msgid "Which protocol would you like to set up? "
+#~ msgstr "Qual protocolo você gostaria de configurar?"
+
+#~ msgid "_AIM"
+#~ msgstr "_AIM"
+
+#~ msgid "_ICQ"
+#~ msgstr "_ICQ"
+
+#~ msgid "_MSN"
+#~ msgstr "_MSN"
+
+#~ msgid "_Yahoo!"
+#~ msgstr "_Yahoo!"
diff --git a/trunk/po/ru.po b/trunk/po/ru.po
new file mode 100644
index 000000000..f4ca78371
--- /dev/null
+++ b/trunk/po/ru.po
@@ -0,0 +1,2335 @@
+# This is gossip translation file.
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Grigory Bakunov <bobuk@justos.org>, 2003, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip 0.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2006-07-08 23:45+0300\n"
+"Last-Translator: Valek Filippov <frob at df dot ru>\n"
+"Language-Team: Russian <gnome-cyr@gnome.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Обмен сообщениями"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Обмен сообщениями"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Всегда открывать новую беседу в новом окне."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "Тема окна беседы"
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Список языков, используемых при проверке орфографии, разделённых запятыми "
+"(например «en, fr, ru»)."
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "_Показать список собеседников"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr "Каталог, используемый для выбора изображений аватаров"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr "Показывать всплывающее окно когда собеседник доступен"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr "Включить звуки в состоянии «_ушёл»"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr "Включить звуки в состоянии «_занят»"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Включить проверку орфографии"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Скрывать главное окно"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Скрывать главное окно."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr "Открывать новые беседы в новом окне"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr "Показывать аватары"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "Высота главного окна."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Показывать отсутствующих собеседников"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr "Языки для проверки орфографии"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Последний каталог, которого выбирались изображения аватаров."
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Эта тема используется для отображения диалога в окне беседы."
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Использовать графические улыбки"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Использовать звуки"
+
+#: ../data/empathy.schemas.in.h:22
+#, fuzzy
+msgid "Use theme for chat rooms"
+msgstr "Войти в комнату"
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Конвертировать ли текстовые улыбочки (смайлы) в разговорах в графические "
+"изображения."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Проигрывать звук при получении сообщения или нет."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Воспроизводить звуки в состоянии «ушёл» или нет."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Воспроизводить звуки в состоянии «занят» или нет."
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Показывать ли всплывающее окно при появлении собеседника."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Показывать ли аватары собеседников в списке или окнах разговоров."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Показывать недоступных в сети собеседников в списке или нет."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Показывать ли аватары собеседников в списке или окнах разговоров."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Не в сети"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Доступен"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Занят"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Ушёл"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Показать список собеседников"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Группа"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "Собеседники"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "С_крыть список собеседников"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "_Содержание"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "Подключить _близких"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr "Присоединиться _к..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+#, fuzzy
+msgid "Manage Favorites..."
+msgstr "Подключить _близких"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Показывать _отсутствующих"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Учётные записи"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Учётные записи"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "_Добавить собеседника..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Разговор"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "_Содержание"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "Правка"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Отправить сообщение..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "_Личная информация"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Изменить настройки"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr "_Комната"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr "Просмотр предыдущих _бесед"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Состояние"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Показать список собеседников"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+#, fuzzy
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Gossip -- свободная программа, вы можете распространять и/или модифицировать "
+"её на условиях указаных в GNU General Public License опубликованой Free "
+"Software Foundation; либо в версии 2 или (по вашему выбору) любой более "
+"поздней версии."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+#, fuzzy
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Программа Gossip распространяется в рассчёте на то, что будет полезной, "
+"однако БЕЗ КАКИХ ЛИБО ГАРАНТИЙ в том числе подразумеваемых гарантий "
+"ПОЛЕЗНОСТИ или ПРИГОДНОСТИ ДЛЯ КАКИХ_ЛИБО ЦЕЛЕЙ. Смотрите GNU General Public "
+"License."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Вы должны были получить копию GNU General Public License вместе с программой "
+"Gossip. Если этого не произошло, напишите в Фонд Свободного Программного "
+"Обеспечения: Free Software Foundation, Inc., 59 Temple Place, Suite 330, "
+"Boston, MA 02111-1307 USA"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Программа быстрогообмена сообщениями для GNOME"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"Grigory Bakunov\n"
+"Dan Korostelev\n"
+"Mikhail Zabaluev\n"
+"Валёк Филиппов"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Доступен"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+#, fuzzy
+msgid "Enable"
+msgstr "Пример"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Учётная запись</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Учётная запись</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr "Учётные записи"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr "Вы удаляете свою учётную запись «%s»! Продолжить?"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Любые связанные беседы и комнаты НЕ БУДУТ удалены, если вы продолжите.\n"
+"Если вы решите восстановить эту учётную запись позднее, то они снова станут "
+"доступны."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+msgid "<b>Account</b>"
+msgstr "<b>Учётная запись</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Учётная запись</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>Состояние</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Разговор!"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+msgid "_Name:"
+msgstr "_Имя:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "_Тема:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">Пример: user@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr "_Идентификатор:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+msgid "Pass_word:"
+msgstr "_Пароль:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr "Ресурс:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "Использовать _шифрование (SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+msgid "_Port:"
+msgstr "Порт:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Сервер:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Отсоединён"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr "Вставить улыбочку"
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr "П_роверить правописание слова..."
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "Соединён"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+#, fuzzy
+msgid "C_lear"
+msgstr "О_чистить"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Разговор"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr "Информация о собеседнике"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "_Разговор"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "Приглас_ить"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "Вставить _улыбочку"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Введите сообщение о состоянии:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+#, fuzzy
+msgid "Invite"
+msgstr "Приглас_ить"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Передвинуть вкладку в_лево"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Передвинуть вкладку в_право"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "Вас пригласили принять участие в конференции."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "Добавить к _предпочитаемым"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Разговор"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Отсоединить вкладку"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "На след_ующую вкладку"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+#, fuzzy
+msgid "_Paste"
+msgstr "Дата"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "На пред_ыдущую вкладку"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr "_Показать список собеседников"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "В_кладки"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Копировать адрес ссылки"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Открыть ссылку"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "Новое сообщение"
+msgstr[1] "Новое сообщение"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+msgid "Chat Room"
+msgstr "Комната для беседы"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "_Разговор"
+msgstr[1] "_Разговор"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "Набирает сообщение."
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "Собеседники"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "Группа"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "Добавление собеседника"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "Информация о собеседнике"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "Информация о собеседнике"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/Пе_реименовать группу"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "Имя файла:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr "Введите имя для этой учётной записи"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "_Remove"
+msgstr "/_Удалить собеседника"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/_Удалить собеседника"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "/Пригласить в _комнату"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "_Send File..."
+msgstr "/Послать _файл..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "Выберите файл"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "Посмотреть предыдущие беседы"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr "Язык"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Внешний вид</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Звук</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Поведение</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "<b>Состояние</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr "<b>Языки</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "<b>Соединение</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Вид</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>В этом списке отображены только языки, для которых установлены "
+"словари.</small>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Аватары - выбраные пользователем изображения показываемые в списке "
+"собеседников"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "Тема б_еседы: "
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Показывать уведомления когда собеседники подключаются"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Включить звуки в состоянии «_ушёл»"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Включить звуки в состоянии «_занят»"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr "Общие"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Уведомления"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Настройки"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "Показать _аватары"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Показывать графические _улыбочки"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "_Показать список собеседников"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Проверка орфографии"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+#, fuzzy
+msgid "_Enable spell checking"
+msgstr "Включить проверку орфографии"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "_Открывать новые беседы в отдельном окне"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "_Воспроизводить звук при получении сообщения"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "Со_хранить эту комнату"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr "Другое сообщение..."
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+msgid "Clear List..."
+msgstr "Очистить список..."
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "Вы уверены, что хотите очистить список?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+"Будут удалены любые пользовательские сообщения, которые были добавлены к "
+"списку сообщений о состоянии."
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr "Очистить список"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Введите сообщение о состоянии:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+msgid "Status Message Presets"
+msgstr "Список сообщений о состоянии"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+msgid "_Add to status message list"
+msgstr "Добавить в список сообщений о состоянии"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s отключился"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr "%s подключился"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr "Классическая"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr "Простая"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+msgid "Clean"
+msgstr "О_чистить"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr "Голубая"
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Не соединяться при запуске"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr " - Gossip, быстрый обмен сообщениями"
+
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Обмен сообщениями Gossip"
+
+#~ msgid "Normal"
+#~ msgstr "Нормальный"
+
+#~ msgid "Joining"
+#~ msgstr "Соединяется"
+
+#~ msgid "Active"
+#~ msgstr "Активный"
+
+#~ msgid "Inactive"
+#~ msgstr "Неактивный"
+
+#~ msgid "Unknown"
+#~ msgstr "Неизвестный"
+
+#~ msgid "Error"
+#~ msgstr "Ошибочный"
+
+#, fuzzy
+#~ msgid "Participant"
+#~ msgid_plural "Participants"
+#~ msgstr[0] "Галисийский"
+#~ msgstr[1] "Галисийский"
+
+#, fuzzy
+#~ msgid "No role"
+#~ msgstr "Нормальный"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Уведомления"
+
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "Выбранный псевдоним уже используется."
+
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr "Комната, в которую вы пытаетесь войти, требует пароля."
+
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr ""
+#~ "Нет ответа от удалённого сервера конференций в течение разумного "
+#~ "промежутка времени."
+
+#~ msgid "The conference server you tried to join could not be found."
+#~ msgstr ""
+#~ "Не найден сервер конференций, к которому вы пытаетесь присоединиться."
+
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Произошла неизвестная ошибка, проверьте ваши настройки."
+
+#, fuzzy
+#~ msgid "Joining the chatroom was canceled."
+#~ msgstr "Войти в комнату"
+
+#~ msgid "Unavailable"
+#~ msgstr "Недоступен"
+
+#~ msgid "An unknown error occurred."
+#~ msgstr "Произошла неизвестная ошибка."
+
+#~ msgid "Connection refused."
+#~ msgstr "Соединение отвергнуто."
+
+#~ msgid "Server address could not be resolved."
+#~ msgstr "Не найден адрес сервера."
+
+#~ msgid "Connection timed out."
+#~ msgstr "Время соединения истекло."
+
+#~ msgid "Authentication failed."
+#~ msgstr "Аутентификация не удалась."
+
+#~ msgid "The username you are trying already exists."
+#~ msgstr "Уже есть пользователь с таким именем."
+
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "Выбранное имя пользователя некорректно."
+
+#~ msgid "This feature is unavailable."
+#~ msgstr "Эта возможность недоступна."
+
+#~ msgid "This feature is unauthorized."
+#~ msgstr "Эта возможность не санкционирована."
+
+#~ msgid "A specific protocol error occurred that was unexpected."
+#~ msgstr "Возникла неожиданная ошибка в протоколе."
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Создать учётную запись"
+
+#~ msgid "Home"
+#~ msgstr "Дом"
+
+#~ msgid "Couldn't send message!"
+#~ msgstr "Не удалось отправить сообщение!"
+
+#~ msgid "Connection could not be opened"
+#~ msgstr "Ошибка установления соединения"
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Эта возможность недоступна."
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Регистрация"
+
+#, fuzzy
+#~ msgid "This feature is not implemented"
+#~ msgstr "Эта возможность не санкционирована."
+
+#~ msgid "Stop"
+#~ msgstr "Остановить"
+
+#~ msgid "Disconnect"
+#~ msgstr "Отсоединиться"
+
+#~ msgid "Connect"
+#~ msgstr "Соединение"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Не удалось зарегистрировать новые параметры учётной записи"
+
+#, fuzzy
+#~ msgid "You should now be able to connect to your new account."
+#~ msgstr ""
+#~ "Нельзя использовать параметр \"--no-connect\" вместе с параметром \"--"
+#~ "account\""
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Не удалось зарегистрировать новые параметры учётной записи"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Введите пароль для учётной записи:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Введите пароль для учётной записи:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Введите новый псевдоним для группы:\n"
+#~ "%s"
+
+#~ msgid "No information is available for this contact."
+#~ msgstr "Нет информации об этом собеседнике."
+
+#~ msgid "Information requested, please wait..."
+#~ msgstr "Информация запрошена, подождите..."
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Я хотел бы добавить Вас в свой список собеседников."
+
+#~ msgid "To summarize:"
+#~ msgstr "Обобщить:"
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "Новое сообщение"
+#~ msgstr[1] "Новое сообщение"
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "Запрос на подписку"
+#~ msgstr[1] "Запрос на подписку"
+
+#, fuzzy
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "Запрос на передачу файла"
+#~ msgstr[1] "Запрос на передачу файла"
+
+#, fuzzy
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "Не удалось отправить сообщение!"
+#~ msgstr[1] "Не удалось отправить сообщение!"
+
+#, fuzzy
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "Ошибочный"
+#~ msgstr[1] "Ошибочный"
+
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "Если вы выйдете, вы потеряете все непрочитанные сообщения."
+
+#~ msgid "Edit Account _Details"
+#~ msgstr "Редактировать информацию об учётной записи"
+
+#~ msgid "Click to enlarge"
+#~ msgstr "Щёлкните для увеличения"
+
+#~ msgid "Word"
+#~ msgstr "Слово"
+
+#~ msgid "New message from %s"
+#~ msgstr "Новое сообщение от %s"
+
+#~ msgid "Your invitation has been declined"
+#~ msgstr "Ваше приглашение было отклонено"
+
+#~ msgid "Accept"
+#~ msgstr "Подтвердить"
+
+#~ msgid "Decline"
+#~ msgstr "Отклонить"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Имя:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Комната"
+
+#~ msgid "Auto Connect"
+#~ msgstr "Автоматическое соединение"
+
+#~ msgid "Information requested..."
+#~ msgstr "Информация запрошена..."
+
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr "Вы хотите удалить этого собеседника из вашего списка?"
+
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Введите новый псевдоним для группы:\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Выбрать"
+
+#~ msgid "Unsorted"
+#~ msgstr "Разное"
+
+#~ msgid "New file transfer request from %s"
+#~ msgstr "Запрос о передаче файла от %s"
+
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "Передача файлов не поддерживается обеими сторонами."
+
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "Предложение о передаче файла отклонено."
+
+#~ msgid "The other user decided not to continue."
+#~ msgstr "Собеседник решил прервать передачу."
+
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Во время передачи файлов произошла неизвестная ошибка."
+
+#~ msgid "%s would like to send you a file."
+#~ msgstr "%s желает послать вам файл."
+
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Кто-то желает переслать вам файл."
+
+#~ msgid "Select a file"
+#~ msgstr "Выберите файл"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "Соединяется"
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Остановить соединение"
+
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "%s приглашён присоединиться к беседе."
+
+#, fuzzy
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "Тема была установлена %s"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Какой псевдоним вы хотите использовать для этого собеседника?"
+
+#, fuzzy
+#~ msgid "%s has joined the room"
+#~ msgstr "Тема была установлена %s"
+
+#, fuzzy
+#~ msgid "%s has left the room"
+#~ msgstr "Тема была установлена %s"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "_Тема:"
+
+#~ msgid "Account"
+#~ msgstr "Учётная запись"
+
+#~ msgid "Conversation With"
+#~ msgstr "Разговор с"
+
+#~ msgid "Date"
+#~ msgstr "Дата"
+
+#~ msgid "Allow multiple instances of the application to run at the same time"
+#~ msgstr "Разрешить одновременный запуск нескольких копий программы"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Список учётных записей"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Учётная запись которая используется при старте"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "ACCOUNT-NAME"
+
+#~ msgid "You can not use --no-connect together with --account"
+#~ msgstr ""
+#~ "Нельзя использовать параметр \"--no-connect\" вместе с параметром \"--"
+#~ "account\""
+
+#~ msgid "No accounts available."
+#~ msgstr "Нет учётных записей."
+
+#~ msgid "Available accounts:"
+#~ msgstr "Доступные учётные записи:"
+
+#~ msgid "[default]"
+#~ msgstr "[По умолчанию]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Нет учётной записи с именем '%s'."
+
+#~ msgid "Join"
+#~ msgstr "Войти"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Дата"
+
+#~ msgid "Chat Rooms"
+#~ msgstr "Комнаты"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "Информация запрошена, подождите..."
+
+#~ msgid "Default"
+#~ msgstr "По умолчанию"
+
+#~ msgid "Chat!"
+#~ msgstr "Разговор!"
+
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s просит добавить себя в ваш список собеседников."
+
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Кто-то просит добавить себя в ваш список собеседников."
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "Запрос на подписку"
+
+#~ msgid "Show"
+#~ msgstr "Показать"
+
+#~ msgid "Contact Information"
+#~ msgstr "Информация о собеседнике"
+
+#~ msgid "Subject: %s"
+#~ msgstr "Тема: %s"
+
+#~ msgid "Suggestions for the word"
+#~ msgstr "Предложения по замене"
+
+#~ msgid "New subscription request from %s"
+#~ msgstr "Запрос на подписку от %s"
+
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "Вы хотите добавить этого собеседника в список?"
+
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "Вы хотите добавить %s в ваш список собеседников?"
+
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Введите пароль для учётной записи %s:"
+
+#, fuzzy
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "Подключение с: %s"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Запомнить пароль?"
+
+#~ msgid "Could not display the help contents."
+#~ msgstr "Не удалось отобразить содержимое справки."
+
+#~ msgid "Select Your Avatar Image"
+#~ msgstr "Выберите изображение вашего аватара"
+
+#~ msgid "No Image"
+#~ msgstr "Нет изображения"
+
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "Сервер не отвечает."
+
+#~ msgid "Try again later."
+#~ msgstr "Попробуйте позже."
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Разговор"
+
+#~ msgid "Contact goes offline"
+#~ msgstr "Собеседник отключается"
+
+#~ msgid "Contact goes online"
+#~ msgstr "Собеседник подключается"
+
+#~ msgid "Contact ID:"
+#~ msgstr "Идентификатор собеседника:"
+
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Принять этот файл?"
+
+#~ msgid "File Transfer Request"
+#~ msgstr "Запрос на передачу файла"
+
+#~ msgid "File name:"
+#~ msgstr "Имя файла:"
+
+#~ msgid "File size:"
+#~ msgstr "Размер:"
+
+#~ msgid "Not supported yet"
+#~ msgstr "Пока не поддерживается"
+
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "Вам хотят переслать этот файл:"
+
+#~ msgid "Web site:"
+#~ msgstr "Вебсайт:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Подтвердить"
+
+#~ msgid "_Deny"
+#~ msgstr "_Отвергнуть"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>О программе</b>"
+
+#~ msgid "Account:"
+#~ msgstr "Учётная запись:"
+
+#, fuzzy
+#~ msgid "Browse:"
+#~ msgstr "Фарерский"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Правка комнаты"
+
+#~ msgid "Group Chat"
+#~ msgstr "Разговор"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "Присоединиться _к..."
+
+#~ msgid "Join room on start_up"
+#~ msgstr "Входить при _запуске"
+
+#~ msgid "Join this chat room when Gossip starts and you are connected"
+#~ msgstr ""
+#~ "Входить в эту комнату после запуска Gossip и установления соединения."
+
+#, fuzzy
+#~ msgid "Manage Favorite Rooms"
+#~ msgstr "Управление переговорными комнатами"
+
+#~ msgid "N_ame:"
+#~ msgstr "_Имя:"
+
+#~ msgid "S_erver:"
+#~ msgstr "_Сервер:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "_Псевдоним:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Комната:"
+
+#~ msgid "-"
+#~ msgstr "-"
+
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>О программе</b>"
+
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "<b>Информация об используемой программе</b>"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>О программе</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>Языки</b>"
+
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Личная информация</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>Соединение</b>"
+
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Пример: Mikael или user@server.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Учётная запись:"
+
+#~ msgid "Add Contact"
+#~ msgstr "_Добавить собеседника"
+
+#, fuzzy
+#~ msgid "Alia_s:"
+#~ msgstr "Прозвище:"
+
+#~ msgid "Avatar:"
+#~ msgstr "Аватар:"
+
+#~ msgid "Ch_at"
+#~ msgstr "_Разговор"
+
+#~ msgid "Client:"
+#~ msgstr "Программа:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "Собеседники"
+
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Присоединяться при _запуске"
+
+#~ msgid "Contacts"
+#~ msgstr "Собеседники"
+
+#~ msgid "Country:"
+#~ msgstr "Страна:"
+
+#~ msgid "Decide _Later"
+#~ msgstr "Решить _позже"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "_Добавить собеседника"
+
+#~ msgid "Edit Groups"
+#~ msgstr "Правка групп"
+
+#~ msgid "Email:"
+#~ msgstr "Электронная почта:"
+
+#~ msgid "ID:"
+#~ msgstr "ID:"
+
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr "Вы можете отложить решение до следующего запуска приложения."
+
+#~ msgid "Name:"
+#~ msgstr "Имя:"
+
+#~ msgid "OS:"
+#~ msgstr "Операционная система:"
+
+#~ msgid "Personal Details"
+#~ msgstr "Личная информация"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "Регистрация"
+
+#~ msgid "Search"
+#~ msgstr "Поиск"
+
+#~ msgid "Spell Checker"
+#~ msgstr "Проверка орфографии"
+
+#~ msgid "Subscription Request"
+#~ msgstr "Запрос на подписку"
+
+#~ msgid "Suggestions for the word:"
+#~ msgstr "Предложить слово:"
+
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "Это фильтр для списка собеседников. Можно использовать части имен или "
+#~ "идентификаторов, например \"jabber.org\" для поиска всех собеседников, "
+#~ "использующих этот сервер."
+
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Этим именем будет называться собеседник в вашем списке."
+
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr ""
+#~ "Это имя будет использовано для вашей идентификации в окнах разговоров."
+
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr ""
+#~ "Это имя будет использовано для вашей идентификации когда новые "
+#~ "собеседники просматривают информацию о вас."
+
+#~ msgid "Use system pro_xy"
+#~ msgstr "Использовать системный про_кси сервер"
+
+#~ msgid "Version:"
+#~ msgstr "Версия:"
+
+#~ msgid "View Previous Conversations"
+#~ msgstr "Посмотреть предыдущие беседы"
+
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Какую учётную запись вы хотите использовать?"
+
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr ""
+#~ "Вы не подписаны на получение информации о состоянии этого собеседника."
+
+#~ msgid "_Connect"
+#~ msgstr "_Соединиться"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Описание:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Отсоединиться"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "Электронная почта:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Введите имя или идентификатор пользователя, которому вы хотите послать "
+#~ "сообщение:"
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "Порт:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "_Имя:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Группа:"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Псевдоним:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Пароль:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "Новое сообщение"
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Подписаться"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Вебсайт:"
+
+#, fuzzy
+#~ msgid "irc account settings"
+#~ msgstr "Редактировать информацию об учётной записи"
+
+#~ msgid "Preset status messages"
+#~ msgstr "Предустановленные сообщения о состоянии"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Предустановленные сообщения о состоянии."
+
+#~ msgid "Perhaps you are trying to connect to the wrong port?"
+#~ msgstr "Возможно, вы пытаетесь подсоединиться к другому порту."
+
+#~ msgid "Perhaps the service is not currently running?"
+#~ msgstr "Возможно, сервис сейчас не действует."
+
+#~ msgid "Check your connection details."
+#~ msgstr "Проверьте настройки вашего соединения."
+
+#~ msgid "Perhaps the server is not running this service."
+#~ msgstr "Возможно, сервис не активен на данном сервере."
+
+#~ msgid "Check your username and password are correct."
+#~ msgstr "Проверьте правильность имени пользователя и пароля."
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s будет добавлен в список собеседников."
+
+#~ msgid "%s ID of new contact:"
+#~ msgstr "%s ID нового собеседника:"
+
+#~ msgid "Example: %s"
+#~ msgstr "Пример: %s"
+
+#~ msgid "Show accounts and pending connections"
+#~ msgstr "Показать учётные записи и ожидающие соединения"
+
+#~ msgid "You have no Instant Messaging accounts configured!"
+#~ msgstr "Не создано ни одной учётной записи системы обмена сообщениями!"
+
+#~ msgid ""
+#~ "Next you will be presented with the Account Information dialog to set "
+#~ "your details up."
+#~ msgstr ""
+#~ "Далее вам будет представлен диалог, где нужно заполнить детали вашей "
+#~ "учётной записи."
+
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Введите приветствие для:\n"
+#~ "%s"
+
+#~ msgid "Favourite"
+#~ msgstr "Фаворит"
+
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/_Информация о собеседнике"
+
+#~ msgid "/Re_name Contact"
+#~ msgstr "/Пе_реименовать собеседника"
+
+#~ msgid "/_Edit Groups"
+#~ msgstr "/_Правка групп"
+
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "/Просмотреть предыд_ущие беседы"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Введите новый псевдоним для собеседника\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Редактирование групп для %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Журнал разговоров"
+
+#~ msgid "Registering account"
+#~ msgstr "Регистрация учётной записи"
+
+#~ msgid "Add to _favourites"
+#~ msgstr "Добавить к предпочитаемым"
+
+#~ msgid ""
+#~ "Customize your own nickname, the server and chatroom which you wish to "
+#~ "join."
+#~ msgstr ""
+#~ "Настройте ваш псевдоним, сервер и комнату, к которым вы желаете "
+#~ "присоединиться."
+
+#~ msgid "Edit your chat room details:"
+#~ msgstr "Редактировать информацию о комнате:"
+
+#~ msgid "Na_me:"
+#~ msgstr "Имя:"
+
+#~ msgid "New Chat Room"
+#~ msgstr "Создать комнату"
+
+#~ msgid ""
+#~ "Pick a saved chat room from the presets available below and click Join to "
+#~ "start chatting."
+#~ msgstr ""
+#~ "Выберите сохранённую комнату из списка и нажмите на «Войти в комнату» для "
+#~ "начала беседы."
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Запрос информации, подождите...</b>"
+
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Пример:</span>"
+
+#~ msgid "Account Name"
+#~ msgstr "Имя учётной записи"
+
+#~ msgid "Connection Details"
+#~ msgstr "Настройки соединения"
+
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "У вас уже есть учётная запись на сервере?"
+
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr "Введите порт, используемый для соединения в данной учётной записи"
+
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr "Введите сервер, используемый для соединения в данной учётной записи"
+
+#~ msgid "Enter the user's contact ID:"
+#~ msgstr "Введите идентификатор пользователя:"
+
+#~ msgid "Enter your real name here"
+#~ msgstr "Введите ваше настоящее имя"
+
+#~ msgid "Finished"
+#~ msgstr "Завершено"
+
+#~ msgid "For increased security, enable this option"
+#~ msgstr "Для большей безопасности, включите этот параметр"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip это современный клиент системы обмена сообщениями Jabber.\n"
+#~ "\n"
+#~ "Сейчас мы поможем вам настроить Gossip для соединения с вашим сервером "
+#~ "Jabber.\n"
+#~ "\n"
+#~ "Нажмите кнопку «Далее», чтобы начать."
+
+#~ msgid ""
+#~ "If you have another machine on your network which 'proxies' the "
+#~ "connection to the internet and you want to use it, enable this option"
+#~ msgstr ""
+#~ "Если в вашей сети есть другая машина-прокси, которая перенаправляет ваше "
+#~ "соединение в интернет и вы хотите использовать её, включите этот параметр."
+
+#~ msgid ""
+#~ "If you need to set specific connection details, like a different server "
+#~ "or port, you can configure that here:"
+#~ msgstr ""
+#~ "Здесь можно задать особенные настройки соединения, например, другой "
+#~ "сервер или порт:"
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "Чтобы получать информацию о присутствии пользователя, должен быть "
+#~ "отправлен запрос. Пока запрос не подтвержден, пользователь в вашем списке "
+#~ "собеседников всё время будет в состоянии «Выключен»."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "В какую группу поместить этого собеседника?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "Jabber ID:"
+
+#~ msgid ""
+#~ "Leave this blank if you don't want your password stored on a public "
+#~ "machine. If you decide to do this, you will be prompted each time you "
+#~ "connect for a password"
+#~ msgstr ""
+#~ "Оставьте пустым, если не хотите чтобы ваш пароль сохранялся на общей "
+#~ "машине. Пароль будет запрашиваться каждый раз при подключении"
+
+#~ msgid "Nickname:"
+#~ msgstr "Псевдоним:"
+
+#~ msgid "Port:"
+#~ msgstr "Порт:"
+
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr ""
+#~ "Нажмите «Подписаться» для получения информации о статусе собеседников"
+
+#~ msgid "Registering Account"
+#~ msgstr "Регистрация учётной записи"
+
+#~ msgid "Resource:"
+#~ msgstr "Ресурс:"
+
+#~ msgid "Sending request"
+#~ msgstr "Отправка запроса"
+
+#~ msgid "Server:"
+#~ msgstr "Сервер:"
+
+#~ msgid "Web Site:"
+#~ msgstr "Веб-страница:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Добро пожаловать в Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Какая система обмена сообщениями используется этим собеседником?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Как вас зовут?"
+
+#~ msgid ""
+#~ "What name do you want to use to identify this account?\n"
+#~ "\n"
+#~ "This name could be something associated with the service provider, for "
+#~ "example, <b>Google</b>."
+#~ msgstr ""
+#~ "Каким именем вы хотите назвать эту учётную запись?\n"
+#~ "\n"
+#~ "Например, можно назвать её именем провайдера услуг, скажем, <b>Google</b>."
+
+#~ msgid "What password do you want to use?"
+#~ msgstr "Какой пароль вы хотите использовать?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Какое имя пользователя вы используете?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Какое имя пользователя вы хотите использовать?"
+
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "В какую учётную запись поместить этого собеседника?"
+
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Вы можете изменить параметры вашей учётной записи, выбрав пункт меню "
+#~ "Правка->Учётные записи."
+
+#~ msgid ""
+#~ "You need to set a name for the connection, for example, <b>Home</b> or "
+#~ "<b>Laptop</b>."
+#~ msgstr ""
+#~ "Нужно задать имя для соединения, например, <b>Дом</b> или <b>Работа</b>."
+
+#~ msgid "Your Account"
+#~ msgstr "Ваша учётная запись"
+
+#~ msgid "Your Identity"
+#~ msgstr "Ваши данные"
+
+#~ msgid "Your new account has now been set up."
+#~ msgstr "Ваша новая учётная запись установлена."
+
+#~ msgid "_Forget"
+#~ msgstr "_Забыть"
+
+#~ msgid "_Group Chat"
+#~ msgstr "_Групповая беседа"
+
+#~ msgid "_No"
+#~ msgstr "_Нет"
+
+#~ msgid "_Search..."
+#~ msgstr "_Найти..."
+
+#~ msgid "_Yes"
+#~ msgstr "_Да"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Информация о собеседнике %s"
+
+#~ msgid "Respond"
+#~ msgstr "Ответил"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Gossip - комнаты"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Не воспроизводить звуки в состоянии «ушёл»"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Не воспроизводить звуки в состоянии «занят»"
+
+#~ msgid "Height of main window"
+#~ msgstr "Высота главного окна"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "Позиция главного окна по оси X"
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "Позиция главного окна по оси Y"
+
+#~ msgid "The width of the main window."
+#~ msgstr "Ширина главного окна."
+
+#~ msgid "Whether spell checking should be turned on."
+#~ msgstr "Проверять орфографию или нет"
+
+#~ msgid "Width of the main window"
+#~ msgstr "Ширина главного окна"
+
+#~ msgid "X position of main window"
+#~ msgstr "Позиция главного окна по оси X"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Позиция главного окна по оси Y"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip, программа для обмена сообщениями"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "Со_хранить эту комнату"
+
+#~ msgid "Requested Information"
+#~ msgstr "Запрошенная информация"
+
+#, fuzzy
+#~ msgid "/_Invite to Chat Conference"
+#~ msgstr "/Пригласить на _конференцию"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "_Отправить сообщение..."
+
+#~ msgid "%s has gone offline"
+#~ msgstr "%s отключился"
+
+#~ msgid "Contact _Information"
+#~ msgstr "_Информация о собеседнике"
+
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>Звук</b>"
+
+#~ msgid "Check spelling while I _type"
+#~ msgstr "_Автоматически проверять орфографию"
+
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - учетные записи"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "_Зайти в комнату..."
+
+#~ msgid "Por_t:"
+#~ msgstr "Пор_т:"
+
+#~ msgid "Requested information."
+#~ msgstr "Информация запрошена."
+
+#~ msgid "Requesting contact information, please wait..."
+#~ msgstr "Получение личной информации, пожалуйста, подождите..."
+
+#~ msgid "Written by:"
+#~ msgstr "Написано:"
+
+#~ msgid "Artwork by:"
+#~ msgstr "Графика:"
+
+#~ msgid "Translated by:"
+#~ msgstr "Перевод:"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sРазговор - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Показать _журнал"
+
+#~ msgid "Afrikaans"
+#~ msgstr "Африкаанс"
+
+#~ msgid "Amharic"
+#~ msgstr "Амхарский"
+
+#~ msgid "Arabic"
+#~ msgstr "Арабский"
+
+#~ msgid "Azerbaijani"
+#~ msgstr "Азербайджанский"
+
+#~ msgid "Belarusian"
+#~ msgstr "Белорусский"
+
+#~ msgid "Bulgarian"
+#~ msgstr "Болгарский"
+
+#~ msgid "Bengali"
+#~ msgstr "Бенгальский"
+
+#~ msgid "Breton"
+#~ msgstr "Бретонский"
+
+#~ msgid "Bosnian"
+#~ msgstr "Боснийский"
+
+#~ msgid "Catalan"
+#~ msgstr "Каталанский"
+
+#~ msgid "Czech"
+#~ msgstr "Чешский"
+
+#~ msgid "Welsh"
+#~ msgstr "Уэльсский"
+
+#~ msgid "Danish"
+#~ msgstr "Датский"
+
+#~ msgid "German"
+#~ msgstr "Немецкий"
+
+#~ msgid "German (Austria)"
+#~ msgstr "Немецкий (Австрия)"
+
+#~ msgid "German (Germany)"
+#~ msgstr "Немецкий (Германия)"
+
+#~ msgid "German (Swiss)"
+#~ msgstr "Немецкий (Швейцария)"
+
+#~ msgid "Greek"
+#~ msgstr "Греческий"
+
+#~ msgid "English"
+#~ msgstr "Английский"
+
+#~ msgid "English (Canadian)"
+#~ msgstr "Английский (Канада)"
+
+#~ msgid "English (British)"
+#~ msgstr "Английский (Великобритания)"
+
+#~ msgid "English (American)"
+#~ msgstr "Английский (США)"
+
+#~ msgid "Esperanto"
+#~ msgstr "Эсперанто"
+
+#~ msgid "Spanish"
+#~ msgstr "Испанский"
+
+#~ msgid "Estonian"
+#~ msgstr "Эстонский"
+
+#~ msgid "Basque"
+#~ msgstr "Баскский"
+
+#~ msgid "Persian"
+#~ msgstr "Персидский"
+
+#~ msgid "Finnish"
+#~ msgstr "Финский"
+
+#~ msgid "French"
+#~ msgstr "Французский"
+
+#~ msgid "French (France)"
+#~ msgstr "Французский (Франция)"
+
+#~ msgid "French (Swiss)"
+#~ msgstr "Французский (Швейцария)"
+
+#~ msgid "Irish Gaelic"
+#~ msgstr "Ирландский"
+
+#~ msgid "Scots Gaelic"
+#~ msgstr "Шотладский"
+
+#~ msgid "Gujarati"
+#~ msgstr "Гуджарати"
+
+#~ msgid "Manx Gaelic"
+#~ msgstr "Мэнский"
+
+#~ msgid "Hebrew"
+#~ msgstr "Иврит"
+
+#~ msgid "Hindi"
+#~ msgstr "Хинди"
+
+#~ msgid "Croatian"
+#~ msgstr "Хорватский"
+
+#~ msgid "Hungarian"
+#~ msgstr "Венгерский"
+
+#~ msgid "Indonesian"
+#~ msgstr "Индонезийский"
+
+#~ msgid "Icelandic"
+#~ msgstr "Исландский"
+
+#~ msgid "Italian"
+#~ msgstr "Итальянский"
+
+#~ msgid "Japanese"
+#~ msgstr "Японский"
+
+#~ msgid "Georgian"
+#~ msgstr "Грузинский"
+
+#~ msgid "Kannada"
+#~ msgstr "Каннада"
+
+#~ msgid "Korean"
+#~ msgstr "Корейский"
+
+#~ msgid "Kurdish"
+#~ msgstr "Курдский"
+
+#~ msgid "Cornish"
+#~ msgstr "Корнийский"
+
+#~ msgid "Limburgish"
+#~ msgstr "Лимбургский"
+
+#~ msgid "Lithuanian"
+#~ msgstr "Литовский"
+
+#~ msgid "Latvian"
+#~ msgstr "Латвийский"
+
+#~ msgid "Maori"
+#~ msgstr "Маори"
+
+#~ msgid "Macedonian"
+#~ msgstr "Македонский"
+
+#~ msgid "Malayalam"
+#~ msgstr "Малайялам"
+
+#~ msgid "Mongolian"
+#~ msgstr "Монгольский"
+
+#~ msgid "Marathi"
+#~ msgstr "Маратхи"
+
+#~ msgid "Malay"
+#~ msgstr "Малайский"
+
+#~ msgid "Norwegian (Bokmal)"
+#~ msgstr "Норвежский (Букмол)"
+
+#~ msgid "Nepali"
+#~ msgstr "Непальский"
+
+#~ msgid "Dutch"
+#~ msgstr "Датский"
+
+#~ msgid "Norwegian"
+#~ msgstr "Норвежский"
+
+#~ msgid "Norwegian (Nynorsk)"
+#~ msgstr "Норвежский (Нюнорск)"
+
+#~ msgid "Oriya"
+#~ msgstr "Ория"
+
+#~ msgid "Punjabi"
+#~ msgstr "Пенджабский"
+
+#~ msgid "Polish"
+#~ msgstr "Польский"
+
+#~ msgid "Portuguese"
+#~ msgstr "Португальский"
+
+#~ msgid "Portuguese (Portugal)"
+#~ msgstr "Португальский (Португалия)"
+
+#~ msgid "Portuguese (Brazil)"
+#~ msgstr "Португальский (Бразилия)"
+
+#~ msgid "Romanian"
+#~ msgstr "Румынский"
+
+#~ msgid "Russian"
+#~ msgstr "Русский"
+
+#~ msgid "Kinyarwanda"
+#~ msgstr "Киньяруанда"
+
+#~ msgid "Slovak"
+#~ msgstr "Словацкий"
+
+#~ msgid "Slovenian"
+#~ msgstr "Словенский"
+
+#~ msgid "Albanian"
+#~ msgstr "Албанский"
+
+#~ msgid "Serbian"
+#~ msgstr "Сербский"
+
+#~ msgid "Swedish"
+#~ msgstr "Шведский"
+
+#~ msgid "Tamil"
+#~ msgstr "Тамильский"
+
+#~ msgid "Telugu"
+#~ msgstr "Телугу"
+
+#~ msgid "Thai"
+#~ msgstr "Тайский"
+
+#~ msgid "Turkmen"
+#~ msgstr "Туркменский"
+
+#~ msgid "Turkish"
+#~ msgstr "Турецкий"
+
+#~ msgid "Ukrainian"
+#~ msgstr "Украинский"
+
+#~ msgid "Vietnamese"
+#~ msgstr "Вьетнамский"
+
+#~ msgid "Walloon"
+#~ msgstr "Валлонский"
+
+#~ msgid "Xhosa"
+#~ msgstr "Хоса"
+
+#~ msgid "Yiddish"
+#~ msgstr "Идиш"
+
+#~ msgid "Chinese Simplified"
+#~ msgstr "Китайский упрощенный"
+
+#~ msgid "Chinese Traditional"
+#~ msgstr "Китайский традиционный"
+
+#~ msgid "View Lo_g"
+#~ msgstr "Просмотреть _журнал"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - совместная беседа"
+
+#~ msgid "Gossip - New Chatroom"
+#~ msgstr "Gossip - новая комната"
+
+#~ msgid "Status:"
+#~ msgstr "Состояние:"
+
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Gossip - добавление собеседника"
+
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "Gossip - информация о собеседнике"
+
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - правка групп"
+
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - новая учётная запись"
+
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - новое сообщение"
+
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Gossip - личная информация"
+
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Gossip - параметры"
+
+#~ msgid "Gossip - Spell Checker"
+#~ msgstr "Gossip - проверка орфографии"
+
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - статус"
diff --git a/trunk/po/sl.po b/trunk/po/sl.po
new file mode 100644
index 000000000..633100c42
--- /dev/null
+++ b/trunk/po/sl.po
@@ -0,0 +1,1737 @@
+#
+# Translators:
+# Matej Urbančič <mateju@svn.gnome.org>, 2006 - 2008.
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-10-18 03:41+0100\n"
+"PO-Revision-Date: 2008-05-02 11:28+0100\n"
+"Last-Translator: Matej Urbančič <mateju@svn.gnome.org>\n"
+"Language-Team: Slovenian GNOME Translation Team <gnome-si@googlegroups.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%100==4 ? 3 : 0);\n"
+"X-Poedit-Language: Slovenian\n"
+"X-Poedit-Country: SLOVENIA\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Trenutna sporočila Empathy"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Pošlji in sprejmi trenutna sporočila"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Vedno odpri ločeno pogovorno okno za nov klepet."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Character to add after nickname when using nick completion (tab) in group chat."
+msgstr "Znak, ki naj bo dodan na koncu vzdevka ob uporabi možnosti zaključevanja (zavihek) vzdevka ob skupinskem klepetu."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Tema klepetalnega okna"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should auto-connect on startup"
+msgstr "Preveri ali naj se Empathy samodejno poveže ob zagonu."
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Preveri ali naj bo uporabljen upravljavec omrežja."
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Preveri ali je ustvarjen Salut račun."
+
+#: ../data/empathy.schemas.in.h:7
+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/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Skrči seznam stikov"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Kriterij razvrščanja seznama prijateljev"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Privzeta mapa z izbiro slik podob"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Omogoči pojavno okno, kadar je stik dosegljiv."
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Omogoči zvok ob odsotnosti."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Omogoči zvok ob zasedenosti."
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Omogoči črkovalnik"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Skrij glavno okno"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Skrivanje glavnega okna."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Znak na koncu vzdevka"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Odpri nov klepet v ločenem oknu"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Prikaži podobe"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Prikaži namig ob zapiranju glavnega okna."
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Pokaži tudi nepovezane prijatelje"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Jeziki za črkovanje"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Zadnja mapa iz katere je bila izbrana podoba."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Tema, ki je uporabljena za prikaz pogovora v klepetalnem oknu"
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Uporabi grafične smeške"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Uporabi obvestilne zvoke"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Uporabi temo za klepetalnice"
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not Empathy should automatically log in to your accounts on startup."
+msgstr "Ali naj se program samodejno prijavi v račun ob zagonu?"
+
+#: ../data/empathy.schemas.in.h:29
+msgid "Whether or not the Salut account has been created on the first Empathy run."
+msgstr "Ali je bil Salut račun ustvarjen ob prvem zagonu Empathy?"
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not the network manager should be used to automatically disconnect/reconnect."
+msgstr "Ali naj upravitelj omrežja samodejno poveže in prekine povezavo?"
+
+#: ../data/empathy.schemas.in.h:31
+msgid "Whether or not to check words typed against the languages you want to check with."
+msgstr "Ali naj se preverja črkovanje besed v določenem jeziku?"
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether or not to convert smileys into graphical images in conversations."
+msgstr "Ali naj bodo smeški pretvorjeni v sličice?"
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Ali naj se predvaja zvok ob prejetju novega sporočila?"
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Ali nas se predvaja zvok ob odsotnosti?"
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Ali naj se predvaja zvok ob zasedenosti."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Ali naj se prikaže pojavno okno, kadar je stik na voljo?"
+
+#: ../data/empathy.schemas.in.h:37
+msgid "Whether or not to show avatars for contacts in the contact list and chat windows."
+msgstr "Ali naj se prikaže podoba za stike na seznamu in na oknu klepeta?"
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Ali naj se prikaže stike, ki niso povezani?"
+
+#: ../data/empathy.schemas.in.h:39
+msgid "Whether or not to show the message dialog about closing the main window with the 'x' button in the title bar."
+msgstr "Ali naj bo prikazano pogovorno okno sporočila o zapiranju glavnega okna preko 'x' gumba na naslovni vrstici?"
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Ali naj bo prikazan seznam stikov v skrčenem načinu?"
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Ali naj bo uporabljena tema za klepetalnice?"
+
+#: ../data/empathy.schemas.in.h:42
+msgid "Which criterium to use when sorting the contact list. Default is to use sort by the contact's name with the value \"name\". A value of \"state\" will sort the contact list by state."
+msgstr "Kateri kriterij naj bo uporabljen za razvrščanje seznama stikov. Privzeto je uporabljeno razvrščanje po imenu stika z vrednostjo \"ime\". Vrednost \"stanje\" razvrsti seznam glede na to lastnost."
+
+#: ../libempathy/empathy-tp-contact-list.c:669
+#: ../src/empathy.c:188
+msgid "People nearby"
+msgstr "Uporabniki v bližini"
+
+#: ../libempathy/empathy-utils.c:466
+msgid "Available"
+msgstr "N_a voljo"
+
+#: ../libempathy/empathy-utils.c:468
+msgid "Busy"
+msgstr "Zaseden"
+
+#: ../libempathy/empathy-utils.c:471
+msgid "Away"
+msgstr "Odsoten"
+
+#: ../libempathy/empathy-utils.c:473
+msgid "Hidden"
+msgstr "Skrit"
+
+#: ../libempathy/empathy-utils.c:476
+msgid "Offline"
+msgstr "Nepovezano"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:334
+msgid "All"
+msgstr "Vse"
+
+#: ../libempathy-gtk/empathy-account-widget.c:284
+#: ../libempathy-gtk/empathy-account-widget.c:329
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Napredno</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Pozabi geslo in počisti vnos."
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "_Geslo:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+msgid "Screen _Name:"
+msgstr "Zaslonsko _ime:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Port:"
+msgstr "_Vrata:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+#: ../src/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Strežnik:"
+
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "I_D prijave:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "ICQ _UIN:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "_Charset:"
+msgstr "_Kodni nabor:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:245
+msgid "New Network"
+msgstr "Novo omrežje"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Omrežje</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Strežniki</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Kodni nabor:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Ustvari novo IRC omrežje"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Uredi izbrano IRC omrežje"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Omrežje"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Omrežje:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Vzdevek:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Geslo:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Zapusti sporočilo"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "_Pravo ime:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Odstrani izbrano IRC omrežje"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Prepiši nastavitve strežnika</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "_Prednost:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "_Vir:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Uporabi šifriranje SS_L"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "_Zahtevano šifriranje (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Prezri SSL napake certifikata"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_Email:"
+msgstr "_e-Pošta:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Ime:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_ID Jabber:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "_Priimek:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../src/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "_Vzdevek:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "_Objavljeno ime:"
+
+#. look up the DNS SRV record at the service's domain for the host name of a STUN server.
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+msgid "Discover STUN"
+msgstr "STUN odkrivanje"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+msgid "Stun Server:"
+msgstr "Strežnik Stun:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+msgid "Stun port:"
+msgstr "Stun vrata:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+msgid "_Username:"
+msgstr "_Uporabniško ime:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "_Japoski strežnik:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "Uporabi _Yahoo Japan"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Ignore conference and chatroom invitations"
+msgstr "_Prezri konferenčna vabila in vabila klepetalnic"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Room List locale:"
+msgstr "_Locale seznama sob:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:226
+msgid "To add a new account, you can click on the 'Add' button and a new entry will be created for you to start configuring."
+msgstr "Za dodajanje novega računa lahko kliknete na gumb 'Dodaj' in nov vnos bo ustvarjen za začetek nastavitev."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:230
+msgid "To add a new account, you first have to install a backend for each protocol you want to use."
+msgstr "Za dodajanje novega računa morate najprej namestiti hrbtenico za vsak protokol, ki ga želite uporabiti."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Ni izbranega računa</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:238
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"V primeru, da ne želite dodati računa, enostavno kliknite na račun, ki ga želite nastaviti s seznama na levi."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:244
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Ni nastavljenega računa</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:424
+msgid "Enabled"
+msgstr "Omogočeno"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:434
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Računi"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:916
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Odstranili boste vaš račun %s!\n"
+"Ali zares želite nadaljevati?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:922
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still be available."
+msgstr ""
+"Vsi pogovori in vse izbrane sobe NE bodo izbrisane, če se odločite nadaljevati.\n"
+"\n"
+"V primeru, da se odločite povrniti račun, bodo podatki še vedno na voljo.."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Nov račun</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Nastavitve</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "_Ustvari"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want to configure in the list on the left."
+msgstr ""
+"Za dodajanje računa lahko kliknete na gumb 'Dodaj' in ustvarjen bo nov vnos pripravljen za prikrojevanje.\n"
+"\n"
+"V primeru, da ne želite dodati računa, enostavno kliknite na račun, ki ga želite nastaviti s seznama na levi."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Vrsta:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:457
+msgid "Select Your Avatar Image"
+msgstr "Izberite sliko podobe"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:460
+msgid "No Image"
+msgstr "Brez slike"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:520
+msgid "Images"
+msgstr "Slike"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:524
+msgid "All Files"
+msgstr "Vse datoteke"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:294
+msgid "Click to enlarge"
+msgstr "Kliknite za povečavo"
+
+#: ../libempathy-gtk/empathy-chat.c:526
+msgid "offline"
+msgstr "nepovezan"
+
+#: ../libempathy-gtk/empathy-chat.c:529
+msgid "invalid contact"
+msgstr "neveljaven stik"
+
+#: ../libempathy-gtk/empathy-chat.c:532
+msgid "permission denied"
+msgstr "ni dovoljenja"
+
+#: ../libempathy-gtk/empathy-chat.c:535
+msgid "too long message"
+msgstr "predolgo sporočilo"
+
+#: ../libempathy-gtk/empathy-chat.c:538
+msgid "not implemented"
+msgstr "ni del programa"
+
+#: ../libempathy-gtk/empathy-chat.c:541
+msgid "unknown"
+msgstr "neznano"
+
+#: ../libempathy-gtk/empathy-chat.c:545
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Napaka med pošiljanjem sporočila '%s': %s"
+
+#: ../libempathy-gtk/empathy-chat.c:575
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Tema določena na: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:577
+msgid "No topic defined"
+msgstr "Ni določene teme"
+
+#: ../libempathy-gtk/empathy-chat.c:983
+msgid "Insert Smiley"
+msgstr "Vstavi smeška"
+
+#: ../libempathy-gtk/empathy-chat.c:1030
+msgid "_Check Word Spelling..."
+msgstr "_Preveri črkovanje"
+
+#: ../libempathy-gtk/empathy-chat.c:1131
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s se je pridružil klepatalnici"
+
+#: ../libempathy-gtk/empathy-chat.c:1134
+#, c-format
+msgid "%s has left the room"
+msgstr "%s je zapustil klepetalnico"
+
+#: ../libempathy-gtk/empathy-chat.c:1248
+#: ../src/empathy.c:70
+#: ../src/empathy-call-window.c:389
+msgid "Disconnected"
+msgstr "Povezava prekinjena"
+
+#: ../libempathy-gtk/empathy-chat.c:1621
+msgid "Connected"
+msgstr "Povezano"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Tema:</b>"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Skupinski klepet"
+
+#: ../libempathy-gtk/empathy-chat-view.c:433
+msgid "_Copy Link Address"
+msgstr "_Kopiraj naslov povezave"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Open Link"
+msgstr "_Odpri povezavo"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:180
+msgid "Personal Information"
+msgstr "Osebni podatki"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+msgid "Edit Contact Information"
+msgstr "_Uredi podrobnosti stika"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:186
+msgid "Contact Information"
+msgstr "Podatki o stiku"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:281
+msgid "I would like to add you to my contact list."
+msgstr "Želel bi vas dodati na seznam stikov."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:305
+msgid "New Contact"
+msgstr "Nov stik"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Odloči se _kasneje"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Zahteva po naročilu"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1161
+#, c-format
+msgid "Do you really want to remove the group '%s'?"
+msgstr "Ali zares želite odstraniti skupino '%s'?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1163
+msgid "Removing group"
+msgstr "Odstranjevanje skupine"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1210
+#: ../libempathy-gtk/empathy-contact-list-view.c:1290
+msgid "_Remove"
+msgstr "_Odstrani"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1240
+#, c-format
+msgid "Do you really want to remove the contact '%s'?"
+msgstr "Zares želite odstraniti stik '%s'?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1242
+msgid "Removing contact"
+msgstr "Odstranjevanje stika"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1247
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Žal, vas ne želim vas več imeti v seznamu mojih stikov."
+
+#: ../libempathy-gtk/empathy-contact-menu.c:108
+#: ../src/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_Klepet"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:129
+msgid "_Call"
+msgstr "_Klic"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:168
+#: ../src/empathy-main-window.glade.h:17
+msgid "_View Previous Conversations"
+msgstr "_Poglej predhodne pogovore"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:196
+msgid "Infor_mation"
+msgstr "_Podrobnosti"
+
+#: ../libempathy-gtk/empathy-contact-menu.c:223
+#: ../src/empathy-chat-window.glade.h:14
+#: ../src/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr "_Uredi"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:694
+msgid "Select"
+msgstr "Izberi"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:704
+#: ../src/empathy-main-window.c:628
+msgid "Group"
+msgstr "Skupina"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Podrobnosti odjemalca</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Podrobnosti stika</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Stik</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Skupine</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+#: ../src/empathy-chatrooms-window.glade.h:1
+#: ../src/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Račun:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Privzeto ime:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "_Rojstni dan:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Odjemalec:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Podatki o stiku"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "E-pošta:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Polno ime:"
+
+#. Identifier to connect to Instant Messaging network
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Identifier:"
+msgstr "Določilo:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "Information requested..."
+msgstr "Zahtevane podrobnosti ..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid "OS:"
+msgstr "OS:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Select the groups you want this contact to appear in, you can select more than one group or no groups."
+msgstr "Izberite skupino v kateri želite, da je postavljen stik. Izberete lahko eno ali več skupin, lahko pa polje tudi pustite prazno."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Version:"
+msgstr "Različica:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
+msgid "Web site:"
+msgstr "Spletna stran:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:284
+msgid "new server"
+msgstr "nov strežnik"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:513
+msgid "Server"
+msgstr "Strežnik"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:528
+msgid "Port"
+msgstr "Vrata"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:541
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+msgid "Account"
+msgstr "Račun"
+
+#: ../libempathy-gtk/empathy-log-window.c:504
+#: ../src/empathy-chat-window.c:276
+msgid "Conversation"
+msgstr "Pogovor"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+msgid "Date"
+msgstr "Datum"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Conversations"
+msgstr "Pogovori"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Previous Conversations"
+msgstr "Predhodni pogovori"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:5
+msgid "Search"
+msgstr "Poišči"
+
+#. Searching *for* something
+#: ../libempathy-gtk/empathy-log-window.glade.h:7
+msgid "_For:"
+msgstr "_Za:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Kliči"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+#: ../src/empathy-chat-window.glade.h:2
+msgid "Chat"
+msgstr "Klepet"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "ID stika:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Nov pogovor"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:688
+msgid "Custom messages..."
+msgstr "Sporočila po meri ..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Sporočilo po meri"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Sporočilo:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Shrani sporočilo"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Status:"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:88
+msgid "Word"
+msgstr "Beseda"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:265
+msgid "Suggestions for the word"
+msgstr "Predlog za besedo"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Črkovalnik"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Predlog za besedo:"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:746
+#: ../libempathy-gtk/empathy-theme-irc.c:294
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:74
+msgid "Classic"
+msgstr "Klasično"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:75
+msgid "Simple"
+msgstr "Enostavno"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:76
+msgid "Clean"
+msgstr "Počisti"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:77
+msgid "Blue"
+msgstr "Modra"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1326
+msgid "Unable to open URI"
+msgstr "Ni mogoče odpreti naslova URI"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Trenutni locale"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Arabsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Armensko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Baltsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Keltsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Srednjeevropsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Kitajsko poenostavljeno"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Kitajsko tradicionalno"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Hrvaško"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Cirilica"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Cirilica/Rusko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Cirilica/ukrajinsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Gruzijsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Grško"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Gujaratsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhijsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Hebrejsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Hebrejsko vizualni"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindujsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Islandsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "japonsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Korejsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Nordijsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Perzijsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Romunsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Južnoevropsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Tajsko"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Turško"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Zahodnjaško"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnamsko"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid "The contact to display in the applet. Empty means no contact is displayed."
+msgstr "Stik, ki naj bo prikazan v apletu. Prazno polje pomeni, da stik ni prikazan."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "Oznaka podobe stika. Prazno polje pomeni, da stik nima določene podobe."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megafon"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:420
+msgid "Talk!"
+msgstr "Talk!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_O Programu"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Podrobnosti"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+#: ../src/empathy-main-window.glade.h:15
+msgid "_Preferences"
+msgstr "_Lastnosti"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Prisotnost"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:106
+msgid "Set your own presence"
+msgstr "Določite svojo prisotnost"
+
+#: ../src/empathy.c:73
+msgid "Invalid handle"
+msgstr "Neveljavno držalo"
+
+#: ../src/empathy.c:76
+msgid "No matching connection"
+msgstr "Ni primerne povezave"
+
+#: ../src/empathy.c:79
+msgid "Invalid account"
+msgstr "Neveljaven račun"
+
+#: ../src/empathy.c:82
+msgid "Presence failure"
+msgstr "Napaka prisotnosti"
+
+#: ../src/empathy.c:85
+msgid "No accounts"
+msgstr "Ni računov"
+
+#: ../src/empathy.c:88
+#: ../src/empathy-main-window.c:896
+msgid "Network error"
+msgstr "Napaka omrežja"
+
+#: ../src/empathy.c:91
+msgid "Contact does not support voice"
+msgstr "Stik ne podpira zvoka"
+
+#: ../src/empathy.c:94
+msgid "Lowmem"
+msgstr "Lowmem"
+
+#: ../src/empathy.c:97
+msgid "Channel request generic error"
+msgstr "Osnovna napaka zahteve kanala"
+
+#: ../src/empathy.c:100
+msgid "Channel banned"
+msgstr "Kanal zavržen"
+
+#: ../src/empathy.c:103
+msgid "Channel full"
+msgstr "Kanal polno zaseden"
+
+#: ../src/empathy.c:106
+msgid "Channel invite only"
+msgstr "Kanal na povabilo"
+
+#: ../src/empathy.c:109
+msgid "Unknown error code"
+msgstr "Neznana napaka kode"
+
+#: ../src/empathy.c:312
+msgid "Don't connect on startup"
+msgstr "Brez samodejne povezave ob zagonu"
+
+#: ../src/empathy.c:324
+msgid "- Empathy Instant Messenger"
+msgstr "- Empathy trenutna sporočila"
+
+#: ../src/empathy-about-dialog.c:64
+msgid "Empathy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version."
+msgstr "Empathy je prosta programska oprema; program lahko razširjate in/ali spreminjate pod pogoji Splošnega dovoljenja GNU (GNU General PublicLicense), kot ga je objavila ustanova Free Software Foundation; bodisi različice 2 ali (po vaši izbiri) katerekoli poznejše različice."
+
+#: ../src/empathy-about-dialog.c:68
+msgid "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details."
+msgstr "Empathy se razširja v upanju, da bo uporaben, vendar BREZ VSAKRŠNEGA JAMSTVA; tudi brez posredne zagotovitve CENOVNE VREDNOSTI ali PRIMERNOSTI ZA DOLOČEN NAMEN. Za podrobnosti glejte besedilo GNU General Public License."
+
+#: ../src/empathy-about-dialog.c:72
+msgid "You should have received a copy of the GNU General Public License along with Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr "Skupaj s tem programom bi morali prejeti izvod Splošnega javnega dovoljenja GNU (GNU General Public License); v primeru da ga niste, pišite na Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+
+#: ../src/empathy-about-dialog.c:100
+msgid "An Instant Messaging client for GNOME"
+msgstr "Empathy odjemalec trenutnega sporočanja za GNOME"
+
+#: ../src/empathy-about-dialog.c:106
+msgid "translator-credits"
+msgstr "Matej Urbančič"
+
+#: ../src/empathy-call-window.c:139
+msgid "Closed"
+msgstr "Zaprto"
+
+#: ../src/empathy-call-window.c:251
+msgid "End this call?"
+msgstr "Ali je klic končan?"
+
+#: ../src/empathy-call-window.c:253
+msgid "Closing this window will end the call in progress."
+msgstr "Z zaprtjem tega okna prekinete trenutno dejavni klic."
+
+#: ../src/empathy-call-window.c:254
+msgid "_End Call"
+msgstr "_Končaj klic"
+
+#: ../src/empathy-call-window.c:305
+msgid "Incoming call"
+msgstr "Dohodni klic"
+
+#: ../src/empathy-call-window.c:307
+#, c-format
+msgid "%s is calling you, do you want to answer?"
+msgstr "%s vas kliče. Ali se želite javiti?"
+
+#: ../src/empathy-call-window.c:313
+msgid "_Reject"
+msgstr "_Zavrni"
+
+#: ../src/empathy-call-window.c:318
+msgid "_Answer"
+msgstr "_Odgovori"
+
+#: ../src/empathy-call-window.c:364
+msgid "Empathy Call"
+msgstr "Empathy klicanje"
+
+#: ../src/empathy-call-window.c:365
+msgid "Readying"
+msgstr "Pripravljanje"
+
+#: ../src/empathy-call-window.c:374
+#, c-format
+msgid "%s - Empathy Call"
+msgstr "%s - Empathy klicanje"
+
+#: ../src/empathy-call-window.c:378
+msgid "Ringing"
+msgstr "Zvonjenje"
+
+#: ../src/empathy-call-window.c:391
+msgid "Connecting"
+msgstr "Povezovanje"
+
+#: ../src/empathy-call-window.glade.h:1
+msgid "#"
+msgstr "#"
+
+#: ../src/empathy-call-window.glade.h:2
+msgid "*"
+msgstr "*"
+
+#: ../src/empathy-call-window.glade.h:3
+msgid "0"
+msgstr "0"
+
+#: ../src/empathy-call-window.glade.h:4
+msgid "1"
+msgstr "1"
+
+#: ../src/empathy-call-window.glade.h:5
+msgid "2"
+msgstr "2"
+
+#: ../src/empathy-call-window.glade.h:6
+msgid "3"
+msgstr "3"
+
+#: ../src/empathy-call-window.glade.h:7
+msgid "4"
+msgstr "4"
+
+#: ../src/empathy-call-window.glade.h:8
+msgid "5"
+msgstr "5"
+
+#: ../src/empathy-call-window.glade.h:9
+msgid "6"
+msgstr "6"
+
+#: ../src/empathy-call-window.glade.h:10
+msgid "7"
+msgstr "7"
+
+#: ../src/empathy-call-window.glade.h:11
+msgid "8"
+msgstr "8"
+
+#: ../src/empathy-call-window.glade.h:12
+msgid "9"
+msgstr "9"
+
+#: ../src/empathy-call-window.glade.h:13
+msgid "<b>Keypad</b>"
+msgstr "<b>Tipkovnica</b>"
+
+#: ../src/empathy-call-window.glade.h:14
+msgid "<b>Volume</b>"
+msgstr "<b>Glasnost</b>"
+
+#: ../src/empathy-call-window.glade.h:15
+msgid "Hang Up"
+msgstr "Odloži"
+
+#: ../src/empathy-call-window.glade.h:16
+msgid "Send Video"
+msgstr "Pošlji posnetek"
+
+#: ../src/empathy-chat-window.c:316
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Pogovori (%d)"
+
+#: ../src/empathy-chat-window.c:383
+msgid "Topic:"
+msgstr "Tema:"
+
+#: ../src/empathy-chat-window.c:386
+msgid "Typing a message."
+msgstr "Pisanje sporočila."
+
+#: ../src/empathy-chat-window.glade.h:1
+msgid "C_lear"
+msgstr "Po_čisti"
+
+#: ../src/empathy-chat-window.glade.h:3
+msgid "Insert _Smiley"
+msgstr "Vstavi _smeška"
+
+#: ../src/empathy-chat-window.glade.h:4
+msgid "Invitation _message:"
+msgstr "Besedilo povabila:"
+
+#: ../src/empathy-chat-window.glade.h:5
+msgid "Invite"
+msgstr "Povabi"
+
+#: ../src/empathy-chat-window.glade.h:6
+msgid "Move Tab _Left"
+msgstr "Premakni zavihek _levo"
+
+#: ../src/empathy-chat-window.glade.h:7
+msgid "Move Tab _Right"
+msgstr "Premakni zavihek _desno"
+
+#: ../src/empathy-chat-window.glade.h:8
+msgid "Select who would you like to invite:"
+msgstr "Izberite osebe, ki bi jih radi povabili:"
+
+#: ../src/empathy-chat-window.glade.h:9
+msgid "You have been invited to join a chat conference."
+msgstr "Povabljeni ste, da se pridružite konferenčnemu klepetu."
+
+#: ../src/empathy-chat-window.glade.h:10
+msgid "_Contact"
+msgstr "_Stik"
+
+#: ../src/empathy-chat-window.glade.h:11
+#: ../src/empathy-main-window.glade.h:10
+msgid "_Contents"
+msgstr "_Vsebina"
+
+#: ../src/empathy-chat-window.glade.h:12
+msgid "_Conversation"
+msgstr "_Pogovori"
+
+#: ../src/empathy-chat-window.glade.h:13
+msgid "_Detach Tab"
+msgstr "_Odcepi zavihek"
+
+#: ../src/empathy-chat-window.glade.h:15
+#: ../src/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr "_Pomoč"
+
+#: ../src/empathy-chat-window.glade.h:16
+msgid "_Next Tab"
+msgstr "_Naslednji zavihek"
+
+#: ../src/empathy-chat-window.glade.h:17
+msgid "_Previous Tab"
+msgstr "_Prejšnji zavihek"
+
+#: ../src/empathy-chat-window.glade.h:18
+msgid "_Tabs"
+msgstr "_Zavihki"
+
+#: ../src/empathy-chatrooms-window.c:262
+msgid "Name"
+msgstr "Ime"
+
+#: ../src/empathy-chatrooms-window.c:280
+msgid "Room"
+msgstr "Soba"
+
+#: ../src/empathy-chatrooms-window.c:289
+msgid "Auto-Connect"
+msgstr "Samodejno povezovanje"
+
+#: ../src/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Uredi priljubljeno sobo"
+
+#: ../src/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Vstopi v sobo ob _zagonu."
+
+#: ../src/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Pridruži se klepetu, kadar je Empathy zagnan in ste povezani"
+
+#: ../src/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Upravljaj s priljubljenimi sobami"
+
+#: ../src/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "_Ime:"
+
+#: ../src/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "Str_ežnik:"
+
+#: ../src/empathy-chatrooms-window.glade.h:9
+#: ../src/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Soba:"
+
+#: ../src/empathy-filter.c:228
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Novo sporočilo od %s:\n"
+"%s"
+
+#: ../src/empathy-filter.c:285
+#, c-format
+msgid "Incoming call from %s"
+msgstr "Dohodni klic od %s"
+
+#: ../src/empathy-filter.c:341
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Naročilo zahteva %s"
+
+#: ../src/empathy-filter.c:344
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Sporočilo: %s"
+
+#. Tell the user that the tube can't be handled
+#: ../src/empathy-filter.c:452
+#, c-format
+msgid "%s offered you an invitation, but you don't have the needed external application to handle it."
+msgstr "%s vam je poslal povabilo, vendar nimate ustreznega zunanjega programa za sprejem vabila."
+
+#: ../src/empathy-filter.c:461
+msgid "Invitation Error"
+msgstr "Napaka povabila"
+
+#: ../src/empathy-filter.c:569
+#, c-format
+msgid "%s is offering you an invitation. An external application will be started to handle it."
+msgstr "%s vam pošilja povabilo. Zagnan bo ustrezen zunanji program za sprejem vabila."
+
+#: ../src/empathy-filter.c:574
+#, c-format
+msgid "%s is offering you an invitation, but you don't have the needed external application to handle it."
+msgstr "%s vam pošilja povabilo, vendar nimate ustreznega zunanjega programa za sprejem vabila."
+
+#: ../src/empathy-main-window.c:271
+msgid "Show and edit accounts"
+msgstr "Prikaži in uredi račune"
+
+#: ../src/empathy-main-window.c:611
+msgid "Contact"
+msgstr "Stik"
+
+#: ../src/empathy-main-window.c:813
+msgid "_Edit account"
+msgstr "_Uredi račun"
+
+#: ../src/empathy-main-window.c:899
+msgid "Authentication failed"
+msgstr "Overovitev ni uspela"
+
+#: ../src/empathy-main-window.c:902
+msgid "Encryption error"
+msgstr "Napaka šifriranja"
+
+#: ../src/empathy-main-window.c:905
+msgid "Name in use"
+msgstr "Ime je v uporabi"
+
+#: ../src/empathy-main-window.c:908
+msgid "Certificate not provided"
+msgstr "Certifikat ni na voljo"
+
+#: ../src/empathy-main-window.c:911
+msgid "Certificate untrusted"
+msgstr "Certifikat ni overjen"
+
+#: ../src/empathy-main-window.c:914
+msgid "Certificate expired"
+msgstr "Certifikat je pretekel"
+
+#: ../src/empathy-main-window.c:917
+msgid "Certificate not activated"
+msgstr "Certifikat ni potrjen"
+
+#: ../src/empathy-main-window.c:920
+msgid "Certificate hostname mismatch"
+msgstr "Neustrezen prstni odtis gostitelja"
+
+#: ../src/empathy-main-window.c:923
+msgid "Certificate fingerprint mismatch"
+msgstr "Neustrezen prstni odtis certifikata"
+
+#: ../src/empathy-main-window.c:926
+msgid "Certificate self-signed"
+msgstr "Certifikat je samo-podpisan"
+
+#: ../src/empathy-main-window.c:929
+msgid "Certificate error"
+msgstr "Napaka certifikata"
+
+#: ../src/empathy-main-window.c:932
+msgid "Unknown error"
+msgstr "Neznana napaka"
+
+#: ../src/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Seznam stikov"
+
+#: ../src/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Skladnost"
+
+#: ../src/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Pridruži se _priljubljenim ..."
+
+#: ../src/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Pridruži se _novim ..."
+
+#: ../src/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Uredi priljubljene"
+
+#: ../src/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Pokaži tudi _nepovezane stike"
+
+#: ../src/empathy-main-window.glade.h:7
+msgid "_Accounts"
+msgstr "_Računi"
+
+#: ../src/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "_Dodaj stik ..."
+
+#: ../src/empathy-main-window.glade.h:13
+#: ../src/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_Nov pogovor"
+
+#: ../src/empathy-main-window.glade.h:14
+msgid "_Personal Information"
+msgstr "_Osebni podatki"
+
+#: ../src/empathy-main-window.glade.h:16
+msgid "_Room"
+msgstr "_Soba"
+
+#: ../src/empathy-new-chatroom-dialog.c:290
+msgid "Chat Rooms"
+msgstr "Klepetalnice"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Prebrskaj:"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:3
+msgid "Enter the room name to join here or click on one or more rooms in the list."
+msgstr "Vnesite ime sobe ali pa s klikom vstopite v eno ali več sob s seznama."
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:4
+msgid "Enter the server which hosts the room, or leave it empty if the room is on the current account's server"
+msgstr "Vnesite strežnik, ki gosti sobo ali pa pustite polje prazno, če je soba na strežniku računa"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Spoji"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Pridruži se novem"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "_Osveži"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:8
+msgid "This list represents all chat rooms hosted on the server you have entered."
+msgstr "Seznam predstavlja vse klepetalnice, ki gostujejo na trenutno obiskanem strežniku."
+
+#: ../src/empathy-preferences.c:264
+msgid "Language"
+msgstr "Jezik"
+
+#: ../src/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Videz</b>"
+
+#: ../src/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Zvok</b>"
+
+#: ../src/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Obnašanje</b>"
+
+#: ../src/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Seznam stikov</b>"
+
+#: ../src/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Omogoči črkovalnike za jezike:</b>"
+
+#: ../src/empathy-preferences.glade.h:6
+msgid "<b>Visual</b>"
+msgstr "<b>Vidno</b>"
+
+#: ../src/empathy-preferences.glade.h:7
+msgid "<small>The list of languages reflects only the languages for which you have a dictionary installed.</small>"
+msgstr "<small>Seznam jezikov za katere imate nameščen slovar.</small>"
+
+#: ../src/empathy-preferences.glade.h:8
+msgid "Automatically _connect on startup "
+msgstr "Samodejno _poveži ob zagonu"
+
+#: ../src/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "Podobe so izbrane slike uporabnikov, ki so prikazane na seznamu"
+
+#: ../src/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "T_ema klepetanja:"
+
+#: ../src/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Prikaži obvestilo kadar so uporabniki _na zvezi"
+
+#: ../src/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Omogoči zvok za _odsotnost"
+
+#: ../src/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Omogoči zvok za _zasedenost"
+
+#: ../src/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "Splošno"
+
+#: ../src/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Obvestila"
+
+#: ../src/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Lastnosti"
+
+#: ../src/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "Prikaži _podobe"
+
+#: ../src/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Prikaži _smeške kot slike"
+
+#: ../src/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "Prikaži _skrčeni seznam stikov"
+
+#: ../src/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "Razvrsti po _imenu"
+
+#: ../src/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "Razvrsti po s_tanju"
+
+#: ../src/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Preverjanje črkovanja"
+
+#: ../src/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "Teme"
+
+#: ../src/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr "_Odpri novi klepet v ločenem oknu"
+
+#: ../src/empathy-preferences.glade.h:25
+msgid "_Play sound when messages arrive"
+msgstr "_Predvajaj zvok ob prejetju novega sporočila"
+
+#: ../src/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Status"
+
+#: ../src/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Zaključi"
+
+#: ../src/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Pokaži seznam stikov"
+
diff --git a/trunk/po/sq.po b/trunk/po/sq.po
new file mode 100644
index 000000000..787d64b94
--- /dev/null
+++ b/trunk/po/sq.po
@@ -0,0 +1,1347 @@
+# translation of gossip.HEAD.po to Albanian
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Laurent Dhima <laurenti@alblinux.net>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip.HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2004-07-05 19:23+0200\n"
+"Last-Translator: Laurent Dhima <laurenti@alblinux.net>\n"
+"Language-Team: Albanian <gnome-albanian-perkthyesit@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3.1\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Instant Messenger"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Instant Messenger"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Compact contact list"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable spell checker"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Fshih dritaren qendrore"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Fshih dritaren qendrore."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "Shfaq kontaktet jo në linjë"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "Lartësia e dritares kryesore."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Shfaq kontaktet jo në linjë"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Përdor smileys grafike"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Përdor tingujt njoftues"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether to show the contact list in compact mode or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Jashtë linje"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Në dispozicion"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "I zënë"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Nuk jam këtu"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "Shfaq kontaktet jo në linjë"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "Shfaq kontaktet jo në linjë"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "Shfaq kontaktet jo në linjë"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "Lidhu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Prano"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+#, fuzzy
+msgid "_Accounts"
+msgstr "_Prano"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Chat"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "Lidhu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "_Edit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Preferimet"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Gjendja"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+#, fuzzy
+msgid "An Instant Messaging client for GNOME"
+msgstr "Gossip, Klient për Mesazhe direkte"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr "Laurent Dhima <laurenti@alblinux.net>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Në dispozicion"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Përshkrimi</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Përshkrimi</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "<b>Përshkrimi</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Përshkrimi</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "Gjendja"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Bisedë në linjë"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+#, fuzzy
+msgid "Imendio "
+msgstr "Gossip"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "Emri:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+msgid "_Type:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "Fjalëkalimi:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+msgid "Use encryption (SS_L)"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "_Fjalëkalimi:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Serveri:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "I shkëputur"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "I lidhur"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "P_astro"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Bisedë në linjë"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+#, fuzzy
+msgid "Contact Infor_mation"
+msgstr "<b>Përshkrimi</b>"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "Bisedë në linjë"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+msgid "In_vite..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+msgid "Invitation _message:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Lëviz skedën _majtas"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Lëviz skedën _djathtas"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Shkëpute skedën"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "Skeda në _Vazhdim"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "Skeda _Paraardhëse"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+#, fuzzy
+msgid "_Show Contacts"
+msgstr "Shfaq kontaktet jo në linjë"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Skedat"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Kopjo adresën e lidhjes"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Hap adresën"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "Mesazh i ri nga %s"
+msgstr[1] "Mesazh i ri nga %s"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Bisedë në linjë"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "Lidhu"
+msgstr[1] "Lidhu"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "Duke shkruar një mesazh."
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "Shfaq kontaktet jo në linjë"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "_Chat"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "Chat with contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "<b>Përshkrimi</b>"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "<b>Përshkrimi</b>"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "Emri:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "Përdoruesi:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "Edit the groups and name for this contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "_Remove"
+msgstr "_Hiq"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "_Hiq"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "Bisedë në linjë"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "Zgjidh"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "View previous conversations with this contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "Paraqitja"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>Përshkrimi</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Përshkrimi</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "Gjendja"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "Lidhu"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>Përshkrimi</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "Përdor tingujt njoftues"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "_Preferimet"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "Shfaq kontaktet jo në linjë"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr ""
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "P_astro"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+msgid "Are you sure you want to clear the list?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+#, fuzzy
+msgid "Clear List"
+msgstr "P_astro"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "Gossip, Klient për Mesazhe direkte"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "Gossip, Klient për Mesazhe direkte"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "P_astro"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr ""
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "Instant Messenger"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Instant Messenger"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "Gabim i panjohur"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Përdor tingujt njoftues"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Gabim i panjohur"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Në dispozicion"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Gabim i panjohur"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "I lidhur"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "I lidhur"
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Shteti:"
+
+#~ msgid "Home"
+#~ msgstr "Shtëpi"
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Përshkrimi"
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "_Shkëputu"
+
+#~ msgid "Connect"
+#~ msgstr "Lidhu"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Shkruani fjalëkalimin tuaj"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Shkruani fjalëkalimin tuaj"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr "Shkruani fjalëkalimin tuaj"
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "Mesazh i ri nga %s"
+#~ msgstr[1] "Mesazh i ri nga %s"
+
+#~ msgid "New message from %s"
+#~ msgstr "Mesazh i ri nga %s"
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "_Prano"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Emri:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "Bisedë në linjë"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "Lidhu"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "I lidhur"
+
+#~ msgid "Select"
+#~ msgstr "Zgjidh"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Gabim i panjohur"
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "Zgjidh"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "Lidhu"
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Lidhu"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Bisedë në linjë"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "Bisedë në linjë"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s do të shtohet tek lista juaj e kontakteve."
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "%s do të shtohet tek lista juaj e kontakteve."
+
+#, fuzzy
+#~ msgid "Contact Information"
+#~ msgstr "<b>Përshkrimi</b>"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "%s do të shtohet tek lista juaj e kontakteve."
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "%s do të shtohet tek lista juaj e kontakteve."
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Shkruani fjalëkalimin tuaj"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Bisedë në linjë"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "Përdoruesi:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Prano"
+
+#~ msgid "_Deny"
+#~ msgstr "_Moho"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Përshkrimi</b>"
+
+#, fuzzy
+#~ msgid "Account:"
+#~ msgstr "Shteti:"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "Emri:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "Serveri:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "_Pseudonimi:"
+
+#, fuzzy
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "<b>Përshkrimi</b>"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "Gjendja"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "Gjendja"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "Lidhu"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Shteti:"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "Shfaq kontaktet jo në linjë"
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "Bisedë në linjë"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "Shfaq kontaktet jo në linjë"
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "I lidhur"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "Shfaq kontaktet jo në linjë"
+
+#~ msgid "Country:"
+#~ msgstr "Shteti:"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "Shfaq kontaktet jo në linjë"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
+
+#~ msgid "Name:"
+#~ msgstr "Emri:"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "Përshkrimi"
+
+#~ msgid "Version:"
+#~ msgstr "Versioni:"
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Çfarë kërkese dëshironi t'i dërgoni %s?"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Lidhu"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Përshkrimi"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Shkëputu"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "Email:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Shkruaj ID e përdoruesit të personit të cilit dëshironi t'i dërgoni "
+#~ "mesazh chat."
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "_Fjalëkalimi:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "Emri:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "_Chat"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Pseudonimi:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "Fjalëkalimi:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "Mesazh i ri nga %s"
+
+#~ msgid "_Subscribe"
+#~ msgstr "_Abonohu"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s do të shtohet tek lista juaj e kontakteve."
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "Shfaq kontaktet jo në linjë"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "Shkruani fjalëkalimin tuaj"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "<b>Përshkrimi</b>"
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Emri:"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid "Server:"
+#~ msgstr "Serveri:"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "Çfarë kërkese dëshironi t'i dërgoni %s?"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Jo"
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Po"
+
+#~ msgid "Height of main window"
+#~ msgstr "Lartësia e dritares qendrore"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "Pozicioni X i dritares qendrore."
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "Pozicioni Y i dritares qendrore."
+
+#~ msgid "The width of the main window."
+#~ msgstr "Gjerësia e dritares kryesore."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Gjerësia e dritares qendrore"
+
+#~ msgid "X position of main window"
+#~ msgstr "Pozicioni X i dritares qendrore"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Pozicioni Y i dritares qendrore"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip, Klient për Mesazhe direkte"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "Fshih dritaren qendrore."
+
+#~ msgid "Available..."
+#~ msgstr "Në dispozicion..."
+
+#~ msgid "Busy..."
+#~ msgstr "I zënë..."
+
+#~ msgid "Away..."
+#~ msgstr "Nuk jam këtu..."
+
+#, fuzzy
+#~ msgid "Could not open connection"
+#~ msgstr "E pamundur lidhja"
+
+#~ msgid "Written by:"
+#~ msgstr "Shkruar nga:"
+
+#~ msgid "Artwork by:"
+#~ msgstr "Artwork nga:"
+
+#~ msgid "Translated by:"
+#~ msgstr "Përkthyer nga:"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sChat - %s"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "Versioni:"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Preferimet"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Sigurohu që ke dhënë informacionet korrekte të llogarisë tuaj."
+
+#~ msgid "%s wants to be notified of your status."
+#~ msgstr "%s dëshiron të njoftohet mbi gjendjen tuaj."
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Nuk jeni i lidhur me server-in. Dëshironi të rilidheni?"
+
+#~ msgid "Edit List..."
+#~ msgstr "Ndrysho listën..."
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "Nga:"
+
+#~ msgid "To:"
+#~ msgstr "Për:"
+
+#~ msgid "_Send"
+#~ msgstr "_Dërgo"
+
+#~ msgid "C_onnect"
+#~ msgstr "Li_dhu"
+
+#, fuzzy
+#~ msgid "Connect _Server:"
+#~ msgstr "_Serveri:"
+
+#, fuzzy
+#~ msgid "_Jabber ID:"
+#~ msgstr "Jabber"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "_Add"
+#~ msgstr "_Shto"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "Sound"
+#~ msgstr "Zëri"
diff --git a/trunk/po/sr.po b/trunk/po/sr.po
new file mode 100644
index 000000000..58a2ba3b8
--- /dev/null
+++ b/trunk/po/sr.po
@@ -0,0 +1,2314 @@
+# Serbian translation of gossip
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2003, 2004.
+#
+# This file is distributed under the same license as the gossip package.
+#
+# Maintainer: Дејан Матијевић <dejan@ns.sympatico.ca>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2004-02-27 23:05+0100\n"
+"Last-Translator: Данило Шеган <danilo@prevod.org>\n"
+"Language-Team: Serbian (sr) <serbiangnome-lista@nongnu.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Брзи гласник"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Брзи гласник"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+#, fuzzy
+msgid "Chat window theme"
+msgstr "Ћаскај са:"
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "Додај у свој списак другара"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+#, fuzzy
+msgid "Enable sound when away"
+msgstr "Искључи звук када сте _одсутни"
+
+#: ../data/empathy.schemas.in.h:9
+#, fuzzy
+msgid "Enable sound when busy"
+msgstr "Искључи звук када сте _заузети"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Чаврљање - Пошаљи поруку"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Сакриј главни прозор"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Сакриј главни прозор."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "_Прикажи списак контаката"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "Висина главног прозора."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Прикажи неповезане контакте"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Прикажи графички смешак"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Користи звук за напомене"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Да ли да претвори смешке у графичке слике у чаврљању."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Да ли да пусти звук када порука стигне."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Да ли да пусти звук када је одсутан."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Да ли да пусти звук када је заузет."
+
+#: ../data/empathy.schemas.in.h:28
+#, fuzzy
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Да ли да пусти звук када порука стигне."
+
+#: ../data/empathy.schemas.in.h:29
+#, fuzzy
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Да ли да прикажем неповезане контакте у списку контаката."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Да ли да прикажем неповезане контакте у списку контаката."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Да ли да прикажем неповезане контакте у списку контаката."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Неповезан"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Доступан"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Заузет"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Одсутан"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Прикажи списак контаката"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Група"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "Додај контакт"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "_Сакриј списак контаката"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "Повежи се"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "У_реди омиљене..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "_Прикажи неповезане контакте"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Акције"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+#, fuzzy
+msgid "_Accounts"
+msgstr "_Акције"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "_Додај контакт..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Разговор"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "Повежи се"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "_Изађи"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Нова порука..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+#, fuzzy
+msgid "_Personal Information"
+msgstr "Лични подаци"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Поставке"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Изађи"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+#, fuzzy
+msgid "_Room"
+msgstr "_Соба:"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "_View Previous Conversations"
+msgstr "С_ледећи разговор"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Стање"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Прикажи списак контаката"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+#, fuzzy
+msgid "An Instant Messaging client for GNOME"
+msgstr "Брзи гласник за Гнома"
+
+# Note to translators: put here your name (and address) so it
+# * will shop up in the "about" box
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr "dejan@ns.sympatico.ca"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Доступан"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Налог:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Налог:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+#, fuzzy
+msgid "Accounts"
+msgstr "Име налога:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "<b>Налог:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Налог:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>Звук</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Ћаскај"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Џабер"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "Име:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "_Тема:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">Пример: корисник@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "_Лозинка:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+#, fuzzy
+msgid "Reso_urce:"
+msgstr "Извор:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "Користи _шифровање (SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "П_орт:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Сервер:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Неповезан"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "Повезан"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "Оч_исти"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Ћаскај"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+#, fuzzy
+msgid "Contact Infor_mation"
+msgstr "По_даци за контакт"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "Ћаскај"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "Ре_гистровање..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Унесите поруку о стању:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Премести језичак _лево"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Премести језичак _десно"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+#, fuzzy
+msgid "_Add To Favorites"
+msgstr "У_реди омиљене..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Разговор"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Одвоји лист"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "_Следећи лист"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "П_ретходни лист"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+#, fuzzy
+msgid "_Show Contacts"
+msgstr "_Прикажи списак контаката"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Листови"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Умножи адресу везе"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Отвори везу"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A, %d. %B %Y."
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "_Нова порука..."
+msgstr[1] "_Нова порука..."
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Чаврљање - Чаврљај"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "_Разговор"
+msgstr[1] "_Разговор"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+#, fuzzy
+msgid "Typing a message."
+msgstr "Пошаљи поруку чаврљања..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "Додај контакт"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "Група"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "Додај контакт"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "По_даци за контакт"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "Информације за контакт"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/Преи_менуј групу"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "Уклони"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr ""
+"Унесите нови надимак за контакт\n"
+"%s"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "Уклони"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/Уклони контакт"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "Чаврљање - Уреди Групно Чаврљање"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "_Send File..."
+msgstr "Пошаљи по_руку..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "Изабери"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "С_ледећи разговор"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "Изглед"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>Налог:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Омиљено:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "Повежи се"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+#, fuzzy
+msgid "<b>Languages</b>"
+msgstr "<b>Подразумеване поруке</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "<b>Звук</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>Е-пошта:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+#, fuzzy
+msgid "Chat Th_eme:"
+msgstr "Име за чаврљање:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+#, fuzzy
+msgid "Enable sounds when _away"
+msgstr "Искључи звук када сте _одсутни"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+#, fuzzy
+msgid "Enable sounds when _busy"
+msgstr "Искључи звук када сте _заузети"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "Обавештење"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "_Поставке"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+#, fuzzy
+msgid "Show _smileys as images"
+msgstr "Претвори _смешке у графичке симболе"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "_Прикажи списак контаката"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+#, fuzzy
+msgid "Sort by s_tate"
+msgstr "Подесите ваше стање:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+#, fuzzy
+msgid "_Play sound when messages arrive"
+msgstr "Пуштај звук по пристизању порука"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "Чаврљање - Уреди Групно Чаврљање"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+#, fuzzy
+msgid "Custom message..."
+msgstr "Посебна порука..."
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "Оч_исти"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "Да ли желите да прихватите захтев?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+#, fuzzy
+msgid "Clear List"
+msgstr "Оч_исти"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Унесите поруку о стању:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "Поруке о стању"
+
+# Претпоставити је нешто сматрати датим без изричитог навођења, управо као и овде.
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "Претпостављене поруке стања"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s прекиде везу"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, fuzzy, c-format
+msgid "%s has come online"
+msgstr "%s се повеза"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "Оч_исти"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Не успостављај везу при покретању"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "Брзи гласник"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Брзи гласник"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "_Придружи"
+
+#, fuzzy
+#~ msgid "Active"
+#~ msgstr "_Акције"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "Непозната грешка"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Обавештење"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Непозната грешка"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Доступан"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Непозната грешка"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "Повезан"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "Повезан"
+
+#, fuzzy
+#~ msgid "This feature is unavailable."
+#~ msgstr "Можда је сервер тренутно недоступан."
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Нов налог"
+
+#~ msgid "Home"
+#~ msgstr "Почетак"
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Можда је сервер тренутно недоступан."
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Регистровање налога"
+
+#, fuzzy
+#~ msgid "This feature is not implemented"
+#~ msgstr "Можда је сервер тренутно недоступан."
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "_Раскини везу"
+
+#~ msgid "Connect"
+#~ msgstr "Повежи се"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Успешно регистрован налог"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Није успео да региструје налог"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Унесите вашу лозинку:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Унесите вашу лозинку:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Унесите ново име за групу\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "No information is available for this contact."
+#~ msgstr "Преузмите податке о овом контакту"
+
+#, fuzzy
+#~ msgid "Information requested, please wait..."
+#~ msgstr "<b>Тражио је информације, молим сачекајте...</b>"
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Ја бих волео да додам тебе на моју листу другара."
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "_Нова порука..."
+#~ msgstr[1] "_Нова порука..."
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "Захтев за побољшањем"
+#~ msgstr[1] "Захтев за побољшањем"
+
+#, fuzzy
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "Порука са захтевом"
+#~ msgstr[1] "Порука са захтевом"
+
+#, fuzzy
+#~ msgid "Edit Account _Details"
+#~ msgstr "Уреди податке о налогу"
+
+#~ msgid "New message from %s"
+#~ msgstr "Нова порука од %s"
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "_Прихвати"
+
+#, fuzzy
+#~ msgid "Decline"
+#~ msgstr "Вечера"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Име:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Соба:"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "Чаврљање - Повезати се"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "<b>Тражио је информације, молим сачекајте...</b>"
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "Да ли желите да уклоните контакт\n"
+#~ "%s\n"
+#~ "из вашег списка другара?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Унесите ново име за групу\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Изабери"
+
+# :-)
+#~ msgid "Unsorted"
+#~ msgstr "Несврстани"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Непозната грешка"
+
+#, fuzzy
+#~ msgid "%s would like to send you a file."
+#~ msgstr "Ја бих волео да додам тебе на моју листу другара."
+
+#, fuzzy
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Ја бих волео да додам тебе на моју листу другара."
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "Изабери"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "По_везивање..."
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Чаврљање - Повезати се"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Који надимак желите да користите за овог корисника?"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "_Тема:"
+
+#, fuzzy
+#~ msgid "Account"
+#~ msgstr "Име налога:"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "_Разговор"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Списак доступних налога"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Са којим налогом да успостави везу при покретању"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "ИМЕ НАЛОГА"
+
+#~ msgid "Available accounts:"
+#~ msgstr "Доступни налози:"
+
+#~ msgid "[default]"
+#~ msgstr "[подразумевано]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Непостоји налог са именом '%s'."
+
+#, fuzzy
+#~ msgid "Join"
+#~ msgstr "_Придружи"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Ћаскај"
+
+#, fuzzy
+#~ msgid "Chat Rooms"
+#~ msgstr "Чаврљање - Чаврљај"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "<b>Тражио је информације, молим сачекајте...</b>"
+
+#~ msgid "Default"
+#~ msgstr "Подразумевано"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "Ћаскај"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s ће бити додат у вашу листу другара."
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Контант ће бити додат у вашу листу другара"
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "Захтев за побољшањем"
+
+#, fuzzy
+#~ msgid "Contact Information"
+#~ msgstr "По_даци за контакт"
+
+#, fuzzy
+#~ msgid "New subscription request from %s"
+#~ msgstr "Захтев за побољшањем"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr ""
+#~ "Да ли желите да уклоните контакт\n"
+#~ "%s\n"
+#~ "из вашег списка другара?"
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr ""
+#~ "Да ли желите да уклоните контакт\n"
+#~ "%s\n"
+#~ "из вашег списка другара?"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Унесите вашу лозинку:"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Да ли сте запамтили лозинку?"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Ћаскај"
+
+#, fuzzy
+#~ msgid "Contact goes online"
+#~ msgstr "%s се повеза"
+
+#, fuzzy
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Да ли желите да прихватите захтев?"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "_Корисничко име:"
+
+#, fuzzy
+#~ msgid "File size:"
+#~ msgstr "Веб сајт :"
+
+#~ msgid "Web site:"
+#~ msgstr "Веб сајт :"
+
+#~ msgid "_Accept"
+#~ msgstr "_Прихвати"
+
+#~ msgid "_Deny"
+#~ msgstr "О_дбиј"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Звук</b>"
+
+#, fuzzy
+#~ msgid "Account:"
+#~ msgstr "Име налога:"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Чаврљање - Уреди Групно Чаврљање"
+
+#, fuzzy
+#~ msgid "Group Chat"
+#~ msgstr "Чаврљање - Чаврљај"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "_Придружи"
+
+#, fuzzy
+#~ msgid "Join room on start_up"
+#~ msgstr "Не успостављај везу при покретању"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "Име:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "Сервер:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "_Надимак:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Соба:"
+
+#, fuzzy
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Налог:</b>"
+
+#, fuzzy
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "Подаци о клијенту"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Налог:</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>Име:</b>"
+
+#, fuzzy
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Подешавања налога</b>"
+
+#, fuzzy
+#~ msgid "<b>Status</b>"
+#~ msgstr "<b>Звук</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>Звук</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Пример: корисник@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Име налога:"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "Додај контакт"
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "Ћаскај"
+
+#~ msgid "Client:"
+#~ msgstr "Клијент:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "Додај контакт"
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Не успостављај везу при покретању"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "Додај контакт"
+
+#~ msgid "Country:"
+#~ msgstr "Држава:"
+
+#, fuzzy
+#~ msgid "Decide _Later"
+#~ msgstr "О_длучи касније"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "Додај контакт"
+
+#~ msgid "Edit Groups"
+#~ msgstr "Уреди групе"
+
+#~ msgid "Email:"
+#~ msgstr "Е-пошта:"
+
+# Џабер идентификациона ознака :-)
+#, fuzzy
+#~ msgid "ID:"
+#~ msgstr "ЏИО"
+
+#~ msgid "Name:"
+#~ msgstr "Име:"
+
+#~ msgid "OS:"
+#~ msgstr "ОС:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "<b>Подешавања налога</b>"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "Ре_гистровање..."
+
+#, fuzzy
+#~ msgid "Search"
+#~ msgstr "_Тражи..."
+
+#, fuzzy
+#~ msgid "Spell Checker"
+#~ msgstr "Чаврљање - Пошаљи поруку"
+
+#, fuzzy
+#~ msgid "Subscription Request"
+#~ msgstr "Захтев за побољшањем"
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Који надимак желите да користите за овог корисника?"
+
+#~ msgid "Version:"
+#~ msgstr "Верзија:"
+
+#, fuzzy
+#~ msgid "View Previous Conversations"
+#~ msgstr "С_ледећи разговор"
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Који надимак желите да користите?"
+
+#, fuzzy
+#~ msgid "_Birthday:"
+#~ msgstr "_Важност:"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Повежи се"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Опис"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Раскини везу"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "Е-пошта:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Унесите кориснички ID од особе којој желите да пошањете поруку за "
+#~ "чаврљање."
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "П_орт:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "Име:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Група"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Надимак:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Лозинка:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "Порук_е о стању"
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "Уклони"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Веб сајт :"
+
+# Претпоставити је нешто сматрати датим без изричитог навођења, управо као и овде.
+#~ msgid "Preset status messages"
+#~ msgstr "Претпостављене поруке стања"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Претпостављене поруке стања."
+
+#, fuzzy
+#~ msgid "Connecting"
+#~ msgstr "Повежи се"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s ће бити додат у вашу листу другара."
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "_Џабер ID новог контакта:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "Унесите вашу лозинку:"
+
+#, fuzzy
+#~ msgid "Favourite"
+#~ msgstr "<b>Омиљено:</b>"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Контакт информације за %s"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/Информације за контакт"
+
+#, fuzzy
+#~ msgid "/Re_name Contact"
+#~ msgstr "/_Преименуј контакт"
+
+#, fuzzy
+#~ msgid "/_Edit Groups"
+#~ msgstr "/Уреди _групе"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "С_ледећи разговор"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Унесите нови надимак за контакт\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Уреди групе за %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Дневник разговора"
+
+#~ msgid "Registering account"
+#~ msgstr "Регистровање налога"
+
+#, fuzzy
+#~ msgid "Respond"
+#~ msgstr "Разлог:"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "У_реди омиљене..."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Име:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Чаврљање - Чаврљај"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Тражио је информације, молим сачекајте...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Пример: корисник@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Account Name"
+#~ msgstr "Име налога:"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Чаврљање - Чаврљај"
+
+#, fuzzy
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Да ли већ имате налог на Џабер серверу?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr ""
+#~ "Унесите нови надимак за контакт\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "Унесите нови надимак за контакт\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the user's contact ID:"
+#~ msgstr "Кликните да добијете корисничке контакт информације"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Подешавање је завршено"
+
+#~ msgid "Gossip"
+#~ msgstr "Чаврљање"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Чаврљање је модеран клијент за Џабер систем брзих порука.\n"
+#~ "\n"
+#~ "Овај помоћник ће вам помоћи да подесите Чаврљање и повежете се на ваш "
+#~ "омиљен Џабер сервер.\n"
+#~ "\n"
+#~ "Да почнете, само кликните „Напред“."
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "Захтев ће бити послат и тражити да видите присутност корисника, Док се "
+#~ "захтев не одобри, корисник ће увек бити приказан као \"Не повезан\" у "
+#~ "вашој листи пријатеља."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "У коју групу желите да распоредите овај контакт?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "Џабер ИД:"
+
+#, fuzzy
+#~ msgid "Nickname:"
+#~ msgstr "_Надимак:"
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "П_орт:"
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "Регистровање налога"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "Извор:"
+
+#~ msgid "Sending request"
+#~ msgstr "Захтев за слање"
+
+#~ msgid "Server:"
+#~ msgstr "Сервер:"
+
+#, fuzzy
+#~ msgid "Web Site:"
+#~ msgstr "Веб сајт :"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Добродошли у Чаврљање"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Који систем тренутних порука корисник користи?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Како се зовете?"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "Који сервер желите да користите?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Који надимак користите?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Који надимак желите да користите?"
+
+#, fuzzy
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "У коју групу желите да распоредите овај контакт?"
+
+#, fuzzy
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Сада је Чаврљање одговарајуће подешено за ваш систем.\n"
+#~ "Ви можете да промените подешавања вашег налога касније избором менија "
+#~ "Разговор->Повезивање...."
+
+#, fuzzy
+#~ msgid "Your Account"
+#~ msgstr "Џабер Налог"
+
+#~ msgid "Your Identity"
+#~ msgstr "Ваш идентитет"
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "Чаврљање - Чаврљај"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Не"
+
+#~ msgid "_Search..."
+#~ msgstr "_Тражи..."
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Да"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Буди тих на одсуству"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Буди тих на одсуству"
+
+#~ msgid "Height of main window"
+#~ msgstr "Висина главног прозора"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "Водоравни положај главног прозора."
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "Усправни положај главног прозора."
+
+#~ msgid "The width of the main window."
+#~ msgstr "Ширина главног прозора."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Ширина главног прозора"
+
+#~ msgid "X position of main window"
+#~ msgstr "Водоравни положај главног прозора"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Усправни положај главног прозора"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Чаврљање, брзи гласник за Гнома"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "Сакриј главни прозор."
+
+#, fuzzy
+#~ msgid "Requested Information"
+#~ msgstr "Подаци о _налогу"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "Пошаљи поруку у _разговор..."
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "%s прекиде везу"
+
+#~ msgid "Available..."
+#~ msgstr "Доступан..."
+
+#~ msgid "Busy..."
+#~ msgstr "Заузет..."
+
+#~ msgid "Away..."
+#~ msgstr "Одсутан..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "По_даци за контакт"
+
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>Звук</b>"
+
+#, fuzzy
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Чаврљање - Уреди Налог"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "_Прикључи се групном чаврљању..."
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "П_орт:"
+
+#, fuzzy
+#~ msgid "Requested information."
+#~ msgstr "Подаци о клијенту"
+
+#, fuzzy
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "Који сервер желите да користите?"
+
+#, fuzzy
+#~ msgid "Connection to the server failed."
+#~ msgstr "<b>Повежи се на сервер</b>"
+
+#~ msgid "Artwork by:"
+#~ msgstr "Цртежи:"
+
+#, fuzzy
+#~ msgid "Account ID"
+#~ msgstr "Име налога:"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sЧаврљање - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Прикажи _дневник"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "Верзија:"
+
+#, fuzzy
+#~ msgid "Croatian"
+#~ msgstr "Разговор"
+
+#, fuzzy
+#~ msgid "Latvian"
+#~ msgstr "Напуштам:"
+
+#~ msgid "View Lo_g"
+#~ msgstr "Погледај дне_вник"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Чаврљање - Групно Чаврљање"
+
+#, fuzzy
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Чаврљање - Повезати се"
+
+#, fuzzy
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "По_даци за контакт"
+
+#, fuzzy
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Чаврљање - Уреди Групно Чаврљање"
+
+#, fuzzy
+#~ msgid "Gossip - New Account"
+#~ msgstr "Чаврљање - Уреди Налог"
+
+#, fuzzy
+#~ msgid "Gossip - New Message"
+#~ msgstr "Чаврљање - Пошаљи поруку"
+
+#, fuzzy
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Чаврљање - Повезати се"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Поставке"
+
+#, fuzzy
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Чаврљање - Пошаљи поруку"
+
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "Коју поруку са захтевом желите да пошаљете %s?"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Проверите да ли су подаци о налогу исправни."
+
+#~ msgid "%s wants to be notified of your presence."
+#~ msgstr "%s жели обавештења о вашем присуству."
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Ви сте развезани са сервера. Желители да се поново повежете?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr ""
+#~ "Проверите да ли су подаци о налогу исправни, као што је корисничко име и "
+#~ "лозинка.."
+
+#~ msgid "Edit List..."
+#~ msgstr "Уреди списак..."
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "Догодила се грешка приликом чаврљање са %s."
+
+#~ msgid "Details:"
+#~ msgstr "Детаљи:"
+
+#~ msgid "An error occurred when chatting in the group chat %s."
+#~ msgstr "Догодила се грешка приликом чаврљање у групи %s."
+
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "Није могуће унети grupu групу за чаврљање %s."
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Чаврљање ће сада пробати да користи ваш налог:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Чаврљање ће сада пробати да региструје ваш налог:"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "Од:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Чаврљање - Прими поруку"
+
+#~ msgid "In reply to:"
+#~ msgstr "Као одговор на:"
+
+#~ msgid "To:"
+#~ msgstr "Коме:"
+
+#~ msgid "_Reply..."
+#~ msgstr "Одго_вори..."
+
+#~ msgid "_Send"
+#~ msgstr "_Пошаљи"
+
+#~ msgid "C_onnect"
+#~ msgstr "П_овежи се"
+
+#~ msgid "_Resource:"
+#~ msgstr "_Ресурс:"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>Доступне собе за чаврљање</b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>Информација собе за чаврљање</b>"
+
+#~ msgid "Gossip - Join Group Chat"
+#~ msgstr "Чаврљање - Придружи се Групном Чаврљању"
+
+#~ msgid "N_ickname:"
+#~ msgstr "Над_имак:"
+
+#~ msgid ""
+#~ "Pick a favorite, or enter nickname, server name, and the name of the chat "
+#~ "room to enter."
+#~ msgstr ""
+#~ "Да уђете, изаберите омиљено или унесите надимак, име сервера и име од "
+#~ "собе за чаврљање."
+
+#~ msgid "R_emove"
+#~ msgstr "_Уклони"
+
+#~ msgid "_Add"
+#~ msgstr "_Додај"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>Претпостављене поруке стања</b>"
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Информација није доступана</i>"
+
+#~ msgid "Choose a Server"
+#~ msgstr "Изабери сервер"
+
+#~ msgid "Choose from list:"
+#~ msgstr "Одаберите из списка:"
+
+#~ msgid "Information about ..."
+#~ msgstr "Информације о..."
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "На ком серверу имате Џабер налог?"
+
+#~ msgid "Sound"
+#~ msgstr "Звук"
+
+#~ msgid "Status Message"
+#~ msgstr "Порука о стању"
+
+#~ msgid "Use a different server"
+#~ msgstr "Користи други сервер"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Коју поруку са захтевом желите да пошаљете ...?"
+
+#, fuzzy
+#~ msgid "About Gossip"
+#~ msgstr "Чаврљање"
+
+# Note to translators: put here your name (and address) so it
+# * will shop up in the "about" box
+#, fuzzy
+#~ msgid "translator_credits_old"
+#~ msgstr "Дејан Матијевић <dejan@ns.sympatico.ca>"
+
+#~ msgid "Gossip Website"
+#~ msgstr "Веб страница Чаврљања"
+
+#~ msgid "Unable to Authenticate"
+#~ msgstr "Не могу да се идентификујем"
+
+#~ msgid "Gossip, Jabber Client"
+#~ msgstr "Чаврљање, Џабер Клијент"
+
+#~ msgid "About to leave..."
+#~ msgstr "Управо одлазим..."
+
+#~ msgid "Autoaway message"
+#~ msgstr "Порука за самоодсуство"
+
+#~ msgid "Away messages"
+#~ msgstr "Поруке за одсуство"
+
+#~ msgid "Busy messages"
+#~ msgstr "Поруке за заузеће"
+
+#~ msgid "Message to show before going away"
+#~ msgstr "Порука која се приказује пре одласка"
+
+#~ msgid "Not at the computer"
+#~ msgstr "Нисам за рачунаром"
+
+#~ msgid "Just about to leave..."
+#~ msgstr "Управо одлазим..."
+
+#~ msgid "Custom Busy Message..."
+#~ msgstr "Посебна порука за заузеће..."
+
+#~ msgid "Leave..."
+#~ msgstr "Напусти..."
+
+#~ msgid "New Busy Message"
+#~ msgstr "Нова порука за заузеће"
+
+#~ msgid "New Away Message"
+#~ msgstr "Нова порука за одсуство"
+
+#~ msgid "Working"
+#~ msgstr "Радим"
+
+#~ msgid "Eating"
+#~ msgstr "Једем"
+
+#~ msgid "Sleeping"
+#~ msgstr "Спавам"
+
+#~ msgid "Enter the new message:"
+#~ msgstr "Унесите нову поруку:"
+
+#~ msgid "Leave"
+#~ msgstr "Напусти"
+
+#~ msgid ""
+#~ "Note: contacts can belong to multiple groups or they can be in no group "
+#~ "at all."
+#~ msgstr ""
+#~ "Пажња: контакти могу да припадају већем броју група или ниједној групи."
+
+#~ msgid "Preset messages for quickly setting away status."
+#~ msgstr "Постављање поруке за брзо одлажење на одсуство."
+
+#~ msgid "Preset messages for quickly setting busy status."
+#~ msgstr "Постављање поруке за брзо подешавање заузећа."
+
+#~ msgid "Reason for being busy:"
+#~ msgstr "Разлог заузећа:"
+
+#~ msgid "Reason for leaving:"
+#~ msgstr "Разлог одласка:"
+
+#~ msgid "As _Windows"
+#~ msgstr "Као _прозори"
+
+#~ msgid "As a _List"
+#~ msgstr "Као _списак"
+
+#~ msgid "_Go"
+#~ msgstr "_Иди"
+
+#~ msgid "Open conversations in single window with list view"
+#~ msgstr "Отвори разговоре у једном прозору приказујући их у списку"
+
+#~ msgid "[Eating,Sleeping]"
+#~ msgstr "[Једем,спавам]"
+
+#~ msgid "[Working]"
+#~ msgstr "[Радим]"
+
+#~ msgid "Add"
+#~ msgstr "Додај"
+
+#~ msgid "Open conversations in a single window with _list view"
+#~ msgstr "Отвори разговоре у једном прозору као сп_исак"
+
+#~ msgid "<b>Away messages</b>"
+#~ msgstr "<b>Поруке за одсуство</b>"
+
+#~ msgid "Available:"
+#~ msgstr "Доступан:"
+
+#~ msgid "Away:"
+#~ msgstr "Одсутан:"
+
+#~ msgid "Messages"
+#~ msgstr "Поруке"
+
+#~ msgid ""
+#~ "These messages are used to describe your status when you're about to "
+#~ "leave and when you're away."
+#~ msgstr ""
+#~ "Ове поруке се користе за описивање вашег стања када управо одлазите или "
+#~ "сте одсутни."
+
+#~ msgid ""
+#~ "These messages are used to describe your status when you're available, "
+#~ "about to leave, or automatically set away due to inactivity."
+#~ msgstr ""
+#~ "Ове поруке се користе за описивање вашег стања када сте доступни, управо "
+#~ "одлазите или сте одсутни услед неактивности."
+
+#~ msgid "Use com_pact conversation style"
+#~ msgstr "Користи стил са_жетог разговора"
+
+#~ msgid "Use sounds to _notify when new messages arrive"
+#~ msgstr "Користи звук за _обавештење када нова порука стигне"
+
+#~ msgid "Timestamp all messages"
+#~ msgstr "Означи време за све поруке"
+
+#~ msgid "Whether or not to timestamp all messages in conversations."
+#~ msgstr "Да ли да дода ознаке времена на све поруке у разговорима."
+
+#~ msgid "_Timestamp all messages"
+#~ msgstr "Додај ознаку _временског тренутка на све поруке"
+
+#~ msgid "Custom Away Message..."
+#~ msgstr "Посебна порука за одсуство..."
+
+# Translators: See comment for "%sChat - %s".
+#~ msgid "%sChat"
+#~ msgstr "%sЧаврљање"
+
+# The extra space is to differentiate the string from Offline as status. It
+# * might need a different translation, at least in Swedish.
+#~ msgid "Offline "
+#~ msgstr "Неповезан"
+
+#~ msgid "Others"
+#~ msgstr "Други"
+
+#~ msgid "Get _Info"
+#~ msgstr "_Подаци"
+
+#~ msgid "Use ta_bs instead of windows for conversations"
+#~ msgstr "Користи _листове уместо прозора за разговоре"
+
+#~ msgid "I'm here"
+#~ msgstr "Овде сам"
+
+#~ msgid "I'm not here right now"
+#~ msgstr "Тренутно нисам овде"
+
+#~ msgid "Auto away enabled"
+#~ msgstr "Аутоматски одсутан укључено"
+
+#~ msgid "Extended autoaway time"
+#~ msgstr "Продужено време за аутоматски одсутан"
+
+#~ msgid ""
+#~ "The number of minutes of idle time before automatically going into \"away"
+#~ "\" mode."
+#~ msgstr ""
+#~ "Број минута од неактивног времена пре него што аутоматски оде у мод "
+#~ "\"одсутан\""
+
+#~ msgid ""
+#~ "The number of minutes of idle time before automatically going into "
+#~ "\"extended away\" mode."
+#~ msgstr ""
+#~ "Број минута од неактивног времена пре него што аутоматски оде у мод "
+#~ "\"дуго одсутан\""
+
+#~ msgid ""
+#~ "Whether or not to go into \"away\" mode automatically when a certain time "
+#~ "of idling has passed."
+#~ msgstr ""
+#~ "Да ли да оде у мод \"одсутан\" аутоматски када одређено време "
+#~ "неактивности прође."
+
+#~ msgid "_Busy"
+#~ msgstr "_Заузет"
+
+#~ msgid "Present"
+#~ msgstr "Присутни"
+
+#~ msgid "Timestamp messages"
+#~ msgstr "Прикажи ознаку временског тренутка на порукама"
+
+#~ msgid "Free to chat"
+#~ msgstr "Слободан за ћаскање"
+
+#~ msgid "Extended away"
+#~ msgstr "Дуго одсутан"
+
+#~ msgid "_Edit Account..."
+#~ msgstr "_Уређивање налога..."
+
+#~ msgid ""
+#~ "<b>Welcome to Gossip</b>\n"
+#~ "\n"
+#~ "Gossip is a modern client for the Jabber Instant Message system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server."
+#~ msgstr ""
+#~ "<b>Добродошли у Чаврљање</b>\n"
+#~ "\n"
+#~ "Чаврљање је модеран клијент за Џабер Тренутне Поруке.\n"
+#~ "\n"
+#~ "Овај помоћник ће вам помоћи да подесите Чаврљање и конектујете се на ваш "
+#~ "омиљен Џабер сервер."
+
+#~ msgid "<b>Additional information</b>"
+#~ msgstr "<b>Додатне информације</b>"
+
+#~ msgid "<b>Address</b>"
+#~ msgstr "<b>Адреса</b>"
+
+#~ msgid "<b>Auto away</b>"
+#~ msgstr "<b>Аутоматски одсутан</b>"
+
+#~ msgid "Automatically enter away mode during inactivity"
+#~ msgstr "Аутоматски уђи у мод одсутности за време неактивности"
+
+#~ msgid "Enter away mode after"
+#~ msgstr "Уђи у мод одсутности после"
+
+#~ msgid "I'm away eating dinner, bbiab..."
+#~ msgstr "Ја сам одсутан док вечерам, враћам се за..."
+
+#~ msgid "Priority:"
+#~ msgstr "Важност:"
+
+#~ msgid "Set the status you want to use"
+#~ msgstr "Подесите стање које желите да користите"
+
+#~ msgid "minutes"
+#~ msgstr "минута"
+
+#~ msgid "<b>Jabber ID:</b>"
+#~ msgstr "<b>Џабер ID:</b>"
+
+#~ msgid "<b>Setup Finished</b>"
+#~ msgstr "<b>Поставка је завршена</b>"
+
+#~ msgid ""
+#~ "This user wants to subscribe to your presence.\n"
+#~ "Do you approve?"
+#~ msgstr ""
+#~ "Овај корисник је послао захтев да види вашу присутност.\n"
+#~ "Да ли одобравате?"
+
+#~ msgid "_Approve"
+#~ msgstr "Одо_бри"
+
+#~ msgid "_Defer"
+#~ msgstr "_Одбиј"
+
+#~ msgid "Default Account"
+#~ msgstr "Подразумевани Налог"
+
+#~ msgid "Could not open the address \"%s\": %s"
+#~ msgstr "Не може да приступи адреси „%s“: %s"
+
+#~ msgid "<b>Available accounts</b>"
+#~ msgstr "<b>Доступни налози</b>"
+
+#~ msgid "<b>What account do you want to use for this connection?</b>"
+#~ msgstr "<b>Који налог желите да користите за ову везу?</b>"
+
+#~ msgid "Use SS_L"
+#~ msgstr "Користи SSL"
+
+#~ msgid "_User:"
+#~ msgstr "Корисник:"
+
+#~ msgid "What request message do you want to send to <b>micke</b>?"
+#~ msgstr "Који захтев желите да пошаљете <b>Миљенку</b>?"
diff --git a/trunk/po/sr@Latn.po b/trunk/po/sr@Latn.po
new file mode 100644
index 000000000..f7c260e01
--- /dev/null
+++ b/trunk/po/sr@Latn.po
@@ -0,0 +1,2314 @@
+# Serbian translation of gossip
+# Courtesy of Prevod.org team (http://prevod.org/) -- 2003, 2004.
+#
+# This file is distributed under the same license as the gossip package.
+#
+# Maintainer: Dejan Matijević <dejan@ns.sympatico.ca>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2004-02-27 23:05+0100\n"
+"Last-Translator: Danilo Šegan <danilo@prevod.org>\n"
+"Language-Team: Serbian (sr) <serbiangnome-lista@nongnu.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Brzi glasnik"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Brzi glasnik"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+#, fuzzy
+msgid "Chat window theme"
+msgstr "Ćaskaj sa:"
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "Dodaj u svoj spisak drugara"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+#, fuzzy
+msgid "Enable sound when away"
+msgstr "Isključi zvuk kada ste _odsutni"
+
+#: ../data/empathy.schemas.in.h:9
+#, fuzzy
+msgid "Enable sound when busy"
+msgstr "Isključi zvuk kada ste _zauzeti"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Čavrljanje - Pošalji poruku"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Sakrij glavni prozor"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Sakrij glavni prozor."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "_Prikaži spisak kontakata"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "Visina glavnog prozora."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Prikaži nepovezane kontakte"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Prikaži grafički smešak"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Koristi zvuk za napomene"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Da li da pretvori smeške u grafičke slike u čavrljanju."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Da li da pusti zvuk kada poruka stigne."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Da li da pusti zvuk kada je odsutan."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Da li da pusti zvuk kada je zauzet."
+
+#: ../data/empathy.schemas.in.h:28
+#, fuzzy
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Da li da pusti zvuk kada poruka stigne."
+
+#: ../data/empathy.schemas.in.h:29
+#, fuzzy
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Da li da prikažem nepovezane kontakte u spisku kontakata."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Da li da prikažem nepovezane kontakte u spisku kontakata."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Da li da prikažem nepovezane kontakte u spisku kontakata."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Nepovezan"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Dostupan"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Zauzet"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Odsutan"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Prikaži spisak kontakata"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Grupa"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "Dodaj kontakt"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "_Sakrij spisak kontakata"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "Poveži se"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "U_redi omiljene..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "_Prikaži nepovezane kontakte"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Akcije"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+#, fuzzy
+msgid "_Accounts"
+msgstr "_Akcije"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "_Dodaj kontakt..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Razgovor"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "Poveži se"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "_Izađi"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Nova poruka..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+#, fuzzy
+msgid "_Personal Information"
+msgstr "Lični podaci"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Postavke"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Izađi"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+#, fuzzy
+msgid "_Room"
+msgstr "_Soba:"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "_View Previous Conversations"
+msgstr "S_ledeći razgovor"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Stanje"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Prikaži spisak kontakata"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+#, fuzzy
+msgid "An Instant Messaging client for GNOME"
+msgstr "Brzi glasnik za Gnoma"
+
+# Note to translators: put here your name (and address) so it
+# * will shop up in the "about" box
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr "Dejan Matijević"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Dostupan"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Nalog:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Nalog:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+#, fuzzy
+msgid "Accounts"
+msgstr "Ime naloga:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "<b>Nalog:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Nalog:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>Zvuk</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Ćaskaj"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "DŽaber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "Ime:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "_Tema:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">Primer: korisnik@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "_Lozinka:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+#, fuzzy
+msgid "Reso_urce:"
+msgstr "Izvor:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "Koristi _šifrovanje (SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "P_ort:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Server:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Nepovezan"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "Povezan"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "Oč_isti"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Ćaskaj"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+#, fuzzy
+msgid "Contact Infor_mation"
+msgstr "Po_daci za kontakt"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "Ćaskaj"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "Re_gistrovanje..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Unesite poruku o stanju:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Premesti jezičak _levo"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Premesti jezičak _desno"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+#, fuzzy
+msgid "_Add To Favorites"
+msgstr "U_redi omiljene..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Razgovor"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Odvoji list"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "_Sledeći list"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "P_rethodni list"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+#, fuzzy
+msgid "_Show Contacts"
+msgstr "_Prikaži spisak kontakata"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Listovi"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Umnoži adresu veze"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Otvori vezu"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A, %d. %B %Y."
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "_Nova poruka..."
+msgstr[1] "_Nova poruka..."
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Čavrljanje - Čavrljaj"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "_Razgovor"
+msgstr[1] "_Razgovor"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+#, fuzzy
+msgid "Typing a message."
+msgstr "Pošalji poruku čavrljanja..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "Dodaj kontakt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "Grupa"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "Dodaj kontakt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "Po_daci za kontakt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "Informacije za kontakt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/Prei_menuj grupu"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "Ukloni"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr ""
+"Unesite novi nadimak za kontakt\n"
+"%s"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "Ukloni"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/Ukloni kontakt"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "Čavrljanje - Uredi Grupno Čavrljanje"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "_Send File..."
+msgstr "Pošalji po_ruku..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "Izaberi"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "S_ledeći razgovor"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "Izgled"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>Nalog:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Omiljeno:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "Poveži se"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+#, fuzzy
+msgid "<b>Languages</b>"
+msgstr "<b>Podrazumevane poruke</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "<b>Zvuk</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>E-pošta:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+#, fuzzy
+msgid "Chat Th_eme:"
+msgstr "Ime za čavrljanje:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+#, fuzzy
+msgid "Enable sounds when _away"
+msgstr "Isključi zvuk kada ste _odsutni"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+#, fuzzy
+msgid "Enable sounds when _busy"
+msgstr "Isključi zvuk kada ste _zauzeti"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "Obaveštenje"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "_Postavke"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+#, fuzzy
+msgid "Show _smileys as images"
+msgstr "Pretvori _smeške u grafičke simbole"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "_Prikaži spisak kontakata"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+#, fuzzy
+msgid "Sort by s_tate"
+msgstr "Podesite vaše stanje:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+#, fuzzy
+msgid "_Play sound when messages arrive"
+msgstr "Puštaj zvuk po pristizanju poruka"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "Čavrljanje - Uredi Grupno Čavrljanje"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+#, fuzzy
+msgid "Custom message..."
+msgstr "Posebna poruka..."
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "Oč_isti"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "Da li želite da prihvatite zahtev?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+#, fuzzy
+msgid "Clear List"
+msgstr "Oč_isti"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Unesite poruku o stanju:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "Poruke o stanju"
+
+# Pretpostaviti je nešto smatrati datim bez izričitog navođenja, upravo kao i ovde.
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "Pretpostavljene poruke stanja"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s prekide vezu"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, fuzzy, c-format
+msgid "%s has come online"
+msgstr "%s se poveza"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "Oč_isti"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Ne uspostavljaj vezu pri pokretanju"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "Brzi glasnik"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Brzi glasnik"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "_Pridruži"
+
+#, fuzzy
+#~ msgid "Active"
+#~ msgstr "_Akcije"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "Nepoznata greška"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Obaveštenje"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Nepoznata greška"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Dostupan"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Nepoznata greška"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "Povezan"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "Povezan"
+
+#, fuzzy
+#~ msgid "This feature is unavailable."
+#~ msgstr "Možda je server trenutno nedostupan."
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Nov nalog"
+
+#~ msgid "Home"
+#~ msgstr "Početak"
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Možda je server trenutno nedostupan."
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Registrovanje naloga"
+
+#, fuzzy
+#~ msgid "This feature is not implemented"
+#~ msgstr "Možda je server trenutno nedostupan."
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "_Raskini vezu"
+
+#~ msgid "Connect"
+#~ msgstr "Poveži se"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Uspešno registrovan nalog"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Nije uspeo da registruje nalog"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Unesite vašu lozinku:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Unesite vašu lozinku:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Unesite novo ime za grupu\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "No information is available for this contact."
+#~ msgstr "Preuzmite podatke o ovom kontaktu"
+
+#, fuzzy
+#~ msgid "Information requested, please wait..."
+#~ msgstr "<b>Tražio je informacije, molim sačekajte...</b>"
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Ja bih voleo da dodam tebe na moju listu drugara."
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "_Nova poruka..."
+#~ msgstr[1] "_Nova poruka..."
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "Zahtev za poboljšanjem"
+#~ msgstr[1] "Zahtev za poboljšanjem"
+
+#, fuzzy
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "Poruka sa zahtevom"
+#~ msgstr[1] "Poruka sa zahtevom"
+
+#, fuzzy
+#~ msgid "Edit Account _Details"
+#~ msgstr "Uredi podatke o nalogu"
+
+#~ msgid "New message from %s"
+#~ msgstr "Nova poruka od %s"
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "_Prihvati"
+
+#, fuzzy
+#~ msgid "Decline"
+#~ msgstr "Večera"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Ime:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Soba:"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "Čavrljanje - Povezati se"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "<b>Tražio je informacije, molim sačekajte...</b>"
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "Da li želite da uklonite kontakt\n"
+#~ "%s\n"
+#~ "iz vašeg spiska drugara?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Unesite novo ime za grupu\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Izaberi"
+
+# :-)
+#~ msgid "Unsorted"
+#~ msgstr "Nesvrstani"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Nepoznata greška"
+
+#, fuzzy
+#~ msgid "%s would like to send you a file."
+#~ msgstr "Ja bih voleo da dodam tebe na moju listu drugara."
+
+#, fuzzy
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Ja bih voleo da dodam tebe na moju listu drugara."
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "Izaberi"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "Po_vezivanje..."
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Čavrljanje - Povezati se"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Koji nadimak želite da koristite za ovog korisnika?"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "_Tema:"
+
+#, fuzzy
+#~ msgid "Account"
+#~ msgstr "Ime naloga:"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "_Razgovor"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Spisak dostupnih naloga"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Sa kojim nalogom da uspostavi vezu pri pokretanju"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "IME NALOGA"
+
+#~ msgid "Available accounts:"
+#~ msgstr "Dostupni nalozi:"
+
+#~ msgid "[default]"
+#~ msgstr "[podrazumevano]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Nepostoji nalog sa imenom '%s'."
+
+#, fuzzy
+#~ msgid "Join"
+#~ msgstr "_Pridruži"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Ćaskaj"
+
+#, fuzzy
+#~ msgid "Chat Rooms"
+#~ msgstr "Čavrljanje - Čavrljaj"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "<b>Tražio je informacije, molim sačekajte...</b>"
+
+#~ msgid "Default"
+#~ msgstr "Podrazumevano"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "Ćaskaj"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s će biti dodat u vašu listu drugara."
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Kontant će biti dodat u vašu listu drugara"
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "Zahtev za poboljšanjem"
+
+#, fuzzy
+#~ msgid "Contact Information"
+#~ msgstr "Po_daci za kontakt"
+
+#, fuzzy
+#~ msgid "New subscription request from %s"
+#~ msgstr "Zahtev za poboljšanjem"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr ""
+#~ "Da li želite da uklonite kontakt\n"
+#~ "%s\n"
+#~ "iz vašeg spiska drugara?"
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr ""
+#~ "Da li želite da uklonite kontakt\n"
+#~ "%s\n"
+#~ "iz vašeg spiska drugara?"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Unesite vašu lozinku:"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Da li ste zapamtili lozinku?"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Ćaskaj"
+
+#, fuzzy
+#~ msgid "Contact goes online"
+#~ msgstr "%s se poveza"
+
+#, fuzzy
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Da li želite da prihvatite zahtev?"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "_Korisničko ime:"
+
+#, fuzzy
+#~ msgid "File size:"
+#~ msgstr "Veb sajt :"
+
+#~ msgid "Web site:"
+#~ msgstr "Veb sajt :"
+
+#~ msgid "_Accept"
+#~ msgstr "_Prihvati"
+
+#~ msgid "_Deny"
+#~ msgstr "O_dbij"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Zvuk</b>"
+
+#, fuzzy
+#~ msgid "Account:"
+#~ msgstr "Ime naloga:"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Čavrljanje - Uredi Grupno Čavrljanje"
+
+#, fuzzy
+#~ msgid "Group Chat"
+#~ msgstr "Čavrljanje - Čavrljaj"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "_Pridruži"
+
+#, fuzzy
+#~ msgid "Join room on start_up"
+#~ msgstr "Ne uspostavljaj vezu pri pokretanju"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "Ime:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "Server:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "_Nadimak:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Soba:"
+
+#, fuzzy
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Nalog:</b>"
+
+#, fuzzy
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "Podaci o klijentu"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Nalog:</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>Ime:</b>"
+
+#, fuzzy
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Podešavanja naloga</b>"
+
+#, fuzzy
+#~ msgid "<b>Status</b>"
+#~ msgstr "<b>Zvuk</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>Zvuk</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Primer: korisnik@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Ime naloga:"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "Dodaj kontakt"
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "Ćaskaj"
+
+#~ msgid "Client:"
+#~ msgstr "Klijent:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "Dodaj kontakt"
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Ne uspostavljaj vezu pri pokretanju"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "Dodaj kontakt"
+
+#~ msgid "Country:"
+#~ msgstr "Država:"
+
+#, fuzzy
+#~ msgid "Decide _Later"
+#~ msgstr "O_dluči kasnije"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "Dodaj kontakt"
+
+#~ msgid "Edit Groups"
+#~ msgstr "Uredi grupe"
+
+#~ msgid "Email:"
+#~ msgstr "E-pošta:"
+
+# DŽaber identifikaciona oznaka :-)
+#, fuzzy
+#~ msgid "ID:"
+#~ msgstr "DŽIO"
+
+#~ msgid "Name:"
+#~ msgstr "Ime:"
+
+#~ msgid "OS:"
+#~ msgstr "OS:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "<b>Podešavanja naloga</b>"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "Re_gistrovanje..."
+
+#, fuzzy
+#~ msgid "Search"
+#~ msgstr "_Traži..."
+
+#, fuzzy
+#~ msgid "Spell Checker"
+#~ msgstr "Čavrljanje - Pošalji poruku"
+
+#, fuzzy
+#~ msgid "Subscription Request"
+#~ msgstr "Zahtev za poboljšanjem"
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Koji nadimak želite da koristite za ovog korisnika?"
+
+#~ msgid "Version:"
+#~ msgstr "Verzija:"
+
+#, fuzzy
+#~ msgid "View Previous Conversations"
+#~ msgstr "S_ledeći razgovor"
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Koji nadimak želite da koristite?"
+
+#, fuzzy
+#~ msgid "_Birthday:"
+#~ msgstr "_Važnost:"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "Poveži se"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Opis"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Raskini vezu"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "E-pošta:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Unesite korisnički ID od osobe kojoj želite da pošanjete poruku za "
+#~ "čavrljanje."
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "P_ort:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "Ime:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Grupa"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "_Nadimak:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Lozinka:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "Poruk_e o stanju"
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "Ukloni"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Veb sajt :"
+
+# Pretpostaviti je nešto smatrati datim bez izričitog navođenja, upravo kao i ovde.
+#~ msgid "Preset status messages"
+#~ msgstr "Pretpostavljene poruke stanja"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Pretpostavljene poruke stanja."
+
+#, fuzzy
+#~ msgid "Connecting"
+#~ msgstr "Poveži se"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s će biti dodat u vašu listu drugara."
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "_DŽaber ID novog kontakta:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "Unesite vašu lozinku:"
+
+#, fuzzy
+#~ msgid "Favourite"
+#~ msgstr "<b>Omiljeno:</b>"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Kontakt informacije za %s"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/Informacije za kontakt"
+
+#, fuzzy
+#~ msgid "/Re_name Contact"
+#~ msgstr "/_Preimenuj kontakt"
+
+#, fuzzy
+#~ msgid "/_Edit Groups"
+#~ msgstr "/Uredi _grupe"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "S_ledeći razgovor"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Unesite novi nadimak za kontakt\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Uredi grupe za %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Dnevnik razgovora"
+
+#~ msgid "Registering account"
+#~ msgstr "Registrovanje naloga"
+
+#, fuzzy
+#~ msgid "Respond"
+#~ msgstr "Razlog:"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "U_redi omiljene..."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Ime:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Čavrljanje - Čavrljaj"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Tražio je informacije, molim sačekajte...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Primer: korisnik@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Account Name"
+#~ msgstr "Ime naloga:"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Čavrljanje - Čavrljaj"
+
+#, fuzzy
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Da li već imate nalog na DŽaber serveru?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr ""
+#~ "Unesite novi nadimak za kontakt\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "Unesite novi nadimak za kontakt\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the user's contact ID:"
+#~ msgstr "Kliknite da dobijete korisničke kontakt informacije"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Podešavanje je završeno"
+
+#~ msgid "Gossip"
+#~ msgstr "Čavrljanje"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Čavrljanje je moderan klijent za DŽaber sistem brzih poruka.\n"
+#~ "\n"
+#~ "Ovaj pomoćnik će vam pomoći da podesite Čavrljanje i povežete se na vaš "
+#~ "omiljen DŽaber server.\n"
+#~ "\n"
+#~ "Da počnete, samo kliknite „Napred“."
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "Zahtev će biti poslat i tražiti da vidite prisutnost korisnika, Dok se "
+#~ "zahtev ne odobri, korisnik će uvek biti prikazan kao \"Ne povezan\" u "
+#~ "vašoj listi prijatelja."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "U koju grupu želite da rasporedite ovaj kontakt?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "DŽaber ID:"
+
+#, fuzzy
+#~ msgid "Nickname:"
+#~ msgstr "_Nadimak:"
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "P_ort:"
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "Registrovanje naloga"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "Izvor:"
+
+#~ msgid "Sending request"
+#~ msgstr "Zahtev za slanje"
+
+#~ msgid "Server:"
+#~ msgstr "Server:"
+
+#, fuzzy
+#~ msgid "Web Site:"
+#~ msgstr "Veb sajt :"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Dobrodošli u Čavrljanje"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Koji sistem trenutnih poruka korisnik koristi?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Kako se zovete?"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "Koji server želite da koristite?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Koji nadimak koristite?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Koji nadimak želite da koristite?"
+
+#, fuzzy
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "U koju grupu želite da rasporedite ovaj kontakt?"
+
+#, fuzzy
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Sada je Čavrljanje odgovarajuće podešeno za vaš sistem.\n"
+#~ "Vi možete da promenite podešavanja vašeg naloga kasnije izborom menija "
+#~ "Razgovor->Povezivanje...."
+
+#, fuzzy
+#~ msgid "Your Account"
+#~ msgstr "DŽaber Nalog"
+
+#~ msgid "Your Identity"
+#~ msgstr "Vaš identitet"
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "Čavrljanje - Čavrljaj"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Ne"
+
+#~ msgid "_Search..."
+#~ msgstr "_Traži..."
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Da"
+
+#~ msgid "Be silent when away"
+#~ msgstr "Budi tih na odsustvu"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "Budi tih na odsustvu"
+
+#~ msgid "Height of main window"
+#~ msgstr "Visina glavnog prozora"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "Vodoravni položaj glavnog prozora."
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "Uspravni položaj glavnog prozora."
+
+#~ msgid "The width of the main window."
+#~ msgstr "Širina glavnog prozora."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Širina glavnog prozora"
+
+#~ msgid "X position of main window"
+#~ msgstr "Vodoravni položaj glavnog prozora"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Uspravni položaj glavnog prozora"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Čavrljanje, brzi glasnik za Gnoma"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "Sakrij glavni prozor."
+
+#, fuzzy
+#~ msgid "Requested Information"
+#~ msgstr "Podaci o _nalogu"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "Pošalji poruku u _razgovor..."
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "%s prekide vezu"
+
+#~ msgid "Available..."
+#~ msgstr "Dostupan..."
+
+#~ msgid "Busy..."
+#~ msgstr "Zauzet..."
+
+#~ msgid "Away..."
+#~ msgstr "Odsutan..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "Po_daci za kontakt"
+
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>Zvuk</b>"
+
+#, fuzzy
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Čavrljanje - Uredi Nalog"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "_Priključi se grupnom čavrljanju..."
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "P_ort:"
+
+#, fuzzy
+#~ msgid "Requested information."
+#~ msgstr "Podaci o klijentu"
+
+#, fuzzy
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "Koji server želite da koristite?"
+
+#, fuzzy
+#~ msgid "Connection to the server failed."
+#~ msgstr "<b>Poveži se na server</b>"
+
+#~ msgid "Artwork by:"
+#~ msgstr "Crteži:"
+
+#, fuzzy
+#~ msgid "Account ID"
+#~ msgstr "Ime naloga:"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%sČavrljanje - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/Prikaži _dnevnik"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "Verzija:"
+
+#, fuzzy
+#~ msgid "Croatian"
+#~ msgstr "Razgovor"
+
+#, fuzzy
+#~ msgid "Latvian"
+#~ msgstr "Napuštam:"
+
+#~ msgid "View Lo_g"
+#~ msgstr "Pogledaj dne_vnik"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Čavrljanje - Grupno Čavrljanje"
+
+#, fuzzy
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Čavrljanje - Povezati se"
+
+#, fuzzy
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "Po_daci za kontakt"
+
+#, fuzzy
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Čavrljanje - Uredi Grupno Čavrljanje"
+
+#, fuzzy
+#~ msgid "Gossip - New Account"
+#~ msgstr "Čavrljanje - Uredi Nalog"
+
+#, fuzzy
+#~ msgid "Gossip - New Message"
+#~ msgstr "Čavrljanje - Pošalji poruku"
+
+#, fuzzy
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Čavrljanje - Povezati se"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Postavke"
+
+#, fuzzy
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Čavrljanje - Pošalji poruku"
+
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "Koju poruku sa zahtevom želite da pošaljete %s?"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Proverite da li su podaci o nalogu ispravni."
+
+#~ msgid "%s wants to be notified of your presence."
+#~ msgstr "%s želi obaveštenja o vašem prisustvu."
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Vi ste razvezani sa servera. Želiteli da se ponovo povežete?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr ""
+#~ "Proverite da li su podaci o nalogu ispravni, kao što je korisničko ime i "
+#~ "lozinka.."
+
+#~ msgid "Edit List..."
+#~ msgstr "Uredi spisak..."
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "Dogodila se greška prilikom čavrljanje sa %s."
+
+#~ msgid "Details:"
+#~ msgstr "Detalji:"
+
+#~ msgid "An error occurred when chatting in the group chat %s."
+#~ msgstr "Dogodila se greška prilikom čavrljanje u grupi %s."
+
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "Nije moguće uneti grupu grupu za čavrljanje %s."
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Čavrljanje će sada probati da koristi vaš nalog:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Čavrljanje će sada probati da registruje vaš nalog:"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "Od:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Čavrljanje - Primi poruku"
+
+#~ msgid "In reply to:"
+#~ msgstr "Kao odgovor na:"
+
+#~ msgid "To:"
+#~ msgstr "Kome:"
+
+#~ msgid "_Reply..."
+#~ msgstr "Odgo_vori..."
+
+#~ msgid "_Send"
+#~ msgstr "_Pošalji"
+
+#~ msgid "C_onnect"
+#~ msgstr "P_oveži se"
+
+#~ msgid "_Resource:"
+#~ msgstr "_Resurs:"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>Dostupne sobe za čavrljanje</b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>Informacija sobe za čavrljanje</b>"
+
+#~ msgid "Gossip - Join Group Chat"
+#~ msgstr "Čavrljanje - Pridruži se Grupnom Čavrljanju"
+
+#~ msgid "N_ickname:"
+#~ msgstr "Nad_imak:"
+
+#~ msgid ""
+#~ "Pick a favorite, or enter nickname, server name, and the name of the chat "
+#~ "room to enter."
+#~ msgstr ""
+#~ "Da uđete, izaberite omiljeno ili unesite nadimak, ime servera i ime od "
+#~ "sobe za čavrljanje."
+
+#~ msgid "R_emove"
+#~ msgstr "_Ukloni"
+
+#~ msgid "_Add"
+#~ msgstr "_Dodaj"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>Pretpostavljene poruke stanja</b>"
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Informacija nije dostupana</i>"
+
+#~ msgid "Choose a Server"
+#~ msgstr "Izaberi server"
+
+#~ msgid "Choose from list:"
+#~ msgstr "Odaberite iz spiska:"
+
+#~ msgid "Information about ..."
+#~ msgstr "Informacije o..."
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "Na kom serveru imate DŽaber nalog?"
+
+#~ msgid "Sound"
+#~ msgstr "Zvuk"
+
+#~ msgid "Status Message"
+#~ msgstr "Poruka o stanju"
+
+#~ msgid "Use a different server"
+#~ msgstr "Koristi drugi server"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Koju poruku sa zahtevom želite da pošaljete ...?"
+
+#, fuzzy
+#~ msgid "About Gossip"
+#~ msgstr "Čavrljanje"
+
+# Note to translators: put here your name (and address) so it
+# * will shop up in the "about" box
+#, fuzzy
+#~ msgid "translator_credits_old"
+#~ msgstr "Dejan Matijević <dejan@ns.sympatico.ca>"
+
+#~ msgid "Gossip Website"
+#~ msgstr "Veb stranica Čavrljanja"
+
+#~ msgid "Unable to Authenticate"
+#~ msgstr "Ne mogu da se identifikujem"
+
+#~ msgid "Gossip, Jabber Client"
+#~ msgstr "Čavrljanje, DŽaber Klijent"
+
+#~ msgid "About to leave..."
+#~ msgstr "Upravo odlazim..."
+
+#~ msgid "Autoaway message"
+#~ msgstr "Poruka za samoodsustvo"
+
+#~ msgid "Away messages"
+#~ msgstr "Poruke za odsustvo"
+
+#~ msgid "Busy messages"
+#~ msgstr "Poruke za zauzeće"
+
+#~ msgid "Message to show before going away"
+#~ msgstr "Poruka koja se prikazuje pre odlaska"
+
+#~ msgid "Not at the computer"
+#~ msgstr "Nisam za računarom"
+
+#~ msgid "Just about to leave..."
+#~ msgstr "Upravo odlazim..."
+
+#~ msgid "Custom Busy Message..."
+#~ msgstr "Posebna poruka za zauzeće..."
+
+#~ msgid "Leave..."
+#~ msgstr "Napusti..."
+
+#~ msgid "New Busy Message"
+#~ msgstr "Nova poruka za zauzeće"
+
+#~ msgid "New Away Message"
+#~ msgstr "Nova poruka za odsustvo"
+
+#~ msgid "Working"
+#~ msgstr "Radim"
+
+#~ msgid "Eating"
+#~ msgstr "Jedem"
+
+#~ msgid "Sleeping"
+#~ msgstr "Spavam"
+
+#~ msgid "Enter the new message:"
+#~ msgstr "Unesite novu poruku:"
+
+#~ msgid "Leave"
+#~ msgstr "Napusti"
+
+#~ msgid ""
+#~ "Note: contacts can belong to multiple groups or they can be in no group "
+#~ "at all."
+#~ msgstr ""
+#~ "Pažnja: kontakti mogu da pripadaju većem broju grupa ili nijednoj grupi."
+
+#~ msgid "Preset messages for quickly setting away status."
+#~ msgstr "Postavljanje poruke za brzo odlaženje na odsustvo."
+
+#~ msgid "Preset messages for quickly setting busy status."
+#~ msgstr "Postavljanje poruke za brzo podešavanje zauzeća."
+
+#~ msgid "Reason for being busy:"
+#~ msgstr "Razlog zauzeća:"
+
+#~ msgid "Reason for leaving:"
+#~ msgstr "Razlog odlaska:"
+
+#~ msgid "As _Windows"
+#~ msgstr "Kao _prozori"
+
+#~ msgid "As a _List"
+#~ msgstr "Kao _spisak"
+
+#~ msgid "_Go"
+#~ msgstr "_Idi"
+
+#~ msgid "Open conversations in single window with list view"
+#~ msgstr "Otvori razgovore u jednom prozoru prikazujući ih u spisku"
+
+#~ msgid "[Eating,Sleeping]"
+#~ msgstr "[Jedem,spavam]"
+
+#~ msgid "[Working]"
+#~ msgstr "[Radim]"
+
+#~ msgid "Add"
+#~ msgstr "Dodaj"
+
+#~ msgid "Open conversations in a single window with _list view"
+#~ msgstr "Otvori razgovore u jednom prozoru kao sp_isak"
+
+#~ msgid "<b>Away messages</b>"
+#~ msgstr "<b>Poruke za odsustvo</b>"
+
+#~ msgid "Available:"
+#~ msgstr "Dostupan:"
+
+#~ msgid "Away:"
+#~ msgstr "Odsutan:"
+
+#~ msgid "Messages"
+#~ msgstr "Poruke"
+
+#~ msgid ""
+#~ "These messages are used to describe your status when you're about to "
+#~ "leave and when you're away."
+#~ msgstr ""
+#~ "Ove poruke se koriste za opisivanje vašeg stanja kada upravo odlazite ili "
+#~ "ste odsutni."
+
+#~ msgid ""
+#~ "These messages are used to describe your status when you're available, "
+#~ "about to leave, or automatically set away due to inactivity."
+#~ msgstr ""
+#~ "Ove poruke se koriste za opisivanje vašeg stanja kada ste dostupni, "
+#~ "upravo odlazite ili ste odsutni usled neaktivnosti."
+
+#~ msgid "Use com_pact conversation style"
+#~ msgstr "Koristi stil sa_žetog razgovora"
+
+#~ msgid "Use sounds to _notify when new messages arrive"
+#~ msgstr "Koristi zvuk za _obaveštenje kada nova poruka stigne"
+
+#~ msgid "Timestamp all messages"
+#~ msgstr "Označi vreme za sve poruke"
+
+#~ msgid "Whether or not to timestamp all messages in conversations."
+#~ msgstr "Da li da doda oznake vremena na sve poruke u razgovorima."
+
+#~ msgid "_Timestamp all messages"
+#~ msgstr "Dodaj oznaku _vremenskog trenutka na sve poruke"
+
+#~ msgid "Custom Away Message..."
+#~ msgstr "Posebna poruka za odsustvo..."
+
+# Translators: See comment for "%sChat - %s".
+#~ msgid "%sChat"
+#~ msgstr "%sČavrljanje"
+
+# The extra space is to differentiate the string from Offline as status. It
+# * might need a different translation, at least in Swedish.
+#~ msgid "Offline "
+#~ msgstr "Nepovezan"
+
+#~ msgid "Others"
+#~ msgstr "Drugi"
+
+#~ msgid "Get _Info"
+#~ msgstr "_Podaci"
+
+#~ msgid "Use ta_bs instead of windows for conversations"
+#~ msgstr "Koristi _listove umesto prozora za razgovore"
+
+#~ msgid "I'm here"
+#~ msgstr "Ovde sam"
+
+#~ msgid "I'm not here right now"
+#~ msgstr "Trenutno nisam ovde"
+
+#~ msgid "Auto away enabled"
+#~ msgstr "Automatski odsutan uključeno"
+
+#~ msgid "Extended autoaway time"
+#~ msgstr "Produženo vreme za automatski odsutan"
+
+#~ msgid ""
+#~ "The number of minutes of idle time before automatically going into \"away"
+#~ "\" mode."
+#~ msgstr ""
+#~ "Broj minuta od neaktivnog vremena pre nego što automatski ode u mod "
+#~ "\"odsutan\""
+
+#~ msgid ""
+#~ "The number of minutes of idle time before automatically going into "
+#~ "\"extended away\" mode."
+#~ msgstr ""
+#~ "Broj minuta od neaktivnog vremena pre nego što automatski ode u mod "
+#~ "\"dugo odsutan\""
+
+#~ msgid ""
+#~ "Whether or not to go into \"away\" mode automatically when a certain time "
+#~ "of idling has passed."
+#~ msgstr ""
+#~ "Da li da ode u mod \"odsutan\" automatski kada određeno vreme "
+#~ "neaktivnosti prođe."
+
+#~ msgid "_Busy"
+#~ msgstr "_Zauzet"
+
+#~ msgid "Present"
+#~ msgstr "Prisutni"
+
+#~ msgid "Timestamp messages"
+#~ msgstr "Prikaži oznaku vremenskog trenutka na porukama"
+
+#~ msgid "Free to chat"
+#~ msgstr "Slobodan za ćaskanje"
+
+#~ msgid "Extended away"
+#~ msgstr "Dugo odsutan"
+
+#~ msgid "_Edit Account..."
+#~ msgstr "_Uređivanje naloga..."
+
+#~ msgid ""
+#~ "<b>Welcome to Gossip</b>\n"
+#~ "\n"
+#~ "Gossip is a modern client for the Jabber Instant Message system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server."
+#~ msgstr ""
+#~ "<b>Dobrodošli u Čavrljanje</b>\n"
+#~ "\n"
+#~ "Čavrljanje je moderan klijent za DŽaber Trenutne Poruke.\n"
+#~ "\n"
+#~ "Ovaj pomoćnik će vam pomoći da podesite Čavrljanje i konektujete se na "
+#~ "vaš omiljen DŽaber server."
+
+#~ msgid "<b>Additional information</b>"
+#~ msgstr "<b>Dodatne informacije</b>"
+
+#~ msgid "<b>Address</b>"
+#~ msgstr "<b>Adresa</b>"
+
+#~ msgid "<b>Auto away</b>"
+#~ msgstr "<b>Automatski odsutan</b>"
+
+#~ msgid "Automatically enter away mode during inactivity"
+#~ msgstr "Automatski uđi u mod odsutnosti za vreme neaktivnosti"
+
+#~ msgid "Enter away mode after"
+#~ msgstr "Uđi u mod odsutnosti posle"
+
+#~ msgid "I'm away eating dinner, bbiab..."
+#~ msgstr "Ja sam odsutan dok večeram, vraćam se za..."
+
+#~ msgid "Priority:"
+#~ msgstr "Važnost:"
+
+#~ msgid "Set the status you want to use"
+#~ msgstr "Podesite stanje koje želite da koristite"
+
+#~ msgid "minutes"
+#~ msgstr "minuta"
+
+#~ msgid "<b>Jabber ID:</b>"
+#~ msgstr "<b>DŽaber ID:</b>"
+
+#~ msgid "<b>Setup Finished</b>"
+#~ msgstr "<b>Postavka je završena</b>"
+
+#~ msgid ""
+#~ "This user wants to subscribe to your presence.\n"
+#~ "Do you approve?"
+#~ msgstr ""
+#~ "Ovaj korisnik je poslao zahtev da vidi vašu prisutnost.\n"
+#~ "Da li odobravate?"
+
+#~ msgid "_Approve"
+#~ msgstr "Odo_bri"
+
+#~ msgid "_Defer"
+#~ msgstr "_Odbij"
+
+#~ msgid "Default Account"
+#~ msgstr "Podrazumevani Nalog"
+
+#~ msgid "Could not open the address \"%s\": %s"
+#~ msgstr "Ne može da pristupi adresi „%s“: %s"
+
+#~ msgid "<b>Available accounts</b>"
+#~ msgstr "<b>Dostupni nalozi</b>"
+
+#~ msgid "<b>What account do you want to use for this connection?</b>"
+#~ msgstr "<b>Koji nalog želite da koristite za ovu vezu?</b>"
+
+#~ msgid "Use SS_L"
+#~ msgstr "Koristi SSL"
+
+#~ msgid "_User:"
+#~ msgstr "Korisnik:"
+
+#~ msgid "What request message do you want to send to <b>micke</b>?"
+#~ msgstr "Koji zahtev želite da pošaljete <b>Miljenku</b>?"
diff --git a/trunk/po/sv.po b/trunk/po/sv.po
new file mode 100644
index 000000000..382314182
--- /dev/null
+++ b/trunk/po/sv.po
@@ -0,0 +1,2897 @@
+# Swedish messages for Empathy.
+# Copyright (C) 2002-2008 Free Software Foundation, Inc.
+# Daniel Nylander <po@danielnylander.se>, 2006, 2007, 2008.
+# Richard Hult <richard@imendio.com>, 2002, 2003.
+# Christian Rose <menthos@menthos.com>, 2003, 2004.
+#
+# Snälla, ta *INTE* bort de extra #~-meddelandena på slutet.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: empathy\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-04-23 17:21+0200\n"
+"PO-Revision-Date: 2008-04-23 17:44+0100\n"
+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../data/empathy.desktop.in.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr "Snabbmeddelandeklienten Empathy"
+
+#: ../data/empathy.desktop.in.in.h:2
+msgid "Send and receive instant messages"
+msgstr "Skicka och ta emot snabbmeddelanden"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Öppna alltid ett separat fönster för nya chattar."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Character to add after nickname when using nick completion (tab) in group chat."
+msgstr "Tecken att lägga till efter smeknamn när smeknamnskomplettering (tab) används i gruppchatt."
+
+#: ../data/empathy.schemas.in.h:3
+msgid "Chat window theme"
+msgstr "Chattfönstertema"
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Checks if Empathy should autoconnect on startup"
+msgstr "Kontrollerar om Empathy ska ansluta automatiskt vid uppstart"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Checks if NetworkManager should be used"
+msgstr "Kontrollerar om NetworkManager ska användas"
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Checks if Salut account is created"
+msgstr "Kontrollerar om Salut-konto har skapats"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr "Kommaseparerad lista av språk att använda för stavningskontroll (tex en, fr, nl)."
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Compact contact list"
+msgstr "Kompakt kontaktlista"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Contact list sort criterium"
+msgstr "Sorteringskriteria för kontaktlista"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Default directory to select an avatar image from"
+msgstr "Standardkatalog att välja avatarbild från"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Enable popup when contact is available"
+msgstr "Aktivera popup när kontakt är tillgänglig"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Enable sound when away"
+msgstr "Aktivera ljud under frånvaro"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Enable sound when busy"
+msgstr "Aktivera ljud under upptagetläge"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Enable spell checker"
+msgstr "Aktivera stavningskontroll"
+
+# Vi översätter "hide" med "dölj" i GNOME. Gömmer gör man något för att det
+# inte ska hittas, döljer gör man för att det inte ska synas.
+#: ../data/empathy.schemas.in.h:15
+msgid "Hide main window"
+msgstr "Dölj huvudfönstret"
+
+# Vi översätter "hide" med "dölj" i GNOME. Gömmer gör man något för att det
+# inte ska hittas, döljer gör man för att det inte ska synas.
+#: ../data/empathy.schemas.in.h:16
+msgid "Hide the main window."
+msgstr "Dölj huvudfönstret."
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Nick completed character"
+msgstr "Tecken för smeknamnskomplettering"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "Open new chats in separate windows"
+msgstr "Öppna nya chattar i separata fönster"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "Show avatars"
+msgstr "Visa avatarer"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Show hint about closing the main window"
+msgstr "Visa tips om att stänga huvudfönstret"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Show offline contacts"
+msgstr "Visa frånkopplade kontakter"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Spell checking languages"
+msgstr "Rättstavningsspråk"
+
+#: ../data/empathy.schemas.in.h:23
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Den senaste katalogen som en avatarbild valdes från."
+
+#: ../data/empathy.schemas.in.h:24
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Det tema som används för att visa samtal i chattfönster."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Use graphical smileys"
+msgstr "Använd grafiska smilisar"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Use notification sounds"
+msgstr "Använd notifieringsljud"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Use theme for chat rooms"
+msgstr "Använd tema för chattrum"
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not Empathy should automatically login to your accounts on startup."
+msgstr "Huruvida Empathy automatiskt ska logga in med dina konton vid uppstart eller inte."
+
+#: ../data/empathy.schemas.in.h:29
+msgid "Whether or not the Salut account has been created on the first empathy run."
+msgstr "Huruvida Salut-kontot har skapats eller inte vid första starten av empathy."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not the network manager should be used to automatically disconnect/reconnect."
+msgstr "Huruvida nätverkshanteraren ska användas för att automatiskt koppla från/återansluta eller inte."
+
+#: ../data/empathy.schemas.in.h:31
+msgid "Whether or not to check words typed against the languages you want to check with."
+msgstr "Huruvida ord som skrivs ska kontrolleras mot språken du valt."
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether or not to convert smileys into graphical images in conversations."
+msgstr "Huruvida smilisar ska omvandlas till grafiska bilder eller inte i samtal."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Huruvida ljud ska spelas eller inte när meddelanden kommer."
+
+#: ../data/empathy.schemas.in.h:34
+msgid "Whether or not to play sounds when away."
+msgstr "Huruvida ljud ska spelas eller inte under frånvaro."
+
+#: ../data/empathy.schemas.in.h:35
+msgid "Whether or not to play sounds when busy."
+msgstr "Huruvida ljud ska spelas eller inte under upptagetläge."
+
+#: ../data/empathy.schemas.in.h:36
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Huruvida en popup ska visas eller inte när en kontakt blir tillgänglig."
+
+#: ../data/empathy.schemas.in.h:37
+msgid "Whether or not to show avatars for contacts in the contact list and chat windows."
+msgstr "Huruvida avatarer ska visas i kontaktlistan och chattfönster eller inte."
+
+#: ../data/empathy.schemas.in.h:38
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Huruvida frånkopplade kontakter ska visas i kontaktlistan eller inte."
+
+#: ../data/empathy.schemas.in.h:39
+msgid "Whether or not to show the message dialog about closing the main window with the 'x' button in the title bar."
+msgstr "Huruvida meddelandedialogen om att stänga huvudfönstret ska visas eller inte när man klickar på \"x\"-knappen i titelraden."
+
+#: ../data/empathy.schemas.in.h:40
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Huruvida kontaktlistan ska visas i kompakt läge eller inte."
+
+#: ../data/empathy.schemas.in.h:41
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Huruvida tema ska användas för chattrum eller inte."
+
+#: ../data/empathy.schemas.in.h:42
+msgid "Which criterium to use when sorting the contact list. Default is to use sort by the contact's name with the value \"name\". A value of \"state\" will sort the contact list by state."
+msgstr "Vilket kriteria som ska användas när kontaktlistan sorteras. Standard är att sortera efter kontaktens namn med värdet \"name\". Värdet \"state\" kommer att sortera kontaktlistan efter tillstånd."
+
+#: ../libempathy/empathy-tp-contact-list.c:676
+#: ../src/empathy.c:189
+msgid "People nearby"
+msgstr "Personer i närheten"
+
+#: ../libempathy/empathy-utils.c:475
+msgid "Available"
+msgstr "Tillgänglig"
+
+#: ../libempathy/empathy-utils.c:477
+msgid "Busy"
+msgstr "Upptagen"
+
+#: ../libempathy/empathy-utils.c:480
+msgid "Away"
+msgstr "Frånvarande"
+
+#: ../libempathy/empathy-utils.c:482
+msgid "Hidden"
+msgstr "Dold"
+
+#: ../libempathy/empathy-utils.c:485
+msgid "Offline"
+msgstr "Frånkopplad"
+
+#: ../libempathy-gtk/empathy-account-chooser.c:334
+msgid "All"
+msgstr "Alla"
+
+#: ../libempathy-gtk/empathy-account-widget.c:286
+#: ../libempathy-gtk/empathy-account-widget.c:331
+#, c-format
+msgid "%s:"
+msgstr "%s:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-generic.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:1
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:1
+msgid "<b>Advanced</b>"
+msgstr "<b>Avancerat</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:2
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr "Glöm lösenordet och töm inmatningen."
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:5
+msgid "Pass_word:"
+msgstr "L_ösenord:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:4
+msgid "Screen _Name:"
+msgstr "Skärm_namn:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:11
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:9
+msgid "_Port:"
+msgstr "_Port:"
+
+#: ../libempathy-gtk/empathy-account-widget-aim.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:7
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:12
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:6
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:11
+#: ../src/empathy-new-chatroom-dialog.glade.h:10
+msgid "_Server:"
+msgstr "_Server:"
+
+#: ../libempathy-gtk/empathy-account-widget-groupwise.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:4
+#: ../libempathy-gtk/empathy-account-widget-msn.glade.h:3
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:4
+msgid "Login I_D:"
+msgstr "Inloggningsid:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:3
+msgid "ICQ _UIN:"
+msgstr "ICQ _UIN:"
+
+#: ../libempathy-gtk/empathy-account-widget-icq.glade.h:5
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:7
+msgid "_Charset:"
+msgstr "Tec_kenuppsättning:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.c:246
+msgid "New Network"
+msgstr "Nytt nätverk"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:1
+msgid "<b>Network</b>"
+msgstr "<b>Nätverk</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:2
+msgid "<b>Servers</b>"
+msgstr "<b>Servrar</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:3
+msgid "Charset:"
+msgstr "Teckenuppsättning:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:4
+msgid "Create a new IRC network"
+msgstr "Skapa ett nytt irc-nätverk"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:5
+msgid "Edit the selected IRC network"
+msgstr "Redigera markerat irc-nätverk"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:6
+msgid "Network"
+msgstr "Nätverk"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:7
+msgid "Network:"
+msgstr "Nätverk:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:8
+msgid "Nickname:"
+msgstr "Smeknamn:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:9
+msgid "Password:"
+msgstr "Lösenord:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:10
+msgid "Quit message:"
+msgstr "Avslutningsmeddelande:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:11
+msgid "Real name:"
+msgstr "Verkligt namn:"
+
+#: ../libempathy-gtk/empathy-account-widget-irc.glade.h:12
+msgid "Remove the selected IRC network"
+msgstr "Ta bort markerat irc-nätverk"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:2
+msgid "<b>Override server settings</b>"
+msgstr "<b>Åsidosätt serverinställningar</b>"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:6
+msgid "Pri_ority:"
+msgstr "Pri_oritet:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:7
+msgid "Reso_urce:"
+msgstr "_Resurs:"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:8
+msgid "Use old SS_L"
+msgstr "Använd gammal SS_L"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:9
+msgid "_Encryption required (TLS/SSL)"
+msgstr "_Kryptering krävs (TLS/SSL)"
+
+#: ../libempathy-gtk/empathy-account-widget-jabber.glade.h:10
+msgid "_Ignore SSL certificate errors"
+msgstr "_Ignorera SSL-certifikatfel"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:2
+msgid "_Email:"
+msgstr "_E-post:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:3
+msgid "_First Name: "
+msgstr "_Förnamn:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:4
+msgid "_Jabber ID:"
+msgstr "_Jabber-id:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:5
+msgid "_Last Name:"
+msgstr "_Efternamn:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:6
+#: ../src/empathy-chatrooms-window.glade.h:8
+msgid "_Nickname:"
+msgstr "Smek_namn:"
+
+#: ../libempathy-gtk/empathy-account-widget-salut.glade.h:7
+msgid "_Published Name:"
+msgstr "_Publikt namn:"
+
+#. look up the DNS SRV record at the service's domain for the host name of a STUN server.
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:3
+msgid "Discover STUN"
+msgstr "Upptäck STUN"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:6
+msgid "Stun Server:"
+msgstr "STUN-server:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:7
+msgid "Stun port:"
+msgstr "STUN-port:"
+
+#: ../libempathy-gtk/empathy-account-widget-sip.glade.h:8
+msgid "_Username:"
+msgstr "A_nvändarnamn:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:3
+msgid "J_apan server:"
+msgstr "J_apansk server:"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:6
+msgid "Use _Yahoo Japan"
+msgstr "Använd _Yahoo Japan"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:8
+msgid "_Ignore conference and chatroom invitations"
+msgstr "_Ignorera inbjudningar till konferenser och chattrum"
+
+#: ../libempathy-gtk/empathy-account-widget-yahoo.glade.h:10
+msgid "_Room List locale:"
+msgstr "Lokalanpassning för _rumslista:"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:226
+msgid "To add a new account, you can click on the 'Add' button and a new entry will be created for you to start configuring."
+msgstr "För att lägga till ett nytt konto, klicka på knappen \"Lägg till\" och en ny post kommer att skapas för dig att börja konfigurera."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:230
+msgid "To add a new account, you first have to install a backend for each protocol you want to use."
+msgstr "För att lägga till ett nytt konto måste du först installera en bakände för varje protokoll som du vill använda."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:237
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:2
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Inget konto valt</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:238
+msgid ""
+"\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want to configure in the list on the left."
+msgstr ""
+"\n"
+"\n"
+"Om du inte vill lägga till ett konto, kan du helt enkelt klicka på kontot, i listan till vänster, som du vill konfigurera."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:244
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Inga konton konfigurerade</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:425
+msgid "Enabled"
+msgstr "Aktiverad"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:435
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:4
+msgid "Accounts"
+msgstr "Konton"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:918
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Du håller på att ta bort kontot %s!\n"
+"Är du säker att du vill fortsätta?"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.c:924
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still be available."
+msgstr ""
+"Eventuella samtal och chattrum kommer inte tas bort.\n"
+"\n"
+"Om du senare lägger till kontot igen, kommer dessa fortfarande vara tillgängliga."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:1
+msgid "<b>New Account</b>"
+msgstr "<b>Nytt konto</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:3
+msgid "<b>Settings</b>"
+msgstr "<b>Inställningar</b>"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:5
+msgid "Cr_eate"
+msgstr "Ska_pa"
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:6
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want to configure in the list on the left."
+msgstr ""
+"För att lägga till ett nytt konto kan du klicka på knappen \"Lägg till\" och en ny post kommer att skapas för dig att börja konfigurera.\n"
+"\n"
+"Om du inte vill lägga till ett konto, kan du helt enkelt klicka på kontot, i listan till vänster, som du vill konfigurera."
+
+#: ../libempathy-gtk/empathy-accounts-dialog.glade.h:9
+msgid "Type:"
+msgstr "Typ:"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:458
+msgid "Select Your Avatar Image"
+msgstr "Välj din avatarbild"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:461
+msgid "No Image"
+msgstr "Ingen bild"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:521
+msgid "Images"
+msgstr "Bilder"
+
+#: ../libempathy-gtk/empathy-avatar-chooser.c:525
+msgid "All Files"
+msgstr "Alla filer"
+
+#: ../libempathy-gtk/empathy-avatar-image.c:298
+msgid "Click to enlarge"
+msgstr "Klicka för att förstora"
+
+#: ../libempathy-gtk/empathy-chat.c:282
+#: ../src/empathy.c:70
+#: ../src/empathy-call-window.c:355
+msgid "Disconnected"
+msgstr "Frånkopplad"
+
+#: ../libempathy-gtk/empathy-chat.c:562
+msgid "offline"
+msgstr "frånkopplad"
+
+#: ../libempathy-gtk/empathy-chat.c:565
+msgid "invalid contact"
+msgstr "ogiltig kontakt"
+
+#: ../libempathy-gtk/empathy-chat.c:568
+msgid "permission denied"
+msgstr "åtkomst nekad"
+
+#: ../libempathy-gtk/empathy-chat.c:571
+msgid "too long message"
+msgstr "för långt meddelande"
+
+#: ../libempathy-gtk/empathy-chat.c:574
+msgid "not implemented"
+msgstr "inte implementerat"
+
+#: ../libempathy-gtk/empathy-chat.c:577
+msgid "unknown"
+msgstr "okänt"
+
+#: ../libempathy-gtk/empathy-chat.c:581
+#, c-format
+msgid "Error sending message '%s': %s"
+msgstr "Fel vid sändning av meddelandet \"%s\": %s"
+
+#: ../libempathy-gtk/empathy-chat.c:611
+#, c-format
+msgid "Topic set to: %s"
+msgstr "Ämnet inställt till: %s"
+
+#: ../libempathy-gtk/empathy-chat.c:613
+msgid "No topic defined"
+msgstr "Inget ämne definierat"
+
+#: ../libempathy-gtk/empathy-chat.c:1116
+msgid "Insert Smiley"
+msgstr "Infoga smilis"
+
+#: ../libempathy-gtk/empathy-chat.c:1163
+msgid "_Check Word Spelling..."
+msgstr "_Kontrollera stavning..."
+
+#: ../libempathy-gtk/empathy-chat.c:1264
+#, c-format
+msgid "%s has joined the room"
+msgstr "%s har gått in i rummet"
+
+#: ../libempathy-gtk/empathy-chat.c:1267
+#, c-format
+msgid "%s has left the room"
+msgstr "%s har lämnat rummet"
+
+#: ../libempathy-gtk/empathy-chat.c:1732
+msgid "Connected"
+msgstr "Ansluten"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:1
+msgid "<b>Topic:</b>"
+msgstr "<b>Ämne:</b>"
+
+#: ../libempathy-gtk/empathy-chat.glade.h:2
+msgid "Group Chat"
+msgstr "Gruppchatt"
+
+#: ../libempathy-gtk/empathy-chat-view.c:433
+msgid "_Copy Link Address"
+msgstr "_Kopiera länkadress"
+
+#: ../libempathy-gtk/empathy-chat-view.c:441
+msgid "_Open Link"
+msgstr "_Öppna länk"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:180
+msgid "Personal Information"
+msgstr "Personlig information"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:183
+msgid "Edit Contact Information"
+msgstr "Redigera kontaktinformation"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:186
+msgid "Contact Information"
+msgstr "Kontaktinformation"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:281
+msgid "I would like to add you to my contact list."
+msgstr "Jag vill lägga till dig i min kontaktlista."
+
+#: ../libempathy-gtk/empathy-contact-dialogs.c:305
+msgid "New Contact"
+msgstr "Ny kontakt"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:1
+msgid "Decide _Later"
+msgstr "Bestäm _senare"
+
+#: ../libempathy-gtk/empathy-contact-dialogs.glade.h:2
+msgid "Subscription Request"
+msgstr "Prenumerationsförfrågan"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:198
+#: ../src/empathy-chat-window.glade.h:10
+msgid "_Contact"
+msgstr "_Kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:202
+msgid "_Group"
+msgstr "_Grupp"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+#: ../src/empathy-main-window.glade.h:9
+msgid "_Chat"
+msgstr "_Chatt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:206
+msgid "Chat with contact"
+msgstr "Chatta med kontakten"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "Infor_mation"
+msgstr "Infor_mation"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:210
+msgid "View contact information"
+msgstr "Visa kontaktinformation"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Re_name"
+msgstr "Byt _namn"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:214
+msgid "Rename"
+msgstr "Byt namn"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+#: ../src/empathy-chat-window.glade.h:14
+#: ../src/empathy-main-window.glade.h:11
+msgid "_Edit"
+msgstr "R_edigera"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:218
+msgid "Edit the groups and name for this contact"
+msgstr "Redigera grupper och namn för kontakten"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "_Remove"
+msgstr "_Ta bort"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:222
+msgid "Remove contact"
+msgstr "Ta bort kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "_Invite to Chat Room"
+msgstr "_Bjud in till chattrum"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:226
+msgid "Invite to a currently open chat room"
+msgstr "Bjud in till ett för tillfället öppet chattrum"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "_Send File..."
+msgstr "_Skicka fil..."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:230
+msgid "Send a file"
+msgstr "Skicka en fil"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+#: ../src/empathy-main-window.glade.h:17
+msgid "_View Previous Conversations"
+msgstr "_Visa tidigare samtal"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:234
+msgid "View previous conversations with this contact"
+msgstr "Visa tidigare samtal med denna kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "_Call"
+msgstr "_Ring"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:239
+msgid "Start a voice or video conversation with this contact"
+msgstr "Starta röst- eller videosamtal med denna kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1472
+#, c-format
+msgid "Do you really want to remove the contact '%s' ?"
+msgstr "Vill du verkligen ta bort kontakten \"%s\"?"
+
+#. TRUE if user wants to remove the contact. FALSE otherwise.
+#: ../libempathy-gtk/empathy-contact-list-view.c:1476
+msgid "Removing contact"
+msgstr "Tar bort kontakt"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1479
+msgid "Sorry, I don't want you in my contact list anymore."
+msgstr "Tyvärr, jag vill inte längre ha dig i min kontaktlista."
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1500
+#, c-format
+msgid "Do you really want to remove the group '%s' ?"
+msgstr "Vill du verkligen ta bort gruppen \"%s\"?"
+
+#: ../libempathy-gtk/empathy-contact-list-view.c:1502
+msgid "Removing group"
+msgstr "Tar bort grupp"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:694
+msgid "Select"
+msgstr "Markera"
+
+#: ../libempathy-gtk/empathy-contact-widget.c:704
+#: ../src/empathy-main-window.c:612
+msgid "Group"
+msgstr "Grupp"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:1
+msgid "<b>Client Information</b>"
+msgstr "<b>Klientinformation</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:2
+msgid "<b>Contact Details</b>"
+msgstr "<b>Kontaktdetaljer</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:3
+msgid "<b>Contact</b>"
+msgstr "<b>Kontakt</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:4
+msgid "<b>Groups</b>"
+msgstr "<b>Grupper</b>"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:5
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:1
+#: ../src/empathy-chatrooms-window.glade.h:1
+#: ../src/empathy-new-chatroom-dialog.glade.h:1
+msgid "Account:"
+msgstr "Konto:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:6
+msgid "Alias:"
+msgstr "Alias:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:7
+msgid "Birthday:"
+msgstr "Födelsedag:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:8
+msgid "Client:"
+msgstr "Klient:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:9
+msgid "Contact information"
+msgstr "Kontaktinformation"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:10
+msgid "Email:"
+msgstr "E-post:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:11
+msgid "Fullname:"
+msgstr "Fullständigt namn:"
+
+#. Identifier to connect to Instant Messaging network
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:13
+msgid "Identifier:"
+msgstr "Identifierare:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:14
+msgid "Information requested..."
+msgstr "Information begärd..."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:15
+msgid "OS:"
+msgstr "OS:"
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:16
+msgid "Select the groups you want this contact to appear in, you can select more than one group or no groups."
+msgstr "Välj grupperna som du vill att denna kontakt ska finnas i, du kan välja fler än en grupp eller inga grupper alls."
+
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:17
+msgid "Version:"
+msgstr "Version:"
+
+# "Web site" är "webbplats". "Web page" är "webbsida".
+#: ../libempathy-gtk/empathy-contact-widget.glade.h:18
+msgid "Web site:"
+msgstr "Webbplats:"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:287
+msgid "new server"
+msgstr "ny server"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:516
+msgid "Server"
+msgstr "Server"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:531
+msgid "Port"
+msgstr "Port"
+
+#: ../libempathy-gtk/empathy-irc-network-dialog.c:544
+msgid "SSL"
+msgstr "SSL"
+
+#: ../libempathy-gtk/empathy-log-window.c:497
+msgid "Account"
+msgstr "Konto"
+
+#: ../libempathy-gtk/empathy-log-window.c:504
+#: ../src/empathy-chat-window.c:280
+msgid "Conversation"
+msgstr "Samtal"
+
+#: ../libempathy-gtk/empathy-log-window.c:514
+msgid "Date"
+msgstr "Datum"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:2
+msgid "Conversations"
+msgstr "Samtal"
+
+#: ../libempathy-gtk/empathy-log-window.glade.h:3
+msgid "Previous Conversations"
+msgstr "Tidigare samtal"
+
+#. Tab Label
+#: ../libempathy-gtk/empathy-log-window.glade.h:5
+msgid "Search"
+msgstr "Sök"
+
+#. Searching *for* something
+#: ../libempathy-gtk/empathy-log-window.glade.h:7
+msgid "_For:"
+msgstr "_För:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:2
+msgid "Call"
+msgstr "Ring"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:3
+#: ../src/empathy-chat-window.glade.h:2
+msgid "Chat"
+msgstr "Chatta"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:4
+msgid "Contact ID:"
+msgstr "Kontakt-id:"
+
+#: ../libempathy-gtk/empathy-new-message-dialog.glade.h:5
+msgid "New Conversation"
+msgstr "Nytt samtal"
+
+#. Custom messages
+#: ../libempathy-gtk/empathy-presence-chooser.c:691
+msgid "Custom messages..."
+msgstr "Anpassade meddelanden..."
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:1
+msgid "Custom message"
+msgstr "Anpassat meddelande"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:2
+msgid "Message:"
+msgstr "Meddelande:"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:3
+msgid "Save message"
+msgstr "Spara meddelande"
+
+#: ../libempathy-gtk/empathy-presence-chooser.glade.h:4
+msgid "Status:"
+msgstr "Status:"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:88
+msgid "Word"
+msgstr "Ord"
+
+#: ../libempathy-gtk/empathy-spell-dialog.c:265
+msgid "Suggestions for the word"
+msgstr "Förslag för ordet"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:1
+msgid "Spell Checker"
+msgstr "Stavningskontroll"
+
+#: ../libempathy-gtk/empathy-spell-dialog.glade.h:2
+msgid "Suggestions for the word:"
+msgstr "Förslag för ordet:"
+
+#: ../libempathy-gtk/empathy-theme-boxes.c:747
+#: ../libempathy-gtk/empathy-theme-irc.c:297
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:74
+msgid "Classic"
+msgstr "Klassiskt"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:75
+msgid "Simple"
+msgstr "Enkelt"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:76
+msgid "Clean"
+msgstr "Rent"
+
+#: ../libempathy-gtk/empathy-theme-manager.c:77
+msgid "Blue"
+msgstr "Blått"
+
+#: ../libempathy-gtk/empathy-ui-utils.c:1327
+msgid "Unable to open uri"
+msgstr "Kundet inte öppna uri"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:158
+msgid "Current Locale"
+msgstr "Aktuell lokal"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:161
+#: ../libempathy-gtk/totem-subtitle-encoding.c:163
+#: ../libempathy-gtk/totem-subtitle-encoding.c:165
+#: ../libempathy-gtk/totem-subtitle-encoding.c:167
+msgid "Arabic"
+msgstr "Arabisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:170
+msgid "Armenian"
+msgstr "Armenisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:173
+#: ../libempathy-gtk/totem-subtitle-encoding.c:175
+#: ../libempathy-gtk/totem-subtitle-encoding.c:177
+msgid "Baltic"
+msgstr "Baltisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:180
+msgid "Celtic"
+msgstr "Kymrisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:183
+#: ../libempathy-gtk/totem-subtitle-encoding.c:185
+#: ../libempathy-gtk/totem-subtitle-encoding.c:187
+#: ../libempathy-gtk/totem-subtitle-encoding.c:189
+msgid "Central European"
+msgstr "Centraleuropeisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:192
+#: ../libempathy-gtk/totem-subtitle-encoding.c:194
+#: ../libempathy-gtk/totem-subtitle-encoding.c:196
+#: ../libempathy-gtk/totem-subtitle-encoding.c:198
+msgid "Chinese Simplified"
+msgstr "Kinesisk (förenklad)"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:201
+#: ../libempathy-gtk/totem-subtitle-encoding.c:203
+#: ../libempathy-gtk/totem-subtitle-encoding.c:205
+msgid "Chinese Traditional"
+msgstr "Kinesisk (traditionell)"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:208
+msgid "Croatian"
+msgstr "Kroatisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:211
+#: ../libempathy-gtk/totem-subtitle-encoding.c:213
+#: ../libempathy-gtk/totem-subtitle-encoding.c:215
+#: ../libempathy-gtk/totem-subtitle-encoding.c:217
+#: ../libempathy-gtk/totem-subtitle-encoding.c:219
+#: ../libempathy-gtk/totem-subtitle-encoding.c:221
+msgid "Cyrillic"
+msgstr "Kyrillisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:224
+msgid "Cyrillic/Russian"
+msgstr "Kyrillisk/Rysk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:227
+#: ../libempathy-gtk/totem-subtitle-encoding.c:229
+msgid "Cyrillic/Ukrainian"
+msgstr "Kyrillisk/Ukrainsk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:232
+msgid "Georgian"
+msgstr "Georgisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:235
+#: ../libempathy-gtk/totem-subtitle-encoding.c:237
+#: ../libempathy-gtk/totem-subtitle-encoding.c:239
+msgid "Greek"
+msgstr "Grekisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:242
+msgid "Gujarati"
+msgstr "Gujarati"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:245
+msgid "Gurmukhi"
+msgstr "Gurmukhi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:248
+#: ../libempathy-gtk/totem-subtitle-encoding.c:250
+#: ../libempathy-gtk/totem-subtitle-encoding.c:252
+#: ../libempathy-gtk/totem-subtitle-encoding.c:254
+msgid "Hebrew"
+msgstr "Hebreisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:257
+msgid "Hebrew Visual"
+msgstr "Hebreisk (visuell)"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:260
+msgid "Hindi"
+msgstr "Hindi"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:263
+msgid "Icelandic"
+msgstr "Isländsk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:266
+#: ../libempathy-gtk/totem-subtitle-encoding.c:268
+#: ../libempathy-gtk/totem-subtitle-encoding.c:270
+msgid "Japanese"
+msgstr "Japansk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:273
+#: ../libempathy-gtk/totem-subtitle-encoding.c:275
+#: ../libempathy-gtk/totem-subtitle-encoding.c:277
+#: ../libempathy-gtk/totem-subtitle-encoding.c:279
+msgid "Korean"
+msgstr "Koreansk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:282
+msgid "Nordic"
+msgstr "Nordisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:285
+msgid "Persian"
+msgstr "Persisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:288
+#: ../libempathy-gtk/totem-subtitle-encoding.c:290
+msgid "Romanian"
+msgstr "Rumänsk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:293
+msgid "South European"
+msgstr "Sydeuropeisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:296
+msgid "Thai"
+msgstr "Thailändsk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:299
+#: ../libempathy-gtk/totem-subtitle-encoding.c:301
+#: ../libempathy-gtk/totem-subtitle-encoding.c:303
+#: ../libempathy-gtk/totem-subtitle-encoding.c:305
+msgid "Turkish"
+msgstr "Turkisk"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:308
+#: ../libempathy-gtk/totem-subtitle-encoding.c:310
+#: ../libempathy-gtk/totem-subtitle-encoding.c:312
+#: ../libempathy-gtk/totem-subtitle-encoding.c:314
+#: ../libempathy-gtk/totem-subtitle-encoding.c:316
+msgid "Unicode"
+msgstr "Unicode"
+
+# "Web site" är "webbplats". "Web page" är "webbsida".
+#: ../libempathy-gtk/totem-subtitle-encoding.c:319
+#: ../libempathy-gtk/totem-subtitle-encoding.c:321
+#: ../libempathy-gtk/totem-subtitle-encoding.c:323
+#: ../libempathy-gtk/totem-subtitle-encoding.c:325
+#: ../libempathy-gtk/totem-subtitle-encoding.c:327
+msgid "Western"
+msgstr "Västlig"
+
+#: ../libempathy-gtk/totem-subtitle-encoding.c:330
+#: ../libempathy-gtk/totem-subtitle-encoding.c:332
+#: ../libempathy-gtk/totem-subtitle-encoding.c:334
+msgid "Vietnamese"
+msgstr "Vietnamesisk"
+
+#.
+#. * vim: sw=2 ts=8 cindent noai bs=2
+#.
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:1
+msgid "The contact to display in the applet. Empty means no contact is displayed."
+msgstr "Kontakten att visa i panelprogrammet. Tom betyder att ingen kontakt visas."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.schemas.in.h:2
+msgid "The contact's avatar token. Empty means contact has no avatar."
+msgstr "Kontaktens avatarsymbol. Tom betyder att kontakten saknar avatar."
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:1
+msgid "Megaphone"
+msgstr "Megaphone"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.server.in.in.h:2
+#: ../megaphone/src/megaphone-applet.c:419
+msgid "Talk!"
+msgstr "Prata!"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:1
+#: ../nothere/data/GNOME_NotHere_Applet.xml.h:1
+msgid "_About"
+msgstr "_Om"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:2
+msgid "_Information"
+msgstr "_Information"
+
+#: ../megaphone/data/GNOME_Megaphone_Applet.xml.h:3
+#: ../src/empathy-main-window.glade.h:15
+msgid "_Preferences"
+msgstr "In_ställningar"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:1
+msgid "Presence"
+msgstr "Närvaro"
+
+#: ../nothere/data/GNOME_NotHere_Applet.server.in.in.h:2
+#: ../nothere/src/nothere-applet.c:106
+msgid "Set your own presence"
+msgstr "Ställ in din egna närvaro"
+
+#: ../src/empathy.c:73
+msgid "Invalid handle"
+msgstr "Ogiltig hanterare"
+
+#: ../src/empathy.c:76
+msgid "No matching connection"
+msgstr "Ingen matchande anslutning"
+
+#: ../src/empathy.c:79
+msgid "Invalid account"
+msgstr "Ogiltigt konto"
+
+#: ../src/empathy.c:82
+msgid "Presence failure"
+msgstr "Närvarofel"
+
+#: ../src/empathy.c:85
+msgid "No accounts"
+msgstr "Inga konton"
+
+#: ../src/empathy.c:88
+#: ../src/empathy-main-window.c:905
+msgid "Network error"
+msgstr "Nätverksfel"
+
+#: ../src/empathy.c:91
+msgid "Contact does not support voice"
+msgstr "Kontakten saknar stöd för röstsamtal"
+
+#: ../src/empathy.c:94
+msgid "Lowmem"
+msgstr "Lågminne"
+
+#: ../src/empathy.c:97
+msgid "Channel request generic error"
+msgstr "Allmänt fel vid kanalbegäran"
+
+#: ../src/empathy.c:100
+msgid "Channel banned"
+msgstr "Bannlyst från kanalen"
+
+#: ../src/empathy.c:103
+msgid "Channel full"
+msgstr "Kanalen är full"
+
+#: ../src/empathy.c:106
+msgid "Channel invite only"
+msgstr "Kanalen är endast för inbjudna"
+
+#: ../src/empathy.c:109
+msgid "Unknown error code"
+msgstr "Okänd felkod"
+
+#: ../src/empathy.c:318
+msgid "Don't connect on startup"
+msgstr "Anslut inte vid uppstart"
+
+#: ../src/empathy.c:330
+msgid "- Empathy Instant Messenger"
+msgstr "- Empathy snabbmeddelandeklient"
+
+#: ../src/empathy-about-dialog.c:64
+msgid "Empathy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version."
+msgstr "Empathy är fri programvara. Du kan distribuera det och/eller modifiera det under villkoren i GNU General Public License, publicerad av Free Software Foundation, antingen version 2 eller (om du så vill) någon senare version."
+
+#: ../src/empathy-about-dialog.c:68
+msgid "Empathy is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details."
+msgstr "Empathy distribueras i hopp om att det ska vara användbart, men UTAN NÅGON SOM HELST GARANTI, även utan underförstådd garanti om SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT ÄNDAMÅL. Se GNU General Public License för ytterligare information."
+
+#: ../src/empathy-about-dialog.c:72
+msgid "You should have received a copy of the GNU General Public License along with Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr "Du bör ha fått en kopia av GNU General Public License tillsammans med Empathy. Om inte, skriv till Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA"
+
+#: ../src/empathy-about-dialog.c:100
+msgid "An Instant Messaging client for GNOME"
+msgstr "En snabbmeddelandeklient för GNOME"
+
+#: ../src/empathy-about-dialog.c:106
+msgid "translator-credits"
+msgstr ""
+"Daniel Nylander\n"
+"Christian Rose\n"
+"Richard Hult\n"
+"\n"
+"Skicka synpunkter på översättningen till\n"
+"tp-sv@listor.tp-sv.se"
+
+#: ../src/empathy-call-window.c:329
+msgid "Empathy Call"
+msgstr "Empathy-samtal"
+
+#: ../src/empathy-call-window.c:330
+msgid "Readying"
+msgstr "Förbereder"
+
+#: ../src/empathy-call-window.c:341
+#, c-format
+msgid "%s - Empathy Call"
+msgstr "%s - Empathy-samtal"
+
+#: ../src/empathy-call-window.c:345
+msgid "Ringing"
+msgstr "Ringer"
+
+#: ../src/empathy-call-window.c:357
+msgid "Connecting"
+msgstr "Ansluter"
+
+#: ../src/empathy-call-window.c:386
+msgid "Closed"
+msgstr "Stängd"
+
+#. Output video label
+#: ../src/empathy-call-window.c:446
+msgid "No video output"
+msgstr "Inget videoutdata"
+
+#: ../src/empathy-call-window.glade.h:1
+msgid "<b>Volume</b>"
+msgstr "<b>Volym</b>"
+
+#: ../src/empathy-call-window.glade.h:2
+msgid "End Call"
+msgstr "Avsluta samtal"
+
+#: ../src/empathy-call-window.glade.h:3
+msgid "Send Video"
+msgstr "Skicka video"
+
+#: ../src/empathy-call-window.glade.h:4
+msgid "Start Call"
+msgstr "Påbörja samtal"
+
+#: ../src/empathy-chat-window.c:320
+#, c-format
+msgid "Conversations (%d)"
+msgstr "Samtal (%d)"
+
+#: ../src/empathy-chat-window.c:387
+msgid "Topic:"
+msgstr "Ämne:"
+
+#: ../src/empathy-chat-window.c:390
+msgid "Typing a message."
+msgstr "Skriver ett meddelande."
+
+#: ../src/empathy-chat-window.glade.h:1
+msgid "C_lear"
+msgstr "T_öm"
+
+#: ../src/empathy-chat-window.glade.h:3
+msgid "Insert _Smiley"
+msgstr "Infoga _smilis"
+
+#: ../src/empathy-chat-window.glade.h:4
+msgid "Invitation _message:"
+msgstr "Inbjudnings_meddelande:"
+
+#: ../src/empathy-chat-window.glade.h:5
+msgid "Invite"
+msgstr "Bjud in"
+
+#: ../src/empathy-chat-window.glade.h:6
+msgid "Move Tab _Left"
+msgstr "Flytta flik till _vänster"
+
+#: ../src/empathy-chat-window.glade.h:7
+msgid "Move Tab _Right"
+msgstr "Flytta flik till _höger"
+
+#: ../src/empathy-chat-window.glade.h:8
+msgid "Select who would you like to invite:"
+msgstr "Välj vem du vill bjuda in:"
+
+#: ../src/empathy-chat-window.glade.h:9
+msgid "You have been invited to join a chat conference."
+msgstr "Du har blivit inbjuden till en chattkonferens."
+
+#: ../src/empathy-chat-window.glade.h:11
+#: ../src/empathy-main-window.glade.h:10
+msgid "_Contents"
+msgstr "I_nnehåll"
+
+#: ../src/empathy-chat-window.glade.h:12
+msgid "_Conversation"
+msgstr "_Samtal"
+
+#: ../src/empathy-chat-window.glade.h:13
+msgid "_Detach Tab"
+msgstr "_Koppla loss flik"
+
+#: ../src/empathy-chat-window.glade.h:15
+#: ../src/empathy-main-window.glade.h:12
+msgid "_Help"
+msgstr "_Hjälp"
+
+#: ../src/empathy-chat-window.glade.h:16
+msgid "_Next Tab"
+msgstr "_Nästa flik"
+
+#: ../src/empathy-chat-window.glade.h:17
+msgid "_Previous Tab"
+msgstr "_Föregående flik"
+
+#: ../src/empathy-chat-window.glade.h:18
+msgid "_Tabs"
+msgstr "_Flikar"
+
+#: ../src/empathy-chat-window.glade.h:19
+msgid "gtk-close"
+msgstr "Stäng"
+
+#: ../src/empathy-chat-window.glade.h:20
+msgid "gtk-copy"
+msgstr "Kopiera"
+
+#: ../src/empathy-chat-window.glade.h:21
+msgid "gtk-cut"
+msgstr "Klipp ut"
+
+#: ../src/empathy-chat-window.glade.h:22
+msgid "gtk-paste"
+msgstr "Klistra in"
+
+#: ../src/empathy-chatrooms-window.c:262
+msgid "Name"
+msgstr "Namn"
+
+#: ../src/empathy-chatrooms-window.c:280
+msgid "Room"
+msgstr "Rum"
+
+#: ../src/empathy-chatrooms-window.c:289
+msgid "Auto Connect"
+msgstr "Anslut automatiskt"
+
+#: ../src/empathy-chatrooms-window.glade.h:2
+msgid "Edit Favorite Room"
+msgstr "Redigera favoritrum"
+
+#: ../src/empathy-chatrooms-window.glade.h:3
+msgid "Join room on start_up"
+msgstr "Gå in i rummet vid uppstart"
+
+#: ../src/empathy-chatrooms-window.glade.h:4
+msgid "Join this chat room when Empathy starts and you are connected"
+msgstr "Gå in i detta chattrum när Empathy startar och du är ansluten"
+
+#: ../src/empathy-chatrooms-window.glade.h:5
+msgid "Manage Favorite Rooms"
+msgstr "Hantera favoritrum"
+
+#: ../src/empathy-chatrooms-window.glade.h:6
+msgid "N_ame:"
+msgstr "N_amn:"
+
+#: ../src/empathy-chatrooms-window.glade.h:7
+msgid "S_erver:"
+msgstr "S_erver:"
+
+#: ../src/empathy-chatrooms-window.glade.h:9
+#: ../src/empathy-new-chatroom-dialog.glade.h:9
+msgid "_Room:"
+msgstr "_Rum:"
+
+#: ../src/empathy-filter.c:229
+#, c-format
+msgid ""
+"New message from %s:\n"
+"%s"
+msgstr ""
+"Nytt meddelande från %s:\n"
+"%s"
+
+#: ../src/empathy-filter.c:288
+#, c-format
+msgid "Incoming call from %s"
+msgstr "Inkommande samtal från %s"
+
+#: ../src/empathy-filter.c:346
+#, c-format
+msgid "Subscription requested by %s"
+msgstr "Prenumeration begärd av %s"
+
+#: ../src/empathy-filter.c:349
+#, c-format
+msgid ""
+"\n"
+"Message: %s"
+msgstr ""
+"\n"
+"Meddelande: %s"
+
+#. Tell the user that the tube can't be handled
+#: ../src/empathy-filter.c:458
+#, c-format
+msgid "%s offered you an invitation, but you don't have the needed external application to handle it."
+msgstr "%s erbjöd dig en inbjudan men du har inte det nödvändiga externa programmet att hantera den med."
+
+#: ../src/empathy-filter.c:467
+msgid "Invitation Error"
+msgstr "Inbjudningsfel"
+
+#: ../src/empathy-filter.c:577
+#, c-format
+msgid "%s is offering you an invitation. An external application will be started to handle it."
+msgstr "%s erbjuder dig en inbjudan. Ett externt program kommer att startas för att hantera den."
+
+#: ../src/empathy-filter.c:582
+#, c-format
+msgid "%s is offering you an invitation, but you don't have the needed external application to handle it."
+msgstr "%s erbjuder dig en inbjudan men du har inte det nödvändiga externa programmet för att hantera den."
+
+#: ../src/empathy-main-window.c:271
+msgid "Show and edit accounts"
+msgstr "Visa och redigera konton"
+
+#: ../src/empathy-main-window.c:633
+msgid "Contact"
+msgstr "Kontakt"
+
+#: ../src/empathy-main-window.c:822
+msgid "_Edit account"
+msgstr "_Redigera konto"
+
+#: ../src/empathy-main-window.c:908
+msgid "Authentication failed"
+msgstr "Autentisering misslyckades"
+
+#: ../src/empathy-main-window.c:911
+msgid "Encryption error"
+msgstr "Krypteringsfel"
+
+#: ../src/empathy-main-window.c:914
+msgid "Name in use"
+msgstr "Namnet används"
+
+#: ../src/empathy-main-window.c:917
+msgid "Certificate not provided"
+msgstr "Certifikat inte tillhandahållet"
+
+#: ../src/empathy-main-window.c:920
+msgid "Certificate untrusted"
+msgstr "Certifikatet är inte betrott"
+
+#: ../src/empathy-main-window.c:923
+msgid "Certificate expired"
+msgstr "Certifikatet har gått ut"
+
+#: ../src/empathy-main-window.c:926
+msgid "Certificate not activated"
+msgstr "Certifikatet är inte aktiverat"
+
+#: ../src/empathy-main-window.c:929
+msgid "Certificate hostname mismatch"
+msgstr "Värdnamnet i certifikatet stämmer inte"
+
+#: ../src/empathy-main-window.c:932
+msgid "Certificate fingerprint mismatch"
+msgstr "Certifikatets fingeravtryck stämmer inte"
+
+#: ../src/empathy-main-window.c:935
+msgid "Certificate self signed"
+msgstr "Certifikatet är självsignerat"
+
+#: ../src/empathy-main-window.c:938
+msgid "Certificate error"
+msgstr "Certifikatfel"
+
+#: ../src/empathy-main-window.c:941
+msgid "Unknown error"
+msgstr "Okänt fel"
+
+#: ../src/empathy-main-window.glade.h:1
+msgid "Contact List"
+msgstr "Kontaktlista"
+
+# Hm?
+#: ../src/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Sammanhang"
+
+#: ../src/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr "Gå in i _favoriter"
+
+#: ../src/empathy-main-window.glade.h:4
+msgid "Join _New..."
+msgstr "Gå in i _nytt..."
+
+#: ../src/empathy-main-window.glade.h:5
+msgid "Manage Favorites"
+msgstr "Hantera favoriter"
+
+#: ../src/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Visa _frånkopplade kontakter"
+
+#: ../src/empathy-main-window.glade.h:7
+msgid "_Accounts"
+msgstr "_Konton"
+
+#: ../src/empathy-main-window.glade.h:8
+msgid "_Add Contact..."
+msgstr "_Lägg till kontakt..."
+
+#: ../src/empathy-main-window.glade.h:13
+#: ../src/empathy-status-icon.glade.h:2
+msgid "_New Conversation..."
+msgstr "_Nytt samtal..."
+
+#: ../src/empathy-main-window.glade.h:14
+msgid "_Personal Information"
+msgstr "_Personlig information"
+
+#: ../src/empathy-main-window.glade.h:16
+msgid "_Room"
+msgstr "_Rum"
+
+#: ../src/empathy-main-window.glade.h:18
+msgid "gtk-about"
+msgstr "Om"
+
+#: ../src/empathy-main-window.glade.h:19
+msgid "gtk-quit"
+msgstr "Avsluta"
+
+#: ../src/empathy-new-chatroom-dialog.c:290
+msgid "Chat Rooms"
+msgstr "Chattrum"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:2
+msgid "Browse:"
+msgstr "Bläddra:"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:3
+msgid "Enter the room name to join here or click on one or more rooms in the list."
+msgstr "Ange rumsnamnet för att gå in i eller klicka på ett eller flera rum i listan."
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:4
+msgid "Enter the server which hosts the room, or leave it empty if the room is on the current account's server"
+msgstr "Ange servern som tillhandahåller rummet, eller lämna den tom om rummet finns på servern för det aktuella kontot"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:5
+msgid "Join"
+msgstr "Gå in"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:6
+msgid "Join New"
+msgstr "Gå in i nytt"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:7
+msgid "Re_fresh"
+msgstr "Uppda_tera"
+
+#: ../src/empathy-new-chatroom-dialog.glade.h:8
+msgid "This list represents all chat rooms hosted on the server you have entered."
+msgstr "Den här listan representerar alla chattrum som finns på servern som du har gått in på."
+
+#: ../src/empathy-preferences.c:264
+msgid "Language"
+msgstr "Språk"
+
+#: ../src/empathy-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Utseende</b>"
+
+#: ../src/empathy-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Ljud</b>"
+
+#: ../src/empathy-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Beteende</b>"
+
+#: ../src/empathy-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr "<b>Kontaktlista</b>"
+
+#: ../src/empathy-preferences.glade.h:5
+msgid "<b>Enable spell checking for languages:</b>"
+msgstr "<b>Aktivera rättstavning för språk:</b>"
+
+#: ../src/empathy-preferences.glade.h:6
+msgid "<b>Visual</b>"
+msgstr "<b>Visuellt</b>"
+
+#: ../src/empathy-preferences.glade.h:7
+msgid "<small>The list of languages reflects only the languages for which you have a dictionary installed.</small>"
+msgstr "<small>Listan visar endast språk du har en ordlista installerad för.</small>"
+
+#: ../src/empathy-preferences.glade.h:8
+msgid "Automatically _connect on startup "
+msgstr "Anslut _automatiskt vid uppstart"
+
+#: ../src/empathy-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "Avatarer är användarvalda bilder som visas i kontaktlistan"
+
+#: ../src/empathy-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "Chatt_ema:"
+
+#: ../src/empathy-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Visa notifiering när kontakter _ansluts"
+
+#: ../src/empathy-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Aktivera ljud under _frånvaro"
+
+#: ../src/empathy-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Aktivera ljud under _upptagetläge"
+
+#: ../src/empathy-preferences.glade.h:14
+msgid "General"
+msgstr "Allmänt"
+
+#: ../src/empathy-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Notifieringar"
+
+#: ../src/empathy-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Inställningar"
+
+#: ../src/empathy-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "Visa _avatarer"
+
+#: ../src/empathy-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Visa _smilisar som bilder"
+
+#: ../src/empathy-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr "Visa ko_mpakt kontaktlista"
+
+#: ../src/empathy-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr "Sortera efter _namn"
+
+#: ../src/empathy-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr "Sortera efter _tillstånd"
+
+#: ../src/empathy-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Stavningskontroll"
+
+#: ../src/empathy-preferences.glade.h:23
+msgid "Themes"
+msgstr "Teman"
+
+#: ../src/empathy-preferences.glade.h:24
+msgid "_Open new chats in separate windows"
+msgstr "_Öppna nya chattar i separata fönster"
+
+#: ../src/empathy-preferences.glade.h:25
+msgid "_Play sound when messages arrive"
+msgstr "_Spela ljud när meddelanden kommer"
+
+#: ../src/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Status"
+
+#: ../src/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "_Avsluta"
+
+#: ../src/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "_Visa kontaktlista"
+
+#~ msgid "ICQ account settings"
+#~ msgstr "Inställningar för ICQ-konto"
+#~ msgid "irc account settings"
+#~ msgstr "inställningar för irc-konto"
+#~ msgid "jabber account settings"
+#~ msgstr "inställningar för jabberkonto"
+#~ msgid "msn account settings"
+#~ msgstr "inställningar för msn-konto"
+#~ msgid "salut account settings"
+#~ msgstr "inställningar för salut-konto"
+#~ msgid "Yahoo! account settings"
+#~ msgstr "Inställningar för Yahoo!-konto"
+#~ msgid "Input"
+#~ msgstr "Ingång"
+#~ msgid "Mute"
+#~ msgstr "Tyst"
+
+# Det måste finnas ett bättre ord
+#~ msgid "Output"
+#~ msgstr "Utgång"
+#~ msgid "Volume"
+#~ msgstr "Volym"
+#~ msgid "Ca_ll"
+#~ msgstr "R_ing"
+#~ msgid "Change _Topic..."
+#~ msgstr "Ändra _ämne..."
+#~ msgid "Contact Infor_mation"
+#~ msgstr "Kontaktinfor_mation"
+#~ msgid "Cu_t"
+#~ msgstr "Klipp _ut"
+#~ msgid "In_vite..."
+#~ msgstr "_Bjud in..."
+#~ msgid "_Add To Favorites"
+#~ msgstr "_Lägg till i favoriter"
+#~ msgid "_Copy"
+#~ msgstr "_Kopiera"
+#~ msgid "_Paste"
+#~ msgstr "Klistra _in"
+#~ msgid "_Show Contacts"
+#~ msgstr "_Visa kontakter"
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Ange det nya ämnet som du vill ställa in för det här rummet:"
+#~ msgid "<b>Options</b>"
+#~ msgstr "<b>Alternativ</b>"
+#~ msgid "_Use for chat rooms"
+#~ msgstr "Använd för _chattrum"
+#~ msgid "%s went offline"
+#~ msgstr "%s kopplade från"
+#~ msgid "%s has come online"
+#~ msgstr "%s anslöt sig"
+#~ msgid "Disable"
+#~ msgstr "Inaktivera"
+#~ msgid "Call from %s"
+#~ msgstr "Samtal från %s"
+#~ msgid "Edit Account _Details"
+#~ msgstr "Redigera konto_detaljer"
+#~ msgid "_New Message..."
+#~ msgstr "_Nytt meddelande..."
+#~ msgid "New message"
+#~ msgstr "Nytt meddelande"
+#~ msgid "A unique name for this account to identify it personally to you."
+#~ msgstr ""
+#~ "Ett unikt namn på kontot för att personligen identifiera det till dig."
+#~ msgid "Chat Room"
+#~ msgstr "Chattrum"
+#~ msgid "Contact List - Empathy"
+#~ msgstr "Kontaktlista - Empathy"
+#~ msgid "<b>Languages</b>"
+#~ msgstr "<b>Språk</b>"
+#~ msgid "_Enable spell checking"
+#~ msgstr "_Aktivera stavningskontroll"
+#~ msgid "Clear List..."
+#~ msgstr "Töm listan..."
+#~ msgid "Are you sure you want to clear the list?"
+#~ msgstr "Är du säker på att du vill tömma listan?"
+#~ msgid ""
+#~ "This will remove any custom messages you have added to the list of preset "
+#~ "status messages."
+#~ msgstr ""
+#~ "Detta kommer att ta bort de meddelanden du har lagt till i listan med "
+#~ "förinställda statusmeddelanden"
+#~ msgid "Clear List"
+#~ msgstr "Töm listan"
+#~ msgid "Enter status message:"
+#~ msgstr "Ange statusmeddelande:"
+#~ msgid "Status Message Presets"
+#~ msgstr "Förinställda statusmeddelanden"
+#~ msgid "_Add to status message list"
+#~ msgstr "_Lägg till i statusmeddelandelistan"
+#~ msgid ""
+#~ "Subscription requested for %s\n"
+#~ "Message: %s"
+#~ msgstr ""
+#~ "Prenumerationsförfrågan för %s\n"
+#~ "Meddelande: %s"
+#~ msgid "Instant Messenger"
+#~ msgstr "Snabbmeddelandeklient"
+#~ msgid "Sorry, I don't want you in my contact list."
+#~ msgstr "Tyvärr, jag vill inte ha dig i min kontaktlista."
+#~ msgid "<b>Account</b>"
+#~ msgstr "<b>Konto</b>"
+#~ msgid "Imendio "
+#~ msgstr "Imendio "
+#~ msgid "Jabber"
+#~ msgstr "Jabber"
+#~ msgid "Create"
+#~ msgstr "Skapa"
+#~ msgid ""
+#~ "<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+#~ "small>"
+#~ msgstr ""
+#~ "<small><b><span foreground=\"#555\">Exempel: användare@jabber.org</span></"
+#~ "b></small>"
+#~ msgid "Gnome Instant Messaging Client"
+#~ msgstr "Snabbmeddelandeklient för Gnome"
+#~ msgid "-"
+#~ msgstr "-"
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Personliga detaljer</b>"
+#~ msgid "<b>Status</b>"
+#~ msgstr "<b>Status</b>"
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>Prenumeration</b>"
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr ""
+#~ "<span size=\"smaller\">Exempel: Mikael eller användare@server.org</span>"
+#~ msgid ""
+#~ "<span size=\"smaller\">Note: You must select an account if the contact is "
+#~ "unknown</span>"
+#~ msgstr ""
+#~ "<span size=\"smaller\">Observera: Du måste välja ett konto om kontakten "
+#~ "är okänd</span>"
+#~ msgid "Accou_nt:"
+#~ msgstr "Ko_nto:"
+#~ msgid "Add Contact"
+#~ msgstr "Lägg till kontakt"
+#~ msgid "Avatar:"
+#~ msgstr "Avatar:"
+#~ msgid "C_hange"
+#~ msgstr "_Ändra"
+#~ msgid "Ch_at"
+#~ msgstr "Ch_atta"
+#~ msgid "Con_tact:"
+#~ msgstr "_Kontakt:"
+#~ msgid "Contact List - Gossip"
+#~ msgstr "Kontaktlista - Gossip"
+#~ msgid "Country:"
+#~ msgstr "Land:"
+#~ msgid "Edit Contact"
+#~ msgstr "Redigera kontakt"
+#~ msgid "Edit Groups"
+#~ msgstr "Redigera grupper"
+#~ msgid "ID:"
+#~ msgstr "Id:"
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr ""
+#~ "Om du väljer att bestämma dig senare kommer du att bli frågad nästa gång "
+#~ "du logga in."
+#~ msgid "Name:"
+#~ msgstr "Namn:"
+#~ msgid "Personal Details"
+#~ msgstr "Personliga detaljer"
+#~ msgid "R_egister"
+#~ msgstr "Re_gistrera"
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Ställ in det alias du vill använda för:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "Du kan hämta kontaktinformation från servern."
+#~ msgid ""
+#~ "This acts as a filter to the contact list below.\n"
+#~ "\n"
+#~ "You can use segments of contact's name or ID, for example, \"jabber.org\" "
+#~ "will list everyone using that server.\n"
+#~ "\n"
+#~ "You can also use the name of a group to show only contacts in a specific "
+#~ "group."
+#~ msgstr ""
+#~ "Detta fungerar som ett filter till kontaktlistan nedan.\n"
+#~ "\n"
+#~ "Du kan använda delar av kontaktens namn eller id, till exempel \"jabber."
+#~ "org\" kommer att lista alla som använder den servern.\n"
+#~ "\n"
+#~ "Du kan även använda namnet på en grupp för att endast visa kontakterna i "
+#~ "en specifik grupp."
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "Detta fungerar som ett filter till kontaktlistan nedan. Du kan använda "
+#~ "delar av kontaktens namn eller id, till exempel \"jabber.org\" kommer att "
+#~ "lista alla som använder den servern"
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr ""
+#~ "Detta är namnet som kommer att användas på din kontaktlista för denna "
+#~ "kontakt"
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr ""
+#~ "Detta namn kommer att användas för att identifiera dig i chattfönster"
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr ""
+#~ "Detta namn kommer att användas för att identifiera dig när nya kontakter "
+#~ "kontrollerar din information"
+#~ msgid "Use default name here from the contact's VCard."
+#~ msgstr "Använd standardnamnet här från kontaktens VCard."
+#~ msgid "Use system pro_xy"
+#~ msgstr "Använd systemets pro_xyinställningar"
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Vilket konto vill du använda?"
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "Du prenumererar inte på denna kontakt."
+#~ msgid "_Accept"
+#~ msgstr "_Acceptera"
+#~ msgid "_Birthday:"
+#~ msgstr "_Födelsedag:"
+#~ msgid "_Connect"
+#~ msgstr "An_slut"
+#~ msgid "_Deny"
+#~ msgstr "_Neka"
+#~ msgid "_Description:"
+#~ msgstr "_Beskrivning:"
+#~ msgid "_Disconnect"
+#~ msgstr "_Koppla ifrån"
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr "Ange _namnet eller kontakt-id för den person du vill chatta med:"
+#~ msgid "_Group:"
+#~ msgstr "_Grupp:"
+#~ msgid "_Password:"
+#~ msgstr "_Lösenord:"
+#~ msgid "_Retrieve"
+#~ msgstr "_Hämta"
+#~ msgid "_Search"
+#~ msgstr "_Sök"
+#~ msgid "_Subscribe"
+#~ msgstr "_Prenumerera"
+# "Web site" är "webbplats". "Web page" är "webbsida".
+#~ msgid "_Web site:"
+#~ msgstr "_Webbplats:"
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Snabbmeddelandeklienten Gossip"
+#~ msgid "Normal"
+#~ msgstr "Normalt"
+#~ msgid "Active"
+#~ msgstr "Aktivt"
+#~ msgid "Inactive"
+#~ msgstr "Inaktivt"
+#~ msgid "Error"
+#~ msgstr "Fel"
+#~ msgid "Moderator"
+#~ msgid_plural "Moderators"
+#~ msgstr[0] "Moderator"
+#~ msgstr[1] "Moderatorer"
+#~ msgid "Participant"
+#~ msgid_plural "Participants"
+#~ msgstr[0] "Deltagare"
+#~ msgstr[1] "Deltagare"
+#~ msgid "Visitor"
+#~ msgid_plural "Visitors"
+#~ msgstr[0] "Besökare"
+#~ msgstr[1] "Besökare"
+#~ msgid "No role"
+#~ msgstr "Ingen roll"
+#~ msgid "Owner"
+#~ msgid_plural "Owners"
+#~ msgstr[0] "Ägare"
+#~ msgstr[1] "Ägare"
+#~ msgid "Administrator"
+#~ msgid_plural "Administrators"
+#~ msgstr[0] "Administrator"
+#~ msgstr[1] "Administratörer"
+#~ msgid "Member"
+#~ msgid_plural "Members"
+#~ msgstr[0] "Medlem"
+#~ msgstr[1] "Medlemmar"
+#~ msgid "No affiliation"
+#~ msgstr "Ingen anknytning"
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "Smeknamnet du har valt är upptaget."
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr "Chattrummet du försökte gå in i kräver ett lösenord."
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr "Fjärrkonferensservern svarade inte inom en rimlig tid."
+#~ msgid "The conference server you tried to join could not be found."
+#~ msgstr "Konferensservern du försökte gå in på kunde inte hittas."
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr ""
+#~ "Ett okänt fel har inträffat, kontrollera att dina detaljer är korrekta."
+#~ msgid "Joining the chatroom was canceled."
+#~ msgstr "Gå in i chattrummet avbröts."
+#~ msgid "Unavailable"
+#~ msgstr "Otillgänglig"
+#~ msgid "An unknown error occurred."
+#~ msgstr "Ett okänt fel inträffade."
+#~ msgid "Connection refused."
+#~ msgstr "Anslutning vägrades."
+#~ msgid "Server address could not be resolved."
+#~ msgstr "Serverns address kunde inte slås upp."
+#~ msgid "Connection timed out."
+#~ msgstr "Anslutning timade ut."
+#~ msgid "Authentication failed."
+#~ msgstr "Autentisering misslyckades."
+#~ msgid "The username you are trying already exists."
+#~ msgstr "Användarnamnet du försöker använda existerar redan."
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "Användarnamnet du försöker använda är inte giltigt."
+#~ msgid "This feature is unavailable."
+#~ msgstr "Denna funktion är inte tillgänglig."
+#~ msgid "This feature is unauthorized."
+#~ msgstr "Denna funktion är inte auktoriserad."
+#~ msgid "A specific protocol error occurred that was unexpected."
+#~ msgstr "Ett oväntat specifikt protokollfel inträffade."
+#~ msgid "Couldn't send message!"
+#~ msgstr "Kunde inte sända meddelande!"
+#~ msgid "Connection could not be opened"
+#~ msgstr "Anslutning kunde inte öppnas"
+#~ msgid "Service has gone and is no longer available"
+#~ msgstr "Tjänsten ar försvunnit och finns inte längre tillgänglig"
+#~ msgid "Bad or malformed request to this service"
+#~ msgstr "Felaktig eller felformulerad begäran till den här tjänsten"
+#~ msgid "Unauthorized request to this service"
+#~ msgstr "Obehörig begäran till den här tjänsten"
+#~ msgid "Payment is required for this service"
+#~ msgstr "Betalning krävs för den här tjänsten"
+#~ msgid "This service is forbidden"
+#~ msgstr "Den här tjänsten är förbjuden"
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Den här tjänsten är inte tillgänglig eller hittades inte"
+#~ msgid "Unacceptable request sent to this services"
+#~ msgstr "Oaccepterbar begäran skickades till den här tjänsten"
+#~ msgid "Registration is required"
+#~ msgstr "Registrering krävs"
+#~ msgid "There was a conflict of interest trying to use this service"
+#~ msgstr ""
+#~ "Det inträffade en intressekonflikt vid försök att använda den här "
+#~ "tjänsten "
+#~ msgid "There was an internal service error"
+#~ msgstr "Det inträffade ett internt fel i tjänsten"
+#~ msgid "This feature is not implemented"
+#~ msgstr "Den här funktionen är inte implementerad"
+#~ msgid "The remote service timed out"
+#~ msgstr "Tidsgränsen för fjärrtjänsten överstegs"
+#~ msgid "Using the %s backend"
+#~ msgstr "Använder bakänden %s"
+#~ msgid "Stop"
+#~ msgstr "Stopp"
+#~ msgid "Disconnect"
+#~ msgstr "Koppla ifrån"
+#~ msgid "Connect"
+#~ msgstr "Anslut"
+#~ msgid "Bye bye"
+#~ msgstr "Hej då"
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Registrering av dina nya kontoinställningar lyckades."
+#~ msgid "You should now be able to connect to your new account."
+#~ msgstr "Du ska nu kunna ansluta med ditt nya konto."
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Misslyckades med att registrera dina nya kontoinställningar."
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Ditt kontolösenord ändrades."
+#~ msgid "You should now be able to connect with your new password."
+#~ msgstr "Du ska nu kunna ansluta med ditt nya lösenord."
+#~ msgid "Failed to change your account password."
+#~ msgstr "Misslyckades med att ändra ditt kontolösenord."
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ange ett nytt lösenord för det här kontot:\n"
+#~ "%s"
+#~ msgid "No information is available for this contact."
+#~ msgstr "Ingen information finns tillgänglig för denna kontakt."
+#~ msgid "Information requested, please wait..."
+#~ msgstr "Information begärd, var vänlig vänta..."
+#~ msgid "To summarize:"
+#~ msgstr "Sammanfattning:"
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "%d prenumerationsförfrågan"
+#~ msgstr[1] "%d prenumerationsförfrågan"
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "%d filöverföringsförfrågan"
+#~ msgstr[1] "%d filöverföringsförfrågan"
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "%d servermeddelande"
+#~ msgstr[1] "%d servermeddelanden"
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "%d fel"
+#~ msgstr[1] "%d fel"
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "Om du avslutar kommer all oläst information förloras."
+#~ msgid "Gossip is still running, it is just hidden."
+#~ msgstr "Gossip kör fortfarande, den är bara dold."
+#~ msgid "Click on the notification area icon to show Gossip."
+#~ msgstr "Klicka på ikonen i notifieringsytan för att visa Gossip."
+#~ msgid "You were about to quit!"
+#~ msgstr "Du är på väg att avsluta!"
+#~ msgid ""
+#~ "Since no system or notification tray has been found, this action would "
+#~ "normally quit Gossip.\n"
+#~ "\n"
+#~ "This is just a reminder, from now on, Gossip will quit when performing "
+#~ "this action unless you uncheck the option below."
+#~ msgstr ""
+#~ "Eftersom ingen system- eller notifieringslåda har hittats skulle denna "
+#~ "åtgärd normalt sett avslutat Gossip.\n"
+#~ "\n"
+#~ "Detta är bara en påminnelse, från och med nu kommer Gossip att avslutas "
+#~ "när denna åtgärd genomförs såvida du inte avkryssar alternativet nedan."
+#~ msgid "Select who would you like to invite to room:"
+#~ msgstr "Välj vilka du vill bjuda in till rummet:"
+#~ msgid "Select which room you would like to invite:"
+#~ msgstr "Välj vilket rum du vill bjuda in till:"
+#~ msgid "Your invitation has been declined"
+#~ msgstr "Ditt inbjudan har nekats."
+#~ msgid "Accept"
+#~ msgstr "Acceptera"
+#~ msgid "Decline"
+#~ msgstr "Neka"
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ange ett nytt namn för gruppen:\n"
+#~ "%s"
+#~ msgid "Unsorted"
+#~ msgstr "Osorterade"
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server."
+#~ msgstr ""
+#~ "Ställ in det alias du vill använda för:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "Du kan hämta kontaktinformation från servern."
+#~ msgid "New file transfer request from %s"
+#~ msgstr "Ny filöverföringsförfrågan från %s"
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "Filöverföring stöds inte av båda parter."
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "Ditt erbjudande om filöverföring nekades."
+#~ msgid "The other user decided not to continue."
+#~ msgstr "Den andra användaren beslöts sig för att inte fortsätta."
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Ett okänt fel inträffade under filöverföringen."
+#~ msgid "%s would like to send you a file."
+#~ msgstr "%s vill skicka en fil till dig."
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Någon vill skicka en fil till dig."
+#~ msgid "Select a file"
+#~ msgstr "Välj en fil"
+#~ msgid "Connecting..."
+#~ msgstr "Ansluter..."
+#~ msgid "Retry connection"
+#~ msgstr "Återanslut"
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "Inbjöd %s till att gå med i chattkonferens."
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "%s har satt ämnet: %s"
+#~ msgid "Conversation With"
+#~ msgstr "Samtal med"
+#~ msgid "Allow multiple instances of the application to run at the same time"
+#~ msgstr "Tillåt flera instanser av applikationen att köras samtidigt"
+# "Lista" som verb brukar vi inte använda; hellre "visa" eller möjligtvis
+# "visa i lista"
+#~ msgid "List the available accounts"
+#~ msgstr "Visa tillgängliga konton"
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "KONTONAMN"
+#~ msgid "You can not use --no-connect together with --account"
+#~ msgstr "Du kan inte använda --no-connect tillsammans med --account"
+#~ msgid "No accounts available."
+#~ msgstr "Inga konton tillgängliga."
+#~ msgid "Available accounts:"
+#~ msgstr "Tillgängliga konton:"
+#~ msgid "[default]"
+#~ msgstr "[standard]"
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Det finns inget konto med namnet \"%s\"."
+#~ msgid "Found %d conference rooms"
+#~ msgstr "Hittade %d konferensrum"
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "Bläddrar efter konferensrum, vänta..."
+#~ msgid "Browsing cancelled!"
+#~ msgstr "Bläddring avbröts!"
+#~ msgid "Default"
+#~ msgstr "Standard"
+#~ msgid "Chat!"
+#~ msgstr "Chatta!"
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s vill bli tillagd till din kontaktlista."
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Någon vill bli tillagd till din kontaktlista."
+#~ msgid "Show"
+#~ msgstr "Visa"
+#~ msgid "Contact has been removed"
+#~ msgstr "Kontakten har tagits bort"
+#~ msgid "Subject: %s"
+#~ msgstr "Ämne: %s"
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "Vill du lägga till denna person till din kontaktlista?"
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "Vill du lägga till %s till din kontaktlista?"
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Ange lösenordet för kontot %s"
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "Loggar in mot kontot \"%s\""
+#~ msgid "Remember Password?"
+#~ msgstr "Kom ihåg lösenord?"
+#~ msgid "Do not show this again"
+#~ msgstr "Visa inte det här igen"
+#~ msgid "Could not display the help contents."
+#~ msgstr "Kunde inte visa hjälpinnehållet."
+#~ msgid "OK"
+#~ msgstr "OK"
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "Servern verkar inte svara."
+#~ msgid "Try again later."
+#~ msgstr "Försök igen senare."
+#~ msgid "Change"
+#~ msgstr "Ändra"
+#~ msgid "Contact goes offline"
+#~ msgstr "Kontakt kopplas ner"
+#~ msgid "Contact goes online"
+#~ msgstr "Kontakt ansluts"
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Vill du acceptera denna fil?"
+#~ msgid "File Transfer Request"
+#~ msgstr "Filöverföringsförfrågan"
+#~ msgid "File name:"
+#~ msgstr "Filnamn:"
+# "Web site" är "webbplats". "Web page" är "webbsida".
+#~ msgid "File size:"
+#~ msgstr "Filstorlek:"
+#~ msgid "Not supported yet"
+#~ msgstr "Stöds inte ännu"
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "Denna person vill skicka den här filen till dig:"
+#~ msgid "me"
+#~ msgstr "jag"
+#~ msgid "Protocol:"
+#~ msgstr "Protokoll:"
+#~ msgid "Choose the protocol"
+#~ msgstr "Välj protokollet"
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+#~ msgid "%s - New Message"
+#~ msgstr "%s - Nytt meddelande"
+#~ msgid "%s - Conversation"
+#~ msgstr "%s - Samtal"
+#~ msgid "_Forget"
+#~ msgstr "_Glöm"
+#~ msgid "Martyn Russell"
+#~ msgstr "Martyn Russell"
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>martyn@imendio.com</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Ställ in det alias du vill använda för:\n"
+#~ "<b>martyn@imendio.com</b>\n"
+#~ "\n"
+#~ "Du kan hämta kontaktinformation från servern. "
+#~ msgid " "
+#~ msgstr " "
+#~ msgid "Group:"
+#~ msgstr "Grupp:"
+# "Web site" är "webbplats". "Web page" är "webbsida".
+#~ msgid "Web Site:"
+#~ msgstr "Webbplats:"
+#~ msgid "Favourite"
+#~ msgstr "Favorit"
+#~ msgid "Add to _favourites"
+#~ msgstr "_Lägg till i favoriter"
+#~ msgid ""
+#~ "Customize your own nickname, the server and chatroom which you wish to "
+#~ "join."
+#~ msgstr "Anpassa ditt smeknamn, servern och chattrummet du vill gå in i."
+#~ msgid "Edit your chat room details:"
+#~ msgstr "Redigera chattrumsdetaljer:"
+#~ msgid "Na_me:"
+#~ msgstr "Na_mn:"
+#~ msgid "New Chat Room"
+#~ msgstr "Nytt chattrum"
+#~ msgid ""
+#~ "Pick a saved chat room from the presets available below and click Join to "
+#~ "start chatting."
+#~ msgstr ""
+#~ "Välj ett sparat chattrum nedan och tryck Gå in för att börja chatta."
+#~ msgid "Save _this chat room"
+#~ msgstr "Spara detta chattrum"
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr "Tryck på Prenumerera för att ta emot kontaktens status"
+#~ msgid "_Group Chat"
+#~ msgstr "_Gruppchatt"
+#~ msgid "You have no Instant Messaging accounts configured!"
+#~ msgstr "Du har inte konfigurerar ett snabbmeddelandekonto!"
+#~ msgid ""
+#~ "Next you will be presented with the Account Information dialog to set "
+#~ "your details up."
+#~ msgstr ""
+#~ "Kontoinformationsdialogen kommer nu att visas så att du kan mata in din "
+#~ "information."
+#~ msgid "Registering account"
+#~ msgstr "Registrerar konto"
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Exempel:</span>"
+#~ msgid "Account Name"
+#~ msgstr "Kontonamn"
+#~ msgid "Connection Details"
+#~ msgstr "Anslutningsdetaljer"
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Har du redan ett konto på en server?"
+#~ msgid "Enter a name for this account"
+#~ msgstr "Ange ett namn för detta konto"
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr "Ange porten att ansluta till för detta konto"
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr "Ange den server som ska anslutas till för detta konto"
+#~ msgid "Enter your real name here"
+#~ msgstr "Ange ditt riktiga namn här"
+#~ msgid "Finished"
+#~ msgstr "Slutfört"
+#~ msgid "For increased security, enable this option"
+#~ msgstr "För ökad säkerhet, aktivera detta val"
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip är en modern klient för snabbmeddelandesystemet Jabber.\n"
+#~ "\n"
+#~ "Denna guide kommer att hjälpa dig att konfigurera Gossip och ansluta dig "
+#~ "till din Jabber-favoritserver.\n"
+#~ "\n"
+#~ "För att börja klickar du bara på \"Framåt\"."
+#~ msgid ""
+#~ "If you have another machine on your network which 'proxies' the "
+#~ "connection to the internet and you want to use it, enable this option"
+#~ msgstr ""
+#~ "Om du har en annan dator på ditt nätverk som fungerar som proxy för "
+#~ "anslutningar till internet och du vill använda den, aktivera detta "
+#~ "alternativ"
+#~ msgid ""
+#~ "If you need to set specific connection details, like a different server "
+#~ "or port, you can configure that here:"
+#~ msgstr ""
+#~ "Om du behöver ställa in specifika anslutningsdetaljer, som en annan "
+#~ "server eller port, kan du konfigurera det här:"
+#~ msgid ""
+#~ "Leave this blank if you don't want your password stored on a public "
+#~ "machine. If you decide to do this, you will be prompted each time you "
+#~ "connect for a password"
+#~ msgstr ""
+#~ "Lämna denna blank om du inte vill lagra ditt lösenord på en publik dator. "
+#~ "Om du väljer att göra det, kommer du att frågas efter ett lösenord varje "
+#~ "gång du ansluter"
+#~ msgid "Registering Account"
+#~ msgstr "Registrerar konto"
+#~ msgid "Resource:"
+#~ msgstr "Resurs:"
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Välkommen till Gossip"
+#~ msgid "What is your name?"
+#~ msgstr "Vad heter du?"
+#~ msgid ""
+#~ "What name do you want to use to identify this account?\n"
+#~ "\n"
+#~ "This name could be something associated with the service provider, for "
+#~ "example, <b>Google</b>."
+#~ msgstr ""
+#~ "Vilket namn vill du använda för att identifiera detta konto?\n"
+#~ "\n"
+#~ "Detta namn skulle kunna vara något som kan kopplas ihop med "
+#~ "tjänsteleverantören, till exempel <b>Google</b>."
+#~ msgid "What password do you want to use?"
+#~ msgstr "Vilket lösenord vill du använda?"
+#~ msgid "What username do you use?"
+#~ msgstr "Vad använder du för användarnamn?"
+#~ msgid "What username do you want to use?"
+#~ msgstr "Vilket användarnamn vill du använda?"
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Du kan ändra dina kontoinställningar senare genom att välja menyvalet "
+#~ "Redigera->Konton."
+#~ msgid ""
+#~ "You need to set a name for the connection, for example, <b>Home</b> or "
+#~ "<b>Laptop</b>."
+#~ msgstr ""
+#~ "Du behöver ställa in ett namn för anslutningen, till exempel <b>Hem</b> "
+#~ "eller <b>Bärbar dator</b>."
+#~ msgid "Your Account"
+#~ msgstr "Ditt konto"
+#~ msgid "Your Identity"
+#~ msgstr "Din identitet"
+#~ msgid "Your new account has now been set up."
+#~ msgstr "Ditt nya konto är nu inställt."
+#~ msgid "_No"
+#~ msgstr "_Nej"
+#~ msgid "_Yes"
+#~ msgstr "_Ja"
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Information begärd, var vänlig vänta...</b>"
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s kommer att läggas till i din kontaktlista."
+#~ msgid "%s ID of new contact:"
+#~ msgstr "%s id för ny kontakt:"
+#~ msgid "Example: %s"
+#~ msgstr "Exempel: %s"
+#~ msgid "Add a contact"
+#~ msgstr "Lägg till en kontakt"
+#~ msgid "Enter the user's contact ID:"
+#~ msgstr "Ange användarens kontakt-ID:"
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "För att kunna prenumerera på närvaronotifikationer från användaren kommer "
+#~ "en förfrågan att skickas. Användaren kommer alltid att visas som "
+#~ "\"Frånkopplad\" i din kontaktlista till dess att denna förfrågan är "
+#~ "godkänd."
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "I vilken grupp vill du placera denna kontakt?"
+#~ msgid "Jabber ID:"
+#~ msgstr "Jabber-id:"
+#~ msgid "Sending request"
+#~ msgstr "Skickar förfrågan"
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Vilket meddelandesystem använder kontakten?"
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "Till vilket konto vill du lägga till denna kontakt?"
+#~ msgid "_Search..."
+#~ msgstr "_Sök..."
+#~ msgid "_Compact contact list"
+#~ msgstr "_Kompakt kontaktlista"
+#~ msgid "Show accounts and pending connections"
+#~ msgstr "Visa konton och avvaktande anslutningar"
+#~ msgid "Edit"
+#~ msgstr "Redigera"
+#~ msgid "Perhaps you are trying to connect to the wrong port?"
+#~ msgstr "Försöker du kanske ansluta till fel port?"
+#~ msgid "Perhaps the service is not currently running?"
+#~ msgstr "Tjänsten kanske inte är igång just nu?"
+#~ msgid "Check your connection details."
+#~ msgstr "Kontrollera dina anslutningsdetaljer."
+#~ msgid "Perhaps the server is not running this service."
+#~ msgstr "Servern kanske inte kör denna tjänsten."
+#~ msgid "Check your username and password are correct."
+#~ msgstr "Kontrollera att användarnamn och lösenord är korrekta."
+#~ msgid "Re_name group"
+#~ msgstr "Byt _namn på grupp"
+#~ msgid "_Remove contact"
+#~ msgstr "_Ta bort kontakt"
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ange ditt inbjudningsmeddelande till:\n"
+#~ "%s"
+# Vi brukar förvisso låta R:et vara åtkomsttangent i "Redigera"
+#~ msgid "_Edit Groups"
+#~ msgstr "R_edigera grupper"
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ange ett nytt smeknamn för kontakten\n"
+#~ "%s"
+#~ msgid "Edit groups for %s"
+#~ msgstr "Redigera grupper för %s"
+# Vi översätter "hide" med "dölj" i GNOME. Gömmer gör man något för att det
+# inte ska hittas, döljer gör man för att det inte ska synas.
+#~ msgid "_Hide Contact List"
+#~ msgstr "_Dölj kontaktlista"
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/Kontaktinfor_mation"
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "/Visa tidigare samtal"
+#~ msgid "Enable Spell Checker"
+#~ msgstr "Aktivera stavningskontroll"
+#~ msgid "Preset status messages"
+#~ msgstr "Förinställda statusmeddelanden"
+#~ msgid "Preset status messages."
+#~ msgstr "Förinställda statusmeddelanden."
+#~ msgid "Peekaboo"
+#~ msgstr "Peekaboo"
+# Vi översätter "hide" med "dölj" i GNOME. Gömmer gör man något för att det
+# inte ska hittas, döljer gör man för att det inte ska synas.
+#~ msgid "_Show/Hide Contact List"
+#~ msgstr "_Dölj/Visa kontaktlista"
+#~ msgid "An instant messaging applet."
+#~ msgstr "En snabbmeddelandeklient för GNOME"
+#~ msgid "Contact Information for %s"
+#~ msgstr "Kontaktinformation för %s"
+#~ msgid "Convert smiley text into images when chatting"
+#~ msgstr "Konvertera textsmilisar till bilder"
+#~ msgid "Be silent when away"
+#~ msgstr "Var tyst under frånvaro"
+#~ msgid "Be silent when busy"
+#~ msgstr "Var tyst under upptagetläge"
+#~ msgid "<b>Chat Window</b>"
+#~ msgstr "<b>Chattfönster</b>"
+#~ msgid "Join _Group Chat..."
+#~ msgstr "_Gå in i gruppchatt..."
+#~ msgid "Available..."
+#~ msgstr "Tillgänglig..."
+#~ msgid "Busy..."
+#~ msgstr "Upptagen..."
+#~ msgid "Away..."
+#~ msgstr "Frånvarande..."
+#~ msgid "Requesting contact information, please wait..."
+#~ msgstr "Begär kontaktinformation, var vänlig vänta..."
+#~ msgid "Height of main window"
+#~ msgstr "Höjden på huvudfönstret"
+#~ msgid "The X position of the main window."
+#~ msgstr "X-positionen av huvudfönstret."
+#~ msgid "The Y position of the main window."
+#~ msgstr "Y-positionen av huvudfönstret."
+#~ msgid "The width of the main window."
+#~ msgstr "Bredden på huvudfönstret."
+#~ msgid "Whether spell checking should be turned on."
+#~ msgstr "Huruvida stavningskontroll ska vara påslaget."
+#~ msgid "Width of the main window"
+#~ msgstr "Bredden på huvudfönstret"
+#~ msgid "X position of main window"
+#~ msgstr "X-positionen av huvudfönstret"
+#~ msgid "Y position of main window"
+#~ msgstr "Y-positionen av huvudfönstret"
+#~ msgid "<b>Appearance and Behavior</b>"
+#~ msgstr "<b>Utseende och beteende</b>"
+#~ msgid "Check spelling while I _type"
+#~ msgstr "Kontrollera stavning medan jag skriver"
+#~ msgid "Close this chat window"
+#~ msgstr "Stäng detta chattfönster"
+#~ msgid "Requested Information"
+#~ msgstr "Information efterfrågad"
+#~ msgid "Requested information."
+#~ msgstr "Information efterfrågad."
+#~ msgid "/_Contact Information"
+#~ msgstr "/_Kontaktinformation"
+#~ msgid "Contact _Information"
+#~ msgstr "Kontakti_nformation"
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - konton"
+#~ msgid "Por_t:"
+#~ msgstr "_Port:"
+#~ msgid "/_Invite to Chat Conference"
+#~ msgstr "/_Bjud in till chattkonferens"
+#~ msgid "%s has gone offline"
+#~ msgstr "%s kopplade från"
+#~ msgid "/View Message _History"
+#~ msgstr "/Visa _meddelandehistorik"
+#~ msgid "View Message _History"
+#~ msgstr "Visa _meddelandehistorik"
+#~ msgid "View Message Hi_story"
+#~ msgstr "Visa _meddelandehistorik"
+#~ msgid "View Message History"
+#~ msgstr "Visa meddelandehistorik"
+#~ msgid "%sChat - %s"
+#~ msgstr "%sChatt - %s"
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - gruppchatt"
+#~ msgid "Gossip - New Chatroom"
+#~ msgstr "Gossip - nytt chattrum"
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Gossip - lägg till kontakt"
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "Gossip - kontaktinformation"
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - redigera grupper"
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - nytt konto"
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Gossip - personlig information"
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Gossip - inställningar"
+#~ msgid "Gossip - Spell Checker"
+#~ msgstr "Gossip - stavningskontroll"
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - statusmeddelande"
+#~ msgid "Gossip - View Message History"
+#~ msgstr "Gossip - visa meddelandehistorik"
+#~ msgid "Written by:"
+#~ msgstr "Skrivet av:"
+#~ msgid "Artwork by:"
+#~ msgstr "Grafik av:"
+#~ msgid "Translated by:"
+#~ msgstr "Översatt av:"
+#~ msgid "/Show _Log"
+#~ msgstr "/_Visa logg"
+#~ msgid "View Lo_g"
+#~ msgstr "_Visa logg"
+#~ msgid ""
+#~ "You can identify this account with a name, for example, <b>Home</b> or "
+#~ "<b>Work</b>. Choose a name for this account:"
+#~ msgstr ""
+#~ "Du kan identifiera detta kontot med ett namn, till exempel <b>Hemma</b> "
+#~ "eller <b>Jobb</b>. Välj ett namn för kontot:"
+#~ msgid "Open"
+#~ msgstr "Öppet"
+#~ msgid "Account ID"
+#~ msgstr "Kontoid"
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "Kunde inte hitta servern du ville använda"
+#~ msgid "Connection to the server failed."
+#~ msgstr "Anslutningen till servern misslyckades."
+#~ msgid "Connection could not be created"
+#~ msgstr "Anslutning kunde inte skapas"
+#~ msgid "Bad Request"
+#~ msgstr "Felaktig förfrågan"
+#~ msgid "Payment Required"
+#~ msgstr "Betalning krävd"
+#~ msgid "Not Found"
+#~ msgstr "Inte hittad"
+#~ msgid "Not Allowed"
+#~ msgstr "Inte tillåten"
+#~ msgid "Not Acceptable"
+#~ msgstr "Inte acceptabel"
+#~ msgid "Request Timeout"
+#~ msgstr "Förfrågan timade ut"
+#~ msgid "Conflict"
+#~ msgstr "Konflikt"
+#~ msgid "Remote Server Error"
+#~ msgstr "Fjärrserverfel"
+#~ msgid "Service Unavailable"
+#~ msgstr "Tjänst otillgänglig"
+#~ msgid "Custom"
+#~ msgstr "Anpassad"
+#~ msgid "Check the server host name is correct and is available."
+#~ msgstr ""
+#~ "Kontrollera att serverns namn är korrent och att den finns tillgänglig."
+# Dessa meddelanden slutar inte båda i punkt, borde kanske rapporteras
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip kommer nu att försöka använda ditt konto:"
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Gossip kommer nu att försöka registrera kontot:"
+#~ msgid "Reason:"
+#~ msgstr "Orsak:"
+#~ msgid "R_esource:"
+#~ msgstr "R_esurs:"
+#~ msgid "<b>Personal Information</b>"
+#~ msgstr "<b>Personlig information</b>"
+#~ msgid "Choose a Server"
+#~ msgstr "Välj en server"
+#~ msgid "On what server do you have an account?"
+#~ msgstr "På vilken server har du ett konto?"
+#~ msgid "_Jabber ID of new contact:"
+#~ msgstr "_Jabber-id för ny kontakt:"
+#~ msgid "<b>Preferences</b>"
+#~ msgstr "<b>Inställningar</b>"
+#~ msgid "Connect _Server:"
+#~ msgstr "Anslut till _server:"
+#~ msgid "_Automatically Connect"
+#~ msgstr "_Anslut automatiskt"
+#~ msgid "_Resource:"
+#~ msgstr "_Resurs:"
+#~ msgid ""
+#~ "The default account is used for information like your name in chat "
+#~ "windows."
+#~ msgstr ""
+#~ "Standardkontot används för information som ditt namn i chattfönster."
+#~ msgid "_Connect..."
+#~ msgstr "_Anslut..."
+#, fuzzy
+#~ msgid ""
+#~ "<b>Configuring your new service...</b>\n"
+#~ "This will take a few moments, please wait."
+#~ msgstr ""
+#~ "<b>Söker efter den bästa servern...</b>\n"
+#~ "Detta kommer att ta en stund, var god vänta."
+
+#, fuzzy
+#~ msgid "<b>Preferred Service</b>"
+#~ msgstr "<b>Rekommenderade tjänster</b>"
+#~ msgid "<b>Recommended Services</b>"
+#~ msgstr "<b>Rekommenderade tjänster</b>"
+
+#, fuzzy
+#~ msgid ""
+#~ "<b>Requested service requirements...</b>\n"
+#~ "This will take a few moments, please wait."
+#~ msgstr ""
+#~ "<b>Söker efter den bästa servern...</b>\n"
+#~ "Detta kommer att ta en stund, var god vänta."
+#~ msgid "Add Account"
+#~ msgstr "Lägg till konto"
+#~ msgid "Add Another Account"
+#~ msgstr "Lägg till ytterligare konto"
+#~ msgid "Configuring Service"
+#~ msgstr "Konfigurerar tjänst"
+#~ msgid "Nick name:"
+#~ msgstr "Smeknamn:"
+#~ msgid "Please complete the details below to set up your account: "
+#~ msgstr "Fyll i detaljerna nedan för att ställa in ditt konto: "
+#~ msgid "Remove Account"
+#~ msgstr "Ta bort konto"
+#~ msgid "Service Details"
+#~ msgstr "Tjänstedetaljer"
+#~ msgid "Service:"
+#~ msgstr "Tjänst:"
+#~ msgid ""
+#~ "This wizard will allow you to configure your account settings for another "
+#~ "protocol. "
+#~ msgstr ""
+#~ "Denna guide kommer att låta dig konfigurera dina kontoinställningar för "
+#~ "ytterligare ett protokoll. "
+
+#, fuzzy
+#~ msgid "Transport Accounts"
+#~ msgstr "Jabberkonto"
+#~ msgid "Which protocol would you like to set up? "
+#~ msgstr "Vilket protokoll vill du konfigurera? "
+#~ msgid "Edit List..."
+#~ msgstr "Redigera listan..."
+#~ msgid "Gossip - Status Presets"
+#~ msgstr "Gossip - förinställd status"
+
+#, fuzzy
+#~ msgid "Choose _from list:"
+#~ msgstr "Välj från lista:"
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#, fuzzy
+#~ msgid "Use a _different server"
+#~ msgstr "Använd en annan server"
+#~ msgid "_Account Information"
+#~ msgstr "_Kontoinformation"
+#~ msgid "Searching Local Services..."
+#~ msgstr "Söker lokala tjänster..."
+
+#, fuzzy
+#~ msgid "This will be used to configure your account details."
+#~ msgstr ""
+#~ "Denna guide kommer att låta dig konfigurera dina kontoinställningar för "
+#~ "ytterligare ett protokoll."
+
+#, fuzzy
+#~ msgid "Configuring Roster"
+#~ msgstr "Konfigurerar tjänst"
+
+#, fuzzy
+#~ msgid "Registration Successful!"
+#~ msgstr "Registrerar konto"
+#~ msgid "Service"
+#~ msgstr "Tjänst"
+
+#, fuzzy
+#~ msgid "Registering With Service"
+#~ msgstr "Konfigurerar tjänst"
+#~ msgid "From:"
+#~ msgstr "Från:"
+#~ msgid "In reply to:"
+#~ msgstr "Svar på:"
+#~ msgid "To:"
+#~ msgstr "Till:"
+#~ msgid "_Reply..."
+#~ msgstr "_Svara..."
+#~ msgid "_Send"
+#~ msgstr "_Skicka"
+#~ msgid "<b>Connect to server</b>"
+#~ msgstr "<b>Anslut till server</b>"
+#~ msgid "C_onnect"
+#~ msgstr "A_nslut"
+#~ msgid " "
+#~ msgstr " "
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>Tillgängliga chattrum</b>"
+#~ msgid "N_ickname:"
+#~ msgstr "Smek_namn:"
+#~ msgid "_Add"
+#~ msgstr "_Lägg till"
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>Förinställda statusmeddelanden</b>"
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Informationen inte tillgänglig</i>"
+#~ msgid "Information about ..."
+#~ msgstr "Information om..."
+#~ msgid "Jabber Account"
+#~ msgstr "Jabberkonto"
+#~ msgid "Personal information"
+#~ msgstr "Personlig information"
+#~ msgid "Status Message"
+#~ msgstr "Statusmeddelande"
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "Vilket förfrågansmeddelande vill du skicka till %s?"
+#~ msgid "%s wants to be notified of your status."
+#~ msgstr "%s vill bli meddelad om din status."
+#~ msgid "Add to your contact list"
+#~ msgstr "Lägg till i din kontaktlista"
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Vilket förfrågansmeddelande vill du skicka till ..."
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Kontrollera att din kontoinformation är korrekt."
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Du frånkopplades från servern. Vill du återansluta?"
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr ""
+#~ "Kontrollera att din kontoinformation är korrekt. Servern kan också vara "
+#~ "otillgänglig för tillfället."
+#~ msgid "An error occurred when chatting in the group chat %s."
+#~ msgstr "Ett fel inträffade under samtal i gruppchatten %s."
+#~ msgid "Details:"
+#~ msgstr "Detaljer:"
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "Kunde inte gå in i gruppchatten %s."
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "Ett fel inträffade under chatt med %s."
+#~ msgid "Sound"
+#~ msgstr "Ljud"
+#~ msgid ""
+#~ "Please enter your user name, password and all other required details "
+#~ "below to set up your account."
+#~ msgstr ""
+#~ "Ange ditt användarnamn, lösenord och alla andra nödvändiga detaljer nedan "
+#~ "för att konfigurera ditt konto."
+
diff --git a/trunk/po/tr.po b/trunk/po/tr.po
new file mode 100644
index 000000000..6d60e755e
--- /dev/null
+++ b/trunk/po/tr.po
@@ -0,0 +1,854 @@
+# translation of tr.po to Turkish
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Görkem Çetin <gorkem@kde.org>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: tr\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2004-03-21 11:55+0000\n"
+"Last-Translator: Görkem Çetin <gorkem@kde.org>\n"
+"Language-Team: Turkish <kde-i18n-tr@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3.1\n"
+
+#: ../data/empathy.desktop.in.h:1
+msgid "Empathy Instant Messenger"
+msgstr ""
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+msgid "Compact contact list"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable spell checker"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show hint about closing the main window"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+msgid "Whether to show the contact list in compact mode or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr ""
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr ""
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr ""
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+msgid "Show and edit accounts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+msgid "Contact"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+msgid "Contact List - Empathy"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+msgid "Join _Favorites"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+msgid "_About"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "_Edit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+msgid "Disable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+msgid "<b>No Account Selected</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+msgid "<b>No Accounts Configured</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+msgid "<b>Account</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+msgid "<b>New Account</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+msgid "<b>Settings</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+msgid "Cr_eate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+msgid "_Name:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+msgid "_Type:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+msgid "Pass_word:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+msgid "Use encryption (SS_L)"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+msgid "_Port:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+msgid "Cu_t"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+msgid "In_vite..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+msgid "Invitation _message:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+msgid "Chat Room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+msgid "_Contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+msgid "_Group"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "Chat with contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "Infor_mation"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "View contact information"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Re_name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Rename"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "Edit the groups and name for this contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "Remove contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "_Invite to Chat Room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "Send a file"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "View previous conversations with this contact"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+msgid "<b>Contact List</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+msgid "Notifications"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+msgid "Preferences"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+msgid "Show co_mpact contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr ""
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+msgid "Clear List..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+msgid "Are you sure you want to clear the list?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+msgid "Status Message Presets"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+msgid "_Add to status message list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+msgid "Clean"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr ""
+
+#: ../src/empathy-main.c:155
+msgid "- Empathy Instant Messenger"
+msgstr ""
diff --git a/trunk/po/uk.po b/trunk/po/uk.po
new file mode 100644
index 000000000..92f447985
--- /dev/null
+++ b/trunk/po/uk.po
@@ -0,0 +1,1915 @@
+# Ukrainian translation for gossip
+# Copyright (C) 2004 Free Software Foundation, Inc.
+# This file is distributed under the same license as the gossip package.
+# Sergiy Dolgopolov <virgo@gnome.org.ua>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip 0.7.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2004-05-17 20:45+0200\n"
+"Last-Translator: Sergiy Dolgopolov <virgo@gnome.org.ua>\n"
+"Language-Team: Ukrainian <uk@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Програма для обміну повідомленнями"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Програма для обміну повідомленнями"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "Додати в список контактів"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+#, fuzzy
+msgid "Enable sound when away"
+msgstr "Не програвати звук у стані \"Відійшов\""
+
+#: ../data/empathy.schemas.in.h:9
+#, fuzzy
+msgid "Enable sound when busy"
+msgstr "Не програвати звук у стані \"зайнятий \""
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Gossіp - Відправлення повідомлення"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Сховати головне вікно"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Сховати головне вікно"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "Показати список контактів"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "Висота головного вікна."
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Показувати відсутніх"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Використовувати графічні смайли"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Використовувати звуки"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "Чи конвертувати смайли в графічне представлення."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Чи використовувати звук при приході повідомлення."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Чи програвати звук коли статус відсутність."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Чи програвати звук коли статус зайнятий."
+
+#: ../data/empathy.schemas.in.h:28
+#, fuzzy
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Чи використовувати звук при приході повідомлення."
+
+#: ../data/empathy.schemas.in.h:29
+#, fuzzy
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "Чи показувати відсутніх користувачів у контактному листі."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "Чи показувати відсутніх користувачів у контактному листі."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Чи показувати відсутніх користувачів у контактному листі."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Відключений"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Доступний"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Зайнятий"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Відійшов"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "Показати список контактів"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Група"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "_Додати контакт..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "_Сховати список контактів"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "З'єднатися"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "_Редагувати переваги..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "_Показувати відсутніх"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "_Підтвердити"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+#, fuzzy
+msgid "_Accounts"
+msgstr "_Підтвердити"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "_Додати контакт..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "_Дії"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "З'єднатися"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "_Edit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "_Послати повідомлення..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+#, fuzzy
+msgid "_Personal Information"
+msgstr "Особиста інформація"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "_Настройки"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+#, fuzzy
+msgid "_Room"
+msgstr "_Кімната:"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "_View Previous Conversations"
+msgstr "_Бесіда"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Стан"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "Показати список контактів"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+#, fuzzy
+msgid "An Instant Messaging client for GNOME"
+msgstr "Gossip, Клієнт Jabber для середовища GNOME"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr "Sergiy Dolgopolov"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Доступний"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Переваги:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Переваги:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+#, fuzzy
+msgid "Accounts"
+msgstr "Обліковий запис Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "<b>Переваги:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Переваги:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "Стан"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Розмова"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "Назва:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "_Тема:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">Приклад: user@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "_Пароль:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+#, fuzzy
+msgid "Reso_urce:"
+msgstr "_Ресурс:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "Використовувати _шифрування (SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "П_орт:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "_Сервер:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Від'єднаний"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "З'єднаний"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "О_чистити"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Розмова"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+#, fuzzy
+msgid "Contact Infor_mation"
+msgstr "_Контактна інформація"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "Розмова"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "_Реєстрація..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Вести повідомлення стану:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Перемістити закладку вліво"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Перемістити закладку вправо"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+#, fuzzy
+msgid "_Add To Favorites"
+msgstr "_Редагувати переваги..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "_Бесіда"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "_Відокремити закладку"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "_Наступна закладка"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "_Попередня закладка"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+#, fuzzy
+msgid "_Show Contacts"
+msgstr "Показати список контактів"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Закладки"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Скопіювати адресу посилання"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Відкрити посилання"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "_Послати повідомлення..."
+msgstr[1] "_Послати повідомлення..."
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Gossіp - Розмова"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "_Бесіда"
+msgstr[1] "_Бесіда"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "_Додати контакт..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "Група"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "Додати контакт"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "_Контактна інформація"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "Контактна інформація"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/_Перейменувати групу"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "_Ім'я користувача:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr ""
+"Ведіть псевдонім для контакту\n"
+"%s"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "Видалити"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/_Видалити контакт"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "Gossіp - Редагування кімнат"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "Вибір"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "_Бесіда"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>Переваги:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>Переваги:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "Стан"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "З'єднатися"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>Переваги:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+#, fuzzy
+msgid "Chat Th_eme:"
+msgstr "Назва _кімнати:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+#, fuzzy
+msgid "Enable sounds when _away"
+msgstr "Не програвати звук у стані \"Відійшов\""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+#, fuzzy
+msgid "Enable sounds when _busy"
+msgstr "Не програвати звук у стані \"зайнятий \""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "Використовувати звуки"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "_Настройки"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+#, fuzzy
+msgid "Show _smileys as images"
+msgstr "Показувати графічні смайли"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "Показати список контактів"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+#, fuzzy
+msgid "_Play sound when messages arrive"
+msgstr "Програвати звук при приході повідомлення"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "Gossіp - Редагування кімнат"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+#, fuzzy
+msgid "Custom message..."
+msgstr "Повідомлення запиту"
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "О_чистити"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "Підтвердити запит?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+#, fuzzy
+msgid "Clear List"
+msgstr "О_чистити"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Вести повідомлення стану:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "Повідомлення стану"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "Задані повідомлення стану"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s відключився"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, fuzzy, c-format
+msgid "%s has come online"
+msgstr "%s підключився"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "О_чистити"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Не з'єднуватися при запуску"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "Програма для обміну повідомленнями"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Програма для обміну повідомленнями"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "_Приєднатися"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "Невідома помилка"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Використовувати звуки"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Невідома помилка"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "Доступний"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "Невідома помилка"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "З'єднаний"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "З'єднаний"
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Обліковий запис Jabber"
+
+#~ msgid "Home"
+#~ msgstr "Додому"
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Реєстрація облікового запису"
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "Відключитися"
+
+#~ msgid "Connect"
+#~ msgstr "З'єднатися"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Облікова запису зареєстрована"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Помилка реєстрації облікового запису"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Ведіть пароль:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Ведіть пароль:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ведіть нові ім'я для групи\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Information requested, please wait..."
+#~ msgstr "<b>Запит інформації...</b>"
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Я хотів би додати Вас у свій список контактів."
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "_Послати повідомлення..."
+#~ msgstr[1] "_Послати повідомлення..."
+
+#, fuzzy
+#~ msgid "Edit Account _Details"
+#~ msgstr "Редагувати інформацію облікового запису"
+
+#~ msgid "New message from %s"
+#~ msgstr "Нове повідомлення від %s"
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "_Підтвердити"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Назва:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Кімната:"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "З'єднатися"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "<b>Запит інформації...</b>"
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "Видалити контакт\n"
+#~ "%s\n"
+#~ "зі списку контактів?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ведіть нові ім'я для групи\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Вибір"
+
+#~ msgid "Unsorted"
+#~ msgstr "Невідсортований"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Невідома помилка"
+
+#, fuzzy
+#~ msgid "%s would like to send you a file."
+#~ msgstr "Я хотів би додати Вас у свій список контактів."
+
+#, fuzzy
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Я хотів би додати Вас у свій список контактів."
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "Вибір"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "_З'єднатися..."
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "З'єднатися"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Який псевдонім Ви хочете використовувати для цього контакту?"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "_Тема:"
+
+#, fuzzy
+#~ msgid "Account"
+#~ msgstr "Обліковий запис Jabber"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "_Бесіда"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Список облікових записів"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Обліковий запис який використовується при запуску"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "ACCOUNT-NAME"
+
+#~ msgid "Available accounts:"
+#~ msgstr "Доступні облікові записи:"
+
+#~ msgid "[default]"
+#~ msgstr "[За замовчуванням]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Немає облікового запису з ім'ям '%s'."
+
+#, fuzzy
+#~ msgid "Join"
+#~ msgstr "_Приєднатися"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Розмова"
+
+#, fuzzy
+#~ msgid "Chat Rooms"
+#~ msgstr "Gossіp - Розмова"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "<b>Запит інформації...</b>"
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "[За замовчуванням]"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "Розмова"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s буде доданий у список контактів."
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "%s буде доданий у список контактів."
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "Відправлення запиту"
+
+#, fuzzy
+#~ msgid "Contact Information"
+#~ msgstr "_Контактна інформація"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr ""
+#~ "Видалити контакт\n"
+#~ "%s\n"
+#~ "зі списку контактів?"
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr ""
+#~ "Видалити контакт\n"
+#~ "%s\n"
+#~ "зі списку контактів?"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Ведіть пароль:"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Запам'ятати пароль?"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Розмова"
+
+#, fuzzy
+#~ msgid "Contact goes online"
+#~ msgstr "%s підключився"
+
+#, fuzzy
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Підтвердити запит?"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "_Ім'я користувача:"
+
+#, fuzzy
+#~ msgid "File size:"
+#~ msgstr "Сайт:"
+
+#~ msgid "Web site:"
+#~ msgstr "Сайт:"
+
+#~ msgid "_Accept"
+#~ msgstr "_Підтвердити"
+
+#~ msgid "_Deny"
+#~ msgstr "Ві_дкинути"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Переваги:</b>"
+
+#, fuzzy
+#~ msgid "Account:"
+#~ msgstr "Обліковий запис Jabber"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Gossіp - Редагування кімнат"
+
+#, fuzzy
+#~ msgid "Group Chat"
+#~ msgstr "Gossіp - Розмова"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "_Приєднатися"
+
+#, fuzzy
+#~ msgid "Join room on start_up"
+#~ msgstr "Не з'єднуватися при запуску"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "Назва:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "Сервер:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "Псевдонім:"
+
+#~ msgid "_Room:"
+#~ msgstr "_Кімната:"
+
+#, fuzzy
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Переваги:</b>"
+
+#, fuzzy
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "Інформація про клієнта"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Переваги:</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "Стан"
+
+#, fuzzy
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Параметри облікового запису</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "З'єднатися"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">Приклад: user@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Обліковий запис Jabber"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "_Додати контакт..."
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "Розмова"
+
+#~ msgid "Client:"
+#~ msgstr "Клієнт:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "_Додати контакт..."
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Не з'єднуватися при запуску"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "_Додати контакт..."
+
+#~ msgid "Country:"
+#~ msgstr "Країна:"
+
+#, fuzzy
+#~ msgid "Decide _Later"
+#~ msgstr "_Вирішити пізніше"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "_Додати контакт..."
+
+#~ msgid "Edit Groups"
+#~ msgstr "Редагувати групи"
+
+#~ msgid "Email:"
+#~ msgstr "Email:"
+
+#, fuzzy
+#~ msgid "ID:"
+#~ msgstr "JID"
+
+#~ msgid "Name:"
+#~ msgstr "Назва:"
+
+#~ msgid "OS:"
+#~ msgstr "ОС:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "<b>Параметри облікового запису</b>"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "_Реєстрація..."
+
+#, fuzzy
+#~ msgid "Search"
+#~ msgstr "Пошук..."
+
+#, fuzzy
+#~ msgid "Spell Checker"
+#~ msgstr "Gossіp - Відправлення повідомлення"
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "Який псевдонім Ви хочете використовувати для цього контакту?"
+
+#~ msgid "Version:"
+#~ msgstr "Версія:"
+
+#, fuzzy
+#~ msgid "View Previous Conversations"
+#~ msgstr "_Бесіда"
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Яке ім'я користувача ви хочете використовувати?"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "З'єднатися"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Опис"
+
+#~ msgid "_Disconnect"
+#~ msgstr "Відключитися"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "Email:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Введіть ідентифікатор користувача якому ви хочете послати повідомлення."
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "П_орт:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "Назва:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "Група"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "Псевдонім:"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Пароль:"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "Повідомлення стану"
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "Видалити"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Сайт:"
+
+#~ msgid "Preset status messages"
+#~ msgstr "Задані повідомлення стану"
+
+#~ msgid "Preset status messages."
+#~ msgstr "Задані повідомлення стану."
+
+#, fuzzy
+#~ msgid "Connecting"
+#~ msgstr "З'єднатися"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s буде доданий у список контактів."
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "_Jabber ІD нового контакту:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "Ведіть пароль:"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "Інформація про контакт %s"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/_Контактна інформація"
+
+#, fuzzy
+#~ msgid "/Re_name Contact"
+#~ msgstr "/_Перейменувати контакт"
+
+#, fuzzy
+#~ msgid "/_Edit Groups"
+#~ msgstr "/_Редагувати групи"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "_Бесіда"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Ведіть псевдонім для контакту\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "Редагувати групу для %s"
+
+#~ msgid "Conversation Log"
+#~ msgstr "Журнал розмов"
+
+#~ msgid "Registering account"
+#~ msgstr "Реєстрація облікового запису"
+
+#, fuzzy
+#~ msgid "Respond"
+#~ msgstr "Причина:"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "_Редагувати переваги..."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "Назва:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Gossіp - Розмова"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Запит інформації...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Приклад: user@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Gossіp - Розмова"
+
+#, fuzzy
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Обліковий запис на сервері Jabber уже зареєстрований?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr ""
+#~ "Ведіть псевдонім для контакту\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr ""
+#~ "Ведіть псевдонім для контакту\n"
+#~ "%s"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "Установка закінчена"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossіp це сучасний клієнт системи обміну повідомленнями Jabber.\n"
+#~ "\n"
+#~ "Асистент допоможе вам настроїти Gossіp для з'єднання з вашим сервером "
+#~ "Jabber.\n"
+#~ "\n"
+#~ "Натисніть кнопку \"Уперед\"."
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "Щоб одержувати інформацію про приступність користувача повинний бути "
+#~ "відправлений запит. Поки запит не підтверджений, користувач завжди буде "
+#~ "показуватися як \"Відключений\"."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "У яку групу помістити цей контакт?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "Jabber ID:"
+
+#, fuzzy
+#~ msgid "Nickname:"
+#~ msgstr "Псевдонім:"
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "П_орт:"
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "Реєстрація облікового запису"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "_Ресурс:"
+
+#~ msgid "Server:"
+#~ msgstr "Сервер:"
+
+#, fuzzy
+#~ msgid "Web Site:"
+#~ msgstr "Сайт:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Ласкаво просимо в Gossіp"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Яка система обміну повідомленнями використовується цим контактом?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Ваше ім'я?"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "Який сервер Ви хочете використовувати?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Яке ім'я користувача Ви використовуєте?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Яке ім'я користувача ви хочете використовувати?"
+
+#, fuzzy
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "У яку групу помістити цей контакт?"
+
+#, fuzzy
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Gossіp набудований для роботи з вашою системою.\n"
+#~ "Ви можете настроїти Ваш обліковий запис пізніше, у меню Дії->З'єднатися..."
+
+#, fuzzy
+#~ msgid "Your Account"
+#~ msgstr "Обліковий запис Jabber"
+
+#~ msgid "Your Identity"
+#~ msgstr "Ваші дані"
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "Gossіp - Розмова"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "Ні"
+
+#~ msgid "_Search..."
+#~ msgstr "Пошук..."
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "Так"
+
+#~ msgid "Be silent when away"
+#~ msgstr ""
+#~ "Не посилати повідомлення\n"
+#~ "у стані \"відсутній\""
+
+#~ msgid "Be silent when busy"
+#~ msgstr ""
+#~ "Не посилати повідомлення\n"
+#~ "у стані \"зайнятий\""
+
+#~ msgid "Height of main window"
+#~ msgstr "Висота головного вікна"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "Х позиція головного вікна."
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "Y позиція головного вікна"
+
+#~ msgid "The width of the main window."
+#~ msgstr "Ширина головного вікна."
+
+#~ msgid "Width of the main window"
+#~ msgstr "Ширина головного вікна"
+
+#~ msgid "X position of main window"
+#~ msgstr "Х позиція головного вікна"
+
+#~ msgid "Y position of main window"
+#~ msgstr "Y позиція головного вікна"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip, Клієнт Jabber для середовища GNOME"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "Сховати головне вікно"
+
+#, fuzzy
+#~ msgid "Requested Information"
+#~ msgstr "_Інформація про обліковий запис"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "Повідомлення стану"
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "%s відключився"
+
+#~ msgid "Available..."
+#~ msgstr "Доступний..."
+
+#~ msgid "Busy..."
+#~ msgstr "Зайнятий..."
+
+#~ msgid "Away..."
+#~ msgstr "Відійшов..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "_Контактна інформація"
+
+#, fuzzy
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossіp - Кімната"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "Зайти в кімнату..."
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "П_орт:"
+
+#, fuzzy
+#~ msgid "Requested information."
+#~ msgstr "Інформація про клієнта"
+
+#, fuzzy
+#~ msgid "Could not open connection"
+#~ msgstr "Не зміг з'єднатися"
+
+#, fuzzy
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "Який сервер Ви хочете використовувати?"
+
+#, fuzzy
+#~ msgid "Connection to the server failed."
+#~ msgstr "<b>З'єднання із сервером</b>"
+
+#~ msgid "Written by:"
+#~ msgstr "Створили:"
+
+#~ msgid "Translated by:"
+#~ msgstr "Перекладено:"
+
+#, fuzzy
+#~ msgid "Account ID"
+#~ msgstr "_Інформація про обліковий запис"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%s %s - Розмова"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/_Журнал розмов"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "Версія:"
+
+#~ msgid "View Lo_g"
+#~ msgstr "Журнал розмов"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossіp - Кімната"
+
+#, fuzzy
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Додати контакт"
+
+#, fuzzy
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "_Контактна інформація"
+
+#, fuzzy
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossіp - Редагування кімнат"
+
+#, fuzzy
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossіp - Кімната"
+
+#, fuzzy
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossіp - Відправлення повідомлення"
+
+#, fuzzy
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Gossіp - Відправлення повідомлення"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Настройки"
+
+#, fuzzy
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossіp - Відправлення повідомлення"
+
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "Яке повідомлення потрібно послати користувачеві %s?"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "Переконаєтеся що дані облікового запису правильні."
+
+#~ msgid "%s wants to be notified of your presence."
+#~ msgstr "%s хоче бути сповіщеним щодо вашої присутності."
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "Відбулося від'єднання від сервера. Відновити з'єднання?"
+
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr ""
+#~ "Переконаєтеся що дані облікового запису коректні. Сервер також може бути "
+#~ "недоступний."
+
+#~ msgid "Edit List..."
+#~ msgstr "Редагувати список..."
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "При спілкуванні з %s відбулася помилка."
+
+#~ msgid "Details:"
+#~ msgstr "Подробиці:"
+
+#~ msgid "An error occurred when chatting in the group chat %s."
+#~ msgstr "При спілкуванні в кімнаті %s відбулася помилка."
+
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "Неможливо ввійти в кімнату %s."
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossіp спробує використати обліковий запис:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Gossіp спробує зареєструвати обліковий запис:"
+
+#~ msgid "From:"
+#~ msgstr "Від:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Gossіp - Отримане повідомлення"
+
+#~ msgid "In reply to:"
+#~ msgstr "У відповідь на:"
+
+#~ msgid "To:"
+#~ msgstr "Кому:"
+
+#~ msgid "_Reply..."
+#~ msgstr "_Відповідь..."
+
+#~ msgid "_Send"
+#~ msgstr "_Відіслати"
+
+#~ msgid "C_onnect"
+#~ msgstr "З'є_днатися"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b><iДоступні кімнати/b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>Інформація про кімнату</b>"
+
+#~ msgid "Gossip - Join Group Chat"
+#~ msgstr "Gossіp - Зайти в кімнату"
+
+#~ msgid "N_ickname:"
+#~ msgstr "_Псевдонім:"
+
+#~ msgid ""
+#~ "Pick a favorite, or enter nickname, server name, and the name of the chat "
+#~ "room to enter."
+#~ msgstr "Виберіть одну з кімнат або введіть псевдонім, сервер і кімнату."
+
+#~ msgid "R_emove"
+#~ msgstr "В_идалити"
+
+#~ msgid "_Add"
+#~ msgstr "_Додати"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>Задані повідомлення стану</b>"
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>Інформація недоступна</i>"
+
+#~ msgid "Choose a Server"
+#~ msgstr "Вибір сервера"
+
+#~ msgid "Choose from list:"
+#~ msgstr "Вибір зі списку:"
+
+#~ msgid "Information about ..."
+#~ msgstr "Інформація про ..."
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "На якому сервері ви маєте обліковий запис?"
+
+#~ msgid "Sound"
+#~ msgstr "Звук"
+
+#~ msgid "Use a different server"
+#~ msgstr "Використовувати інший сервер"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "Яке повідомлення хочете відправити ...?"
diff --git a/trunk/po/vi.po b/trunk/po/vi.po
new file mode 100644
index 000000000..f1a3d0bab
--- /dev/null
+++ b/trunk/po/vi.po
@@ -0,0 +1,1940 @@
+# Vietnamese translation for Gossip.
+# Copyright © 2006 Gnome i18n Project for Vietnamese.
+# Clytie Siddall <clytie@riverland.net.au>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2006-08-28 20:58+0930\n"
+"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
+"Language-Team: Vietnamese <gnomevi-list@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: LocFactoryEditor 1.6fc1\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "Bộ tin nhắn tức khắc"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "Bộ tin nhắn tức khắc"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "Luôn mở cửa sổ riêng cho cuộc trò chuyện mới."
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "Sắc thái cửa sổ trò chuyện"
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+"Danh sách định giới bằng dấu phẩy các ngôn ngữ kiểm tra chính tả cần dùng (v."
+"d. en, fr, ja, vi)."
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "Hiện danh _sách liên lạc"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr "Thư mục mặc định nơi cần chọn ảnh riêng"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr "Bật lên khi liên lạc sẵn sàng"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr "Bật âm thanh khi vắng mặt"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr "Bật âm thanh khi bận"
+
+#: ../data/empathy.schemas.in.h:10
+msgid "Enable spell checker"
+msgstr "Kiểm tra chính tả"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "Ẩn cửa sổ chính"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "Ẩn cửa sổ chính."
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr "Mở mỗi cuộc trò chuyện mới trong cửa sổ riêng."
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr "Hiện ảnh riêng"
+
+#: ../data/empathy.schemas.in.h:15
+msgid "Show hint about closing the main window"
+msgstr "Hiện mẹo về việc đóng cửa sổ chính"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "Hiện liên lạc ngoại tuyến"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr "Ngôn ngữ kiểm tra chính tả"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr "Thư mục cuối cùng nơi đã chọn ảnh riêng."
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "Sắc thái được dùng để hiển thị cuộc đối thoại trong cửa sổ trò chuyện."
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "Dùng biểu tượng xúc cảm"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "Dùng âm thanh thông báo"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr "Dùng sắc thái cho phòng trò chuyện"
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr "Có nên kiểm tra đoạn gõ so với những ngôn ngữ đã chọn hay không."
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr ""
+"Bật/tắt chuyển đổi ký tự miêu tả mặt cười thành biểu tượng xúc cảm trong đối "
+"thoại."
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "Bật/tắt phát âm thanh khi mới nhận tin nhẳn."
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "Bật/tắt phát âm thanh khi vắng mặt."
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "Bật/tắt phát âm thanh khi bận."
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "Có nên bật lên khi liên lạc mới sẵn sàng hay không."
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr ""
+"Có nên hiển thị ảnh riêng cho mỗi liên lạc nằm trong danh sách liên lạc và "
+"cửa sổ trò chuyện hay không."
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr ""
+"Bật/tắt hiển thị các liên lác đang ngoại tuyến trong danh sách liên lạc."
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+"Có nên hiển thị hộp thoại thông điệp về việc đóng cửa sổ chính bằng cái nút "
+"« x » trên thanh tựa hay không."
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "Có nên dùng sắc thái cho các phòng trò chuyện hay không."
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr "Có nên dùng sắc thái cho các phòng trò chuyện hay không."
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "Ngoại tuyến"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "Sẵn sàng"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "Bận"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "Vắng mặt"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "_Hiện các liên lạc"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "Nhóm"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+msgid "Contact"
+msgstr "Liên lạc"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "Hiện danh _sách liên lạc"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+msgid "Context"
+msgstr "Ngữ cảnh"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "Vào Ư_a thích"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr "Vào _Mới..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+#, fuzzy
+msgid "Manage Favorites..."
+msgstr "Vào Ư_a thích"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "Hiện các liên lạc ng_oại tuyến"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+msgid "_About"
+msgstr "_Giới thiệu"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "_Tài khoản"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "Thê_m liên lạc..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "Trò _chuyện"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "Mục lụ_c"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "_Edit"
+msgstr "_Sửa"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr "Trợ _giúp"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "Ti_n nhẳn mới..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "_Thông tin cá nhân"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "Tù_y thích"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr "T_hoát"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr "_Phóng"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr "_Xem đối thoại trước"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "Trạng thái"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "Hiện danh _sách liên lạc"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+#, fuzzy
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Gossip là phần mềm tự do : bạn có thể phân phái lại và/hay sửa đổi nó với "
+"điều kiện của Quyền Công Chung GNU (GPL), như do Tổ chức Phần mềm Tự do xuất "
+"bản, hoặc phiên bản 2 của Quyền này, hoặc (tùy chọn) bất kỳ phiên bản mới "
+"hơn."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+#, fuzzy
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"Chúng tôi phân phối Gossip vì mong muốn nó có ích, nhưng KHÔNG bảo đảm gì "
+"cả, dù khả năng bán hay khả năng làm việc dứt khoát. Xem Quyền Công Chung "
+"GNU để tìm chi tiết."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"Bạn đã nhận một bản sao của Giấy Phép Công Cộng GNU cùng với chương trình "
+"này; nếu không, hãy viết thư cho Tổ Chức Phần Mềm Tự Do,\n"
+"Free Software Foundation, Inc.,\n"
+" 51 Franklin Street, Fifth Floor,\n"
+"Boston, MA 02110-1301, USA."
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "Ứng dụng khách tin nhắn tức khắc cho Gnome"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+msgid "translator-credits"
+msgstr "Nhóm Việt hóa Gnome <gnomevi-list@lists.sourceforge.net>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "Sẵn sàng"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+#, fuzzy
+msgid "Enable"
+msgstr "Ví dụ"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>Tài khoản</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>Tài khoản</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr "Tài khoản"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"Bạn sắp gỡ bỏ tài khoản %s của mình !\n"
+"Bạn có chắc muốn tiếp tục không?"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"Cuộc đối thoại nào hay phòng trò chuyện nào tương ứng sẽ KHÔNG bị gỡ bỏ nếu "
+"bạn chọn tiếp tục.\n"
+"\n"
+"Như thế thì chúng sẽ vẫn còn sẵn sàng nếu bạn chọn thêm lại tài khoản này "
+"vào lúc sau."
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+msgid "<b>Account</b>"
+msgstr "<b>Tài khoản</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>Tài khoản</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>Trạng thái</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "Trò chuyện !"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+# Name: don't translate / Tên: đừng dịch
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+msgid "_Name:"
+msgstr "Tê_n:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "_Chủ đề:"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">Ví dụ : người_dùng@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr "I_D đăng nhập:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+msgid "Pass_word:"
+msgstr "_Mật khẩu :"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr "Tài ng_uyên:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "Dùng _mật mã (SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+msgid "_Port:"
+msgstr "_Cổng:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "Máy phục _vụ :"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+msgid "jabber account settings"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "Kết nối bị ngắt"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr "Chèn ảnh cười"
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr "Kiểm tra _chính tả từ..."
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "Được kết nối"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "X_oá"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "Trò chuyện"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr "Thông tin _liên lạc"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+msgid "Cu_t"
+msgstr "Cắ_t"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "_Mời"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "Chèn ảnh _cười"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "Thông điệp mời:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr "Mời"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "Chuyển thanh t_rái"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "Chuyển thanh _phải"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr "Chọn người nào bạn muốn mời:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "Bạn đã được mời tham gia một hội thảo trò chuyện."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "Thêm vào Ư_a thích"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr "Đón_g"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "Đối th_oại"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr "_Chép"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "Gỡ _ra thanh"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "Tha_nh kế"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr "_Dán"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "Thanh t_rước"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr "_Hiện các liên lạc"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "_Thanh"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "_Chép địa chỉ liên kết"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "_Mở liên kết"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%A %d %B %Y"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "Tin nhẳn mới"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+msgid "Chat Room"
+msgstr "Phòng trò chuyện"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "Đối th_oại"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "Đang gõ tin nhẳn."
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+msgid "_Contact"
+msgstr "Liên lạ_c"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+msgid "_Group"
+msgstr "_Nhóm"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "Chat with contact"
+msgstr "Trò chuyện với liên lạc"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "Infor_mation"
+msgstr "_Thông tin"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+msgid "View contact information"
+msgstr "Xem thông tin liên lạc"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Re_name"
+msgstr "Thay tê_n"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+msgid "Rename"
+msgstr "Thay tên"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "Edit the groups and name for this contact"
+msgstr "Hiệu chỉnh những nhóm và tên cho liên lạc này"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "Gỡ _bỏ"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "Remove contact"
+msgstr "Gỡ bỏ liên lạc"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "_Invite to Chat Room"
+msgstr "Mờ_i vào phòng trò chuyện"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr "Mời vào một phòng trò chuyện hiện thời được mở"
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr "_Gởi tập tin..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "Send a file"
+msgstr "Gởi một tập tin"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "View previous conversations with this contact"
+msgstr "Xem cuộc đối thoại trước đây với liên lạc này"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr "Ngôn ngữ"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>Diện mạo</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>Âm thanh</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>Ứng xử</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "<b>Kết nối</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr "<b>Ngôn ngữ</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+msgid "<b>Options</b>"
+msgstr "<b>Tùy chọn</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>Hiển thị</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+"<small>Danh sách ngôn ngữ phản ánh chỉ mỗi ngôn ngữ cho đó bạn đã cài đặt từ "
+"điển.</small>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+"Ảnh riêng là ảnh được người dùng chọn, được hiển thị trong danh sách liên lạc"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "_Sắc thái trò chuyện:"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "Thông bá_o khi liên lạc mới trực tuyến"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "Bật âm th_anh khi vắng mặt"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "Bật âm thanh khi _bận"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr "Chung"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+msgid "Notifications"
+msgstr "Thông báo"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+msgid "Preferences"
+msgstr "Tùy thích"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "Hiện ảnh _riêng"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "Hiện _mặt cười là ảnh"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "Hiện danh _sách liên lạc"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "Kiểm tra chính tả"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr "_Kiểm tra chính tả"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "Mở cuộc trò chuyện mới tr_ong cửa sổ riêng"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "_Phát âm thanh khi mới nhận tin nhẳn"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+msgid "_Use for chat rooms"
+msgstr "Dùng cho phòng trò ch_uyện"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr "Tin nhẳn tự chọn..."
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+msgid "Clear List..."
+msgstr "Xoá danh sách..."
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+msgid "Are you sure you want to clear the list?"
+msgstr "Bạn có chắc muốn xoá danh sách này không?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+"Việc này sẽ gỡ bỏ thông điệp riêng nào bạn đã thêm vào danh sách các thông "
+"điệp trạng thái định sẵn."
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr "Xoá danh sách"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "Gõ thông điệp trạng thái:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+msgid "Status Message Presets"
+msgstr "Định sẵn thông điệp trạng thái"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+msgid "_Add to status message list"
+msgstr "Thêm vào d_anh sách thông điệp trạng thái"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s mới ngoại tuyến"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr "%s mới trực tuyến"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr "Cổ điển"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr "Đơn giản"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+msgid "Clean"
+msgstr "Làm sạch"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr "Xanh dương"
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "Đừng kết nối khi khởi chạy"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "- Bộ tin nhắn tức khắc Gossip"
+
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Bộ tin nhắn tức khắc Gossip"
+
+#~ msgid "Normal"
+#~ msgstr "Chuẩn"
+
+#~ msgid "Joining"
+#~ msgstr "Tham gia"
+
+#~ msgid "Active"
+#~ msgstr "Hoạt động"
+
+#~ msgid "Inactive"
+#~ msgstr "Bị động"
+
+#~ msgid "Unknown"
+#~ msgstr "Không rõ"
+
+#~ msgid "Error"
+#~ msgstr "Lỗi"
+
+#, fuzzy
+#~ msgid "No role"
+#~ msgstr "Chuẩn"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "Thông báo"
+
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "Bạn đã chọn một tên hiệu đang được dùng."
+
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr "Bạn đang cố tham gia một phòng trò chuyện cần thiết mật khẩu."
+
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr "Máy phục vụ hội thảo ở xa chưa đáp ứng sau một thời gian hợp lý."
+
+#~ msgid "The conference server you tried to join could not be found."
+#~ msgstr "Bạn đã cố tham gia một máy phục vụ hội thảo không thể được tìm."
+
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "Gặp lỗi lạ: hãy kiểm tra xem bạn đã gõ đúng chi tiết mình."
+
+#, fuzzy
+#~ msgid "Joining the chatroom was canceled."
+#~ msgstr "Vào phòng trò chuyện"
+
+#~ msgid "Unavailable"
+#~ msgstr "Không sẵn sàng"
+
+#~ msgid "An unknown error occurred."
+#~ msgstr "Gặp lỗi không rõ."
+
+#~ msgid "Connection refused."
+#~ msgstr "Kết nối bị từ chối."
+
+#~ msgid "Server address could not be resolved."
+#~ msgstr "Không thể quyết định địa chỉ của máy phục vụ."
+
+#~ msgid "Connection timed out."
+#~ msgstr "Kết nối đã quá giờ."
+
+#~ msgid "Authentication failed."
+#~ msgstr "Việc xác thực bị lỗi."
+
+#~ msgid "The username you are trying already exists."
+#~ msgstr "Bạn đang thử ra một tên người dùng đã có."
+
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "Bạn đang thử ra một tên người dùng không hợp lệ."
+
+#~ msgid "This feature is unavailable."
+#~ msgstr "Không có tính năng này."
+
+#~ msgid "This feature is unauthorized."
+#~ msgstr "Tính năng này không được xác thực."
+
+#~ msgid "A specific protocol error occurred that was unexpected."
+#~ msgstr "Gặp một lỗi giao thức dứt khoát mà bất ngờ."
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Tài khoản mới"
+
+#~ msgid "Home"
+#~ msgstr "Nhà"
+
+#~ msgid "Couldn't send message!"
+#~ msgstr "Không thể gởi tin nhẳn."
+
+#~ msgid "Connection could not be opened"
+#~ msgstr "Không thể mở kết nối."
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "Không có tính năng này."
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "Đang ký"
+
+#, fuzzy
+#~ msgid "This feature is not implemented"
+#~ msgstr "Tính năng này không được xác thực."
+
+#~ msgid "Stop"
+#~ msgstr "Dừng"
+
+#~ msgid "Disconnect"
+#~ msgstr "Ngắt kết nối"
+
+#~ msgid "Connect"
+#~ msgstr "Kết nối"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "Việc đăng ký thiết lập tài khoản mới của bạn bị lỗi."
+
+#, fuzzy
+#~ msgid "You should now be able to connect to your new account."
+#~ msgstr ""
+#~ "Bạn không thể sử dụng tùy chọn « --no-connect » (không kết nối) cùng với "
+#~ "tùy chọn « --account » (tài khoản)"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "Việc đăng ký thiết lập tài khoản mới của bạn bị lỗi."
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "Hãy gõ mật khẩu tài khoản:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "Hãy gõ mật khẩu tài khoản:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Hãy gõ tên mới cho nhóm này:\n"
+#~ "%s"
+
+#~ msgid "No information is available for this contact."
+#~ msgstr "Không có thông tin công bố về liên lạc này."
+
+#~ msgid "Information requested, please wait..."
+#~ msgstr "Thông tin đã được yêu cầu, hãy đợi..."
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "Tôi muốn thêm bạn vào danh sách liên lạc mình."
+
+#~ msgid "To summarize:"
+#~ msgstr "Tóm tắt:"
+
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "%d tin nhẳn mới"
+
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "%d yêu cầu đăng ký"
+
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "%d yêu cầu truyền tập tin"
+
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "%d thông điệp máy phục vụ"
+
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "%d lỗi"
+
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "Nếu bạn thoát, các thông tin chưa đọc sẽ bị mất hoàn toàn."
+
+#~ msgid "Gossip is still running, it is just hidden."
+#~ msgstr "Trình Gossip vẫn còn chạy, chỉ ẩn."
+
+#~ msgid "Click on the notification area icon to show Gossip."
+#~ msgstr "Nhấn vào vùng thông báo để hiển thị trình Gossip."
+
+#~ msgid "You were about to quit!"
+#~ msgstr "Bạn đã sắp thoát !"
+
+#~ msgid ""
+#~ "Since no system or notification tray has been found, this action would "
+#~ "normally quit Gossip.\n"
+#~ "\n"
+#~ "This is just a reminder, from now on, Gossip will quit when performing "
+#~ "this action unless you uncheck the option below."
+#~ msgstr ""
+#~ "Vì không tìm thấy khay hệ thống hay thông báo, hành động này thường thoát "
+#~ "khỏi trình Gossip.\n"
+#~ "\n"
+#~ "Đây chỉ là lời nhắc nhở, kể từ bây giờ, trình Gossip sẽ thoát khi thực "
+#~ "hiện hành động này, nếu bạn không bỏ chọn tùy chọn bên dưới."
+
+#~ msgid "Edit Account _Details"
+#~ msgstr "Sử_a chi tiết tài khoản"
+
+#~ msgid "Click to enlarge"
+#~ msgstr "Nhấn để phóng to"
+
+#~ msgid "Word"
+#~ msgstr "Từ"
+
+#~ msgid "Select who would you like to invite to room:"
+#~ msgstr "Chọn người nào bạn muốn mời vào phòng:"
+
+#~ msgid "Select which room you would like to invite:"
+#~ msgstr "Chọn phòng vào đó bạn muốn mời người:"
+
+#~ msgid "New message from %s"
+#~ msgstr "Tin nhẳn mới từ %s"
+
+#~ msgid "Your invitation has been declined"
+#~ msgstr "Lời mời của bạn đã bị từ chối"
+
+#~ msgid "Accept"
+#~ msgstr "Chấp nhận"
+
+#~ msgid "Decline"
+#~ msgstr "Từ chối"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "Tên:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "_Phóng"
+
+#~ msgid "Auto Connect"
+#~ msgstr "Kết nối tự động"
+
+#~ msgid "Information requested..."
+#~ msgstr "Thông tin được yêu cầu..."
+
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr "Bạn có muốn gỡ bỏ liên lạc này ra bản liệt kê không?"
+
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "Hãy gõ tên mới cho nhóm này:\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "Chọn"
+
+#~ msgid "Unsorted"
+#~ msgstr "Chưa sắp xếp"
+
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server."
+#~ msgstr ""
+#~ "Đặt tên hiệu bạn muốn dùng cho :\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "Bạn có khả năng lấy thông tin liên lạc từ máy phục vụ."
+
+#~ msgid "New file transfer request from %s"
+#~ msgstr "Yêu cầu truyền tập tin mới từ %s"
+
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "Không phải cả hai người hỗ trợ việc truyền tập tin."
+
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "Người khác đã từ chối truyền tập tin."
+
+#~ msgid "The other user decided not to continue."
+#~ msgstr "Người dùng khác đã quyết định sẽ không tiếp tục."
+
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "Gặp lỗi lạ trong khi truyền tập tin."
+
+#~ msgid "%s would like to send you a file."
+#~ msgstr "%s muốn gởi tập tin cho bạn."
+
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "Người nào muốn gởi tập tin cho bạn."
+
+#~ msgid "Select a file"
+#~ msgstr "Chọn tập tin"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "Đang kết nối..."
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "Dừng kết nối"
+
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "Đã mời %s tham gia hội thảo trò chuyện này."
+
+#, fuzzy
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "%s đã đặt chủ đề"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "Cho liên lạc này, bạn có muốn sử dụng tên hiệu nào?"
+
+#, fuzzy
+#~ msgid "%s has joined the room"
+#~ msgstr "%s đã đặt chủ đề"
+
+#, fuzzy
+#~ msgid "%s has left the room"
+#~ msgstr "%s đã đặt chủ đề"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "_Chủ đề:"
+
+#~ msgid "Account"
+#~ msgstr "Tài khoản"
+
+#~ msgid "Conversation With"
+#~ msgstr "Đối thoại với"
+
+#~ msgid "Date"
+#~ msgstr "Ngày"
+
+#~ msgid "Allow multiple instances of the application to run at the same time"
+#~ msgstr "Cho phép nhiều bản sao của ứng dụng này có chạy đồng thời"
+
+#~ msgid "List the available accounts"
+#~ msgstr "Liệt kê các tài khoản sẵn sàng"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "Tài khoản nào cần kết nối khi khởi chạy"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "TÊN TÀI KHOẢN"
+
+#~ msgid "You can not use --no-connect together with --account"
+#~ msgstr ""
+#~ "Bạn không thể sử dụng tùy chọn « --no-connect » (không kết nối) cùng với "
+#~ "tùy chọn « --account » (tài khoản)"
+
+#~ msgid "No accounts available."
+#~ msgstr "Không có tài khoản sẵn sàng."
+
+#~ msgid "Available accounts:"
+#~ msgstr "Các tài khoản sẵn sàng:"
+
+#~ msgid "[default]"
+#~ msgstr "[mặc định]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "Không có tài khoản tên « %s »."
+
+#~ msgid "Join"
+#~ msgstr "Tham gia"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "Ngày"
+
+#~ msgid "Chat Rooms"
+#~ msgstr "Phòng trò chuyện"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "Thông tin đã được yêu cầu, hãy đợi..."
+
+#~ msgid "Default"
+#~ msgstr "Mặc định"
+
+#~ msgid "Chat!"
+#~ msgstr "Trò chuyện !"
+
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s muốn được thêm vào danh sách liên lạc của bạn."
+
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "Người nào muốn được thêm vào danh sách liên lạc của bạn."
+
+#~ msgid "Subscription request"
+#~ msgstr "Yêu cầu đăng ký"
+
+#~ msgid "Show"
+#~ msgstr "Hiện"
+
+#~ msgid "Contact Information"
+#~ msgstr "Thông tin liên lạc"
+
+#~ msgid "Subject: %s"
+#~ msgstr "Chủ đề : %s"
+
+#~ msgid "Suggestions for the word"
+#~ msgstr "Đề nghị từ"
+
+#~ msgid "New subscription request from %s"
+#~ msgstr "Yêu cầu đăng ký mới từ %s"
+
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "Bạn có muốn thêm họ vào danh sách liên lạc không?"
+
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "Bạn có muốn thêm %s vào danh sách liên lạc không?"
+
+#~ msgid "Please enter your %s account password"
+#~ msgstr "Hãy gõ mật khẩu của bạn cho tài khoản %s"
+
+#, fuzzy
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "Đang đăng nhập với : %s"
+
+#~ msgid "Remember Password?"
+#~ msgstr "Nhớ mật khẩu ?"
+
+#~ msgid "Do not show this again"
+#~ msgstr "Đừng hiện câu này lần nữa"
+
+#~ msgid "Could not display the help contents."
+#~ msgstr "Không thể hiển thị nội dung trợ giúp."
+
+#~ msgid "Select Your Avatar Image"
+#~ msgstr "Chọn ảnh riêng"
+
+#~ msgid "No Image"
+#~ msgstr "Không có ảnh"
+
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "Máy phục vụ có vẻ không phải đáp ứng."
+
+#~ msgid "Try again later."
+#~ msgstr "Thử lại sau."
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "Trò chuyện"
+
+#~ msgid "Contact goes offline"
+#~ msgstr "Liên lạc mới ngoại tuyến"
+
+#~ msgid "Contact goes online"
+#~ msgstr "Liên lạc mới trực tuyến"
+
+#~ msgid "Contact ID:"
+#~ msgstr "ID liên lạc:"
+
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "Bạn có muốn chấp nhận tập tin này không?"
+
+#~ msgid "File Transfer Request"
+#~ msgstr "Yêu cầu truyền tập tin"
+
+#~ msgid "File name:"
+#~ msgstr "Tên tập tin:"
+
+#~ msgid "File size:"
+#~ msgstr "Cỡ tập tin:"
+
+#~ msgid "Not supported yet"
+#~ msgstr "Chưa hỗ trợ"
+
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "Người này muốn gởi cho bạn tập tin này:"
+
+#~ msgid "Web site:"
+#~ msgstr "Chỗ Mạng:"
+
+#~ msgid "_Accept"
+#~ msgstr "Chấ_p nhận"
+
+#~ msgid "_Deny"
+#~ msgstr "_Từ chối"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>Nhóm</b>"
+
+#~ msgid "Account:"
+#~ msgstr "Tài khoản:"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Sửa đổi phòng trò chuyện"
+
+#~ msgid "Group Chat"
+#~ msgstr "Trò chuyện nhóm"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "Vào _Mới..."
+
+#~ msgid "Join room on start_up"
+#~ msgstr "Vào phòng khi khởi chạ_y"
+
+#~ msgid "Join this chat room when Gossip starts and you are connected"
+#~ msgstr ""
+#~ "Vào phòng trò chuyện này khi trình Gossip khởi chạy và bạn đã kết nối"
+
+#, fuzzy
+#~ msgid "Manage Favorite Rooms"
+#~ msgstr "Quản lý phòng trò chuyện"
+
+#~ msgid "N_ame:"
+#~ msgstr "_Tên:"
+
+#~ msgid "S_erver:"
+#~ msgstr "Máy _phục vụ :"
+
+#~ msgid "_Nickname:"
+#~ msgstr "Tê_n hiệu :"
+
+#~ msgid "_Room:"
+#~ msgstr "_Phóng:"
+
+#~ msgid "-"
+#~ msgstr "—"
+
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>Giới thiệu</b>"
+
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "<b>Thông tin ứng dụng khách</b>"
+
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>Nhóm</b>"
+
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>Tên</b>"
+
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>Chi tiết cá nhân</b>"
+
+#~ msgid "<b>Status</b>"
+#~ msgstr "<b>Trạng thái</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>Tùy chọn</b>"
+
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr ""
+#~ "<span size=\"smaller\">Ví dụ : Văn Minh hoặc người_dùng@máy_phục_vụ.org</"
+#~ "span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Tài khoản:"
+
+#~ msgid "Add Contact"
+#~ msgstr "Thêm liên lạc"
+
+#~ msgid "Avatar:"
+#~ msgstr "Ảnh riêng:"
+
+#~ msgid "Ch_at"
+#~ msgstr "Trò ch_uyện"
+
+#~ msgid "Client:"
+#~ msgstr "Ứng dụng khách:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "Liên lạc"
+
+#~ msgid "Connect on S_tartup"
+#~ msgstr "Kế_t nối khi khởi chạy"
+
+#~ msgid "Contacts"
+#~ msgstr "Liên lạc"
+
+#~ msgid "Country:"
+#~ msgstr "Quốc gia:"
+
+#~ msgid "Decide _Later"
+#~ msgstr "Quyết định _sau này"
+
+#~ msgid "Edit Contact"
+#~ msgstr "Sửa liên lạc"
+
+#~ msgid "Edit Groups"
+#~ msgstr "Sửa nhóm"
+
+#~ msgid "Email:"
+#~ msgstr "Thư điện tử :"
+
+#~ msgid "ID:"
+#~ msgstr "ID:"
+
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr ""
+#~ "Nếu bạn chọn quyết định sau này, bạn sẽ được nhắc lại lần kế tiếp đăng "
+#~ "nhập."
+
+#~ msgid "Name:"
+#~ msgstr "Tên:"
+
+#~ msgid "OS:"
+#~ msgstr "HĐH:"
+
+#~ msgid "Personal Details"
+#~ msgstr "Chi tiết cá nhân"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "Đang ký"
+
+#~ msgid "Search"
+#~ msgstr "Tìm kiếm"
+
+#~ msgid ""
+#~ "Select the groups you want this contact to appear in, you can select more "
+#~ "than one group or no groups."
+#~ msgstr ""
+#~ "Chọn những nhóm nơi bạn muốn liên lạc này xuất hiện; bạn có khả năng chọn "
+#~ "một hay nhiều nhóm, hay không chọn nhóm (≥0 nhóm)."
+
+#, fuzzy
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>foo@bar.baz</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Đặt tên hiệu bạn muốn dùng cho :\n"
+#~ "<b>%s</b>\n"
+#~ "\n"
+#~ "Bạn có khả năng lấy thông tin liên lạc từ máy phục vụ."
+
+#~ msgid "Spell Checker"
+#~ msgstr "Kiểm tra chính tả"
+
+#~ msgid "Subscription Request"
+#~ msgstr "Yêu cầu đăng ký"
+
+#~ msgid "Suggestions for the word:"
+#~ msgstr "Đề nghị từ :"
+
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "Điều này lọc danh sách liên lạc bên dưới. Bạn có khả năng sử dụng phần "
+#~ "tên hoặc ID của liên lạc; thí dụ, « jabber.org » sẽ liệt kê mọi người sử "
+#~ "dụng máy phục vụ đó."
+
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr ""
+#~ "Điều này là tên sẽ được dùng trên bản liệt kê của bạn cho liên lạc này"
+
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "Tên này sẽ được dùng để nhận diện bạn trong cửa sổ trò chuyện"
+
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr ""
+#~ "Tên này sẽ được dùng để nhận diện bạn khi liên lạc mới tra tìm chi tiết "
+#~ "về bạn"
+
+#~ msgid "Use default name here from the contact's VCard."
+#~ msgstr "Ở đây dùng tên mặc định từ vCard của liên lạc."
+
+#~ msgid "Use system pro_xy"
+#~ msgstr "Dùng ủ_y nhiệm hệ thống"
+
+#~ msgid "Version:"
+#~ msgstr "Phiên bản:"
+
+#~ msgid "View Previous Conversations"
+#~ msgstr "Xem đối thoại trước"
+
+#~ msgid "Which account do you want to use?"
+#~ msgstr "Bạn có muốn sử dụng tài khoản nào?"
+
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "Bạn chưa đăng ký với liên lạc này."
+
+#~ msgid "_Connect"
+#~ msgstr "_Kết nối"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "Mô tả:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "_Ngắt kết nối"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "Thư điện tử :"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr ""
+#~ "Hãy gõ bên dưới tên hoặc ID liên lạc của người với mà bạn muốn trò chuyện:"
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "_Cổng:"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "Tê_n:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "_Nhóm"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "Tê_n hiệu :"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "_Mật khẩu :"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "Tin nhẳn mới"
+
+#~ msgid "_Retrieve"
+#~ msgstr "_Lấy"
+
+#~ msgid "_Subscribe"
+#~ msgstr "Đăng _ký"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "Chỗ Mạng:"
+
+#, fuzzy
+#~ msgid "irc account settings"
+#~ msgstr "Sử_a chi tiết tài khoản"
+
+#~ msgid "Edit"
+#~ msgstr "Hiệu chỉnh"
+
+#~ msgid "Perhaps you are trying to connect to the wrong port?"
+#~ msgstr "Có lẽ bạn đang cố kết nối đến cổng không đúng?"
+
+#~ msgid "Perhaps the service is not currently running?"
+#~ msgstr "Có lẽ dịch vụ không đang chạy?"
+
+#~ msgid "Check your connection details."
+#~ msgstr "Hãy kiểm tra xem chi tiết kết nối là đúng."
+
+#~ msgid "Perhaps the server is not running this service."
+#~ msgstr "Có lẽ máy phục vụ không đang chạy dịch vụ này."
+
+#~ msgid "Check your username and password are correct."
+#~ msgstr "Hãy kiểm tra xem đã gõ tên người dùng và mật khẩu đúng."
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s sẽ được thêm vào danh sách liên lạc của bạn."
+
+#~ msgid "%s ID of new contact:"
+#~ msgstr "%s ID của liên lạc mới :"
+
+#~ msgid "Example: %s"
+#~ msgstr "Ví dụ : %s"
+
+#~ msgid "Show accounts and pending connections"
+#~ msgstr "Hiện các tài khoản và kết nối bị hoãn"
+
+#~ msgid "You have no Instant Messaging accounts configured!"
+#~ msgstr "Bạn chưa cấu hình tài khoản Tin nhắn tức khắc."
+
+#~ msgid ""
+#~ "Next you will be presented with the Account Information dialog to set "
+#~ "your details up."
+#~ msgstr ""
+#~ "Bước sau, bạn có thể thiết lập chi tiết mình trong hộp thoại Thông tin "
+#~ "Tài khoản."
+
+#~ msgid "Favourite"
+#~ msgstr "Ưa thích"
+
+#~ msgid "Registering account"
+#~ msgstr "Đang đăng ký tài khoản..."
+
+#~ msgid "Add to _favourites"
+#~ msgstr "Thêm vào ư_a thích"
+
+#~ msgid ""
+#~ "Customize your own nickname, the server and chatroom which you wish to "
+#~ "join."
+#~ msgstr ""
+#~ "Tùy chỉnh tên hiệu mình, máy phục vụ và phòng trò chuyện bạn muốn vào."
+
+#~ msgid "Edit your chat room details:"
+#~ msgstr "Hiệu chỉnh chi tiết phòng trò chuyện:"
+
+#~ msgid "Na_me:"
+#~ msgstr "Tê_n:"
+
+#~ msgid "New Chat Room"
+#~ msgstr "Phòng trò chuyện mới"
+
+#~ msgid ""
+#~ "Pick a saved chat room from the presets available below and click Join to "
+#~ "start chatting."
+#~ msgstr ""
+#~ "Chọn một phòng trò chuyện đã lưu trong danh sách định sẵn bên dưới, rồi "
+#~ "nhắp vào nút « Tham gia » để bắt đầu nói chuyện."
+
+#~ msgid "Save _this chat room"
+#~ msgstr "Lưu phòng _trò chuyện này"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>Thông tin được yêu cầu, hãy đợi...</b>"
+
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">Ví dụ</span>"
+
+#~ msgid "Account Name"
+#~ msgstr "Tên tài khoản"
+
+#~ msgid "Add a contact"
+#~ msgstr "Thêm liên lạc"
+
+#~ msgid "Connection Details"
+#~ msgstr "Chi tiết kết nối"
+
+#~ msgid "Contact information"
+#~ msgstr "Thông tin liên lạc"
+
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "Bạn đã thiết lập tài khoản trên máy phục vụ chưa?"
+
+#~ msgid "Enter a name for this account"
+#~ msgstr "Gõ tên cho tài khoản này"
+
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr "Hãy gõ số hiệu cổng dùng khi kết nối tài khoản này"
+
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr "Hãy gõ máy phục vụ dùng khi kết nối tài khoản này"
+
+#~ msgid "Enter the user's contact ID:"
+#~ msgstr "Hãy gõ ID liên lạc của người dùng:"
+
+#~ msgid "Enter your real name here"
+#~ msgstr "Hãy gõ vào đây tên thật của bạn"
+
+#~ msgid "Finished"
+#~ msgstr "Đã xong"
+
+#~ msgid "For increased security, enable this option"
+#~ msgstr "Bật tùy chọn này để bảo mật hơn"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip là một ứng dụng khách hiện thời cho hệ thống Tin nhắn tức khắc "
+#~ "Jabber.\n"
+#~ "\n"
+#~ "Trợ lý này sẽ giúp đỡ bạn cấu hình trình Gossip và kết nối bạn đến mấy "
+#~ "phục vụ Jabber ưa thích.\n"
+#~ "\n"
+#~ "Để bắt đầu tiến trình cấu hình, đơn giản hãy nhắp vào nút « Tiếp »."
+
+#~ msgid "Group:"
+#~ msgstr "Nhóm:"
+
+#~ msgid ""
+#~ "If you have another machine on your network which 'proxies' the "
+#~ "connection to the internet and you want to use it, enable this option"
+#~ msgstr ""
+#~ "Nếu bạn có máy khác nằm trên mạng mà làm « ủy nhiệm » kết nối đến Mạng và "
+#~ "bạn muốn sử dụng nó, hãy bật tùy chọn này"
+
+#~ msgid ""
+#~ "If you need to set specific connection details, like a different server "
+#~ "or port, you can configure that here:"
+#~ msgstr ""
+#~ "Nếu bạn cần phải đặt một số chi tiết kết nối riêng, lấy thí dụ, máy phục "
+#~ "vụ hay cổng khác, có thể cấu hình nó ở đây."
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "Bạn cần yêu cầu nhận thông báo sự có mặt của người dùng. Người dùng này "
+#~ "sẽ được hiển thị « Ngoại tuyến » trong danh sách liên lạc của bạn, cho "
+#~ "đến khi yêu cầu thông báo đã được chấp nhận."
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "Bạn có muốn để liên lạc này vào nhóm nào?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "ID Jabber:"
+
+#~ msgid ""
+#~ "Leave this blank if you don't want your password stored on a public "
+#~ "machine. If you decide to do this, you will be prompted each time you "
+#~ "connect for a password"
+#~ msgstr ""
+#~ "Bỏ rỗng nếu bạn không muốn cho phép mật khẩu của mình được cất giữ trên "
+#~ "máy công. Tuy nhiên, bạn sẽ được nhắc với mật khẩu mỗi lần kết nối"
+
+#~ msgid "Nickname:"
+#~ msgstr "Tên hiệu :"
+
+#~ msgid "Port:"
+#~ msgstr "Cổng:"
+
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr "Ấn nút « Đăng ký » để yêu cầu nhận thông báo trạng thái của họ"
+
+#~ msgid "Registering Account"
+#~ msgstr "Đăng ký tài khoản"
+
+#~ msgid "Resource:"
+#~ msgstr "Tài nguyên:"
+
+#~ msgid "Sending request"
+#~ msgstr "Đang gởi yêu cầu..."
+
+#~ msgid "Server:"
+#~ msgstr "Máy phục vụ :"
+
+#~ msgid ""
+#~ "Set the alias you want to use for:\n"
+#~ "<b>martyn@imendio.com</b>\n"
+#~ "\n"
+#~ "You can retrieve contact information from the server. "
+#~ msgstr ""
+#~ "Đặt tên hiệu bạn muốn dùng cho:\n"
+#~ "<b>martyn@imendio.com</b>\n"
+#~ "\n"
+#~ "Bạn có khả năng lấy thông tin liên lạc từ máy phục vụ. "
+
+#~ msgid "Web Site:"
+#~ msgstr "Chỗ Mạng:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "Chúc mừng bạn dùng Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "Liên lạc này có sử dụng hệ thống tin nhắn tức khắc nào?"
+
+#~ msgid "What is your name?"
+#~ msgstr "Bạn tên nào?"
+
+#~ msgid ""
+#~ "What name do you want to use to identify this account?\n"
+#~ "\n"
+#~ "This name could be something associated with the service provider, for "
+#~ "example, <b>Google</b>."
+#~ msgstr ""
+#~ "Để nhận diện tài khoản này, bạn có muốn sử dụng tên nào?\n"
+#~ "\n"
+#~ "Lấy thí dụ, có thể chọn một tên liên quan đến bộ cung cấp dịch vụ, như "
+#~ "<b>Google</b>."
+
+#~ msgid "What password do you want to use?"
+#~ msgstr "Bạn có muốn sử dụng mật khẩu nào?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "Bạn có sử dụng tên người dùng nào?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "Bạn có muốn sử dụng tên người dùng nào?"
+
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "Bạn có muốn thêm liên lạc này vào tài khoản nào?"
+
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Bạn có thể thay đổi thiết lập tài khoản sau này, bằng cách chọn mục trình "
+#~ "đơn Hiệu chỉnh → Tài khoản."
+
+#~ msgid ""
+#~ "You need to set a name for the connection, for example, <b>Home</b> or "
+#~ "<b>Laptop</b>."
+#~ msgstr ""
+#~ "Bạn cần đặt tên riêng cho sự kết nối này, lấy thí dụ <b>Ở nhà</b> hoặc "
+#~ "<b>Máy tính xách tay</b>."
+
+#~ msgid "Your Account"
+#~ msgstr "Tài khoản của bạn"
+
+#~ msgid "Your Identity"
+#~ msgstr "Thực thể của bạn"
+
+#~ msgid "Your new account has now been set up."
+#~ msgstr "Tài khoản mới của bạn đã được thiết lập."
+
+#~ msgid "_Forget"
+#~ msgstr "_Quên"
+
+#~ msgid "_Group Chat"
+#~ msgstr "T_rò chuyện nhóm"
+
+#~ msgid "_No"
+#~ msgstr "Khô_ng"
+
+#~ msgid "_Search..."
+#~ msgstr "Tìm _kiếm..."
+
+#~ msgid "_Yes"
+#~ msgstr "_Có"
diff --git a/trunk/po/zh_CN.po b/trunk/po/zh_CN.po
new file mode 100644
index 000000000..775ce629c
--- /dev/null
+++ b/trunk/po/zh_CN.po
@@ -0,0 +1,1961 @@
+# traditional Chinese translation of gossip.
+# Convert to Simp. Chinese translation of gossip.
+# Copyright (C) 2003-2004 Free Software Foundation, Inc.
+# Abel Cheung <maddog@linux.org.hk>, 2003.
+# Mai Haohui <maihaohui@hotmail.com>, 2003.
+# Rongjun Mu <elanmu@sina.com>, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2004-06-19 11:02+0800\n"
+"Last-Translator: Mai Haohui <maihaohui@hotmail.com>\n"
+"Language-Team: zh_CN <i18n-translation@lists.linux.net.cn>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: UTF-8\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "即时通讯程序"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "即时通讯程序"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "添加到您的联系人清单"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:8
+#, fuzzy
+msgid "Enable sound when away"
+msgstr "当“离开”时关闭声音(_A)"
+
+#: ../data/empathy.schemas.in.h:9
+#, fuzzy
+msgid "Enable sound when busy"
+msgstr "当“忙碌”时关闭声音(_B)"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "Gossip - 发送消息"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "隐藏主窗口"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "隐藏主窗口。"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:14
+#, fuzzy
+msgid "Show avatars"
+msgstr "显示联系人清单(_S)"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "主窗口高度。"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "显示离线联系人"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:19
+#, fuzzy
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "此名称将在聊天窗口中标识您。"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "使用表情图标"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "使用通知声音"
+
+#: ../data/empathy.schemas.in.h:22
+msgid "Use theme for chat rooms"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "对话时是否将表情符号转换为真正的图标。"
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "收到消息时是否播放声音。"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "“离开”时是否播放声音。"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "“忙碌”时是否播放声音。"
+
+#: ../data/empathy.schemas.in.h:28
+#, fuzzy
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "收到消息时是否播放声音。"
+
+#: ../data/empathy.schemas.in.h:29
+#, fuzzy
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "是否显示联系人清单中离线的联系人。"
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "是否显示联系人清单中离线的联系人。"
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "是否显示联系人清单中离线的联系人。"
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "离线"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "在线"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "忙碌"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "离开"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "显示联系人清单(_S)"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "组"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "添加联系人(_A)..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "隐藏联系人清单(_H)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "连接"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "编辑收藏夹(_E)..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+msgid "Manage Favorites..."
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "显示离线联系人(_O)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "接受(_A)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+#, fuzzy
+msgid "_Accounts"
+msgstr "接受(_A)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "添加联系人(_A)..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "聊天(_C)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+#, fuzzy
+msgid "_Contents"
+msgstr "连接"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+msgid "_Edit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "新建消息(_C)..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+#, fuzzy
+msgid "_Personal Information"
+msgstr "个人信息"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "首选项(_P)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+#, fuzzy
+msgid "_Room"
+msgstr "房间(_R):"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "_View Previous Conversations"
+msgstr "对话(_C)"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "状态"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "显示联系人清单(_S)"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+#, fuzzy
+msgid "An Instant Messaging client for GNOME"
+msgstr "Gossip 即时通讯客户端"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+#, fuzzy
+msgid "translator-credits"
+msgstr ""
+"开源软件国际化简体中文组\n"
+"(http://i18n.linux.net.cn)\n"
+"Abel Cheung\n"
+"Mai Haohui\n"
+"Rongjun Mu"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "在线"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>帐户设置</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>帐户设置</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+#, fuzzy
+msgid "Accounts"
+msgstr "Jabber 帐户"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+#, fuzzy
+msgid "<b>Account</b>"
+msgstr "<b>收藏夹:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>收藏夹:</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>帐户设置</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "聊天"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+#, fuzzy
+msgid "_Name:"
+msgstr "名字:"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "话题(_T):"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">例如:user@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+#, fuzzy
+msgid "Pass_word:"
+msgstr "密码(_P):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+#, fuzzy
+msgid "Reso_urce:"
+msgstr "资源(_R):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "将消息用 SSL 加密(_E)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+#, fuzzy
+msgid "_Port:"
+msgstr "端口(_O):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "服务器(_S):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+#, fuzzy
+msgid "jabber account settings"
+msgstr "<b>帐户设置</b>"
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "已断开连接"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "已连接"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+msgid "C_lear"
+msgstr "清除(_L)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "聊天"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+#, fuzzy
+msgid "Contact Infor_mation"
+msgstr "联系人信息(_I)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "聊天"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "注册(_G)..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "输入状态消息:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+msgid "Invite"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "左移标签(_L)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "右移标签(_R)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+#, fuzzy
+msgid "_Add To Favorites"
+msgstr "编辑收藏夹(_E)..."
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "对话(_C)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "分离标签(_D)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "下一标签(_N)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+msgid "_Paste"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "上一标签(_P)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+#, fuzzy
+msgid "_Show Contacts"
+msgstr "显示联系人清单(_S)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "标签(_T)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "复制链接地址(_C)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "打开链接(_O)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%Y年%-m月%-d日%A"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "新建消息(_C)..."
+msgstr[1] "新建消息(_C)..."
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+#, fuzzy
+msgid "Chat Room"
+msgstr "Gossip - 聊天"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "对话(_C)"
+msgstr[1] "对话(_C)"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "输入消息。"
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "添加联系人(_A)..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "组"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "加入一位联系人"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "联系人信息(_I)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "联系人信息"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/更改组名(_N)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "用户名(_U):"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr "请输入联系人 %s 的新昵称"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+msgid "_Remove"
+msgstr "删除(_R)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/删除联系人(_R)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "Gossip - 编辑聊天组"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+msgid "_Send File..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "选择"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "对话(_C)"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+#, fuzzy
+msgid "<b>Appearance</b>"
+msgstr "外观"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+#, fuzzy
+msgid "<b>Audio</b>"
+msgstr "<b>收藏夹:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+#, fuzzy
+msgid "<b>Behaviour</b>"
+msgstr "<b>收藏夹:</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "状态"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "连接"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+#, fuzzy
+msgid "<b>Visual</b>"
+msgstr "<b>描述</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+#, fuzzy
+msgid "Chat Th_eme:"
+msgstr "聊天名称(_N):"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+#, fuzzy
+msgid "Enable sounds when _away"
+msgstr "当“离开”时关闭声音(_A)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+#, fuzzy
+msgid "Enable sounds when _busy"
+msgstr "当“忙碌”时关闭声音(_B)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+#, fuzzy
+msgid "Notifications"
+msgstr "使用通知声音"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+#, fuzzy
+msgid "Preferences"
+msgstr "首选项(_P)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+#, fuzzy
+msgid "Show _smileys as images"
+msgstr "将表情符号转换为图形(_S)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "显示联系人清单(_S)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+msgid "_Enable spell checking"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+#, fuzzy
+msgid "_Play sound when messages arrive"
+msgstr "收到消息时播放声音"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "Gossip - 编辑聊天组"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+#, fuzzy
+msgid "Custom message..."
+msgstr "请求消息"
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+#, fuzzy
+msgid "Clear List..."
+msgstr "清除(_L)"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "您要接受请求吗?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+#, fuzzy
+msgid "Clear List"
+msgstr "清除(_L)"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "输入状态消息:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+#, fuzzy
+msgid "Status Message Presets"
+msgstr "状态消息"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "预设状态消息"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s 离线了"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, fuzzy, c-format
+msgid "%s has come online"
+msgstr "%s 上线了"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+msgid "Simple"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "清除(_L)"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr ""
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "启动时不自动登录"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "即时通讯程序"
+
+#, fuzzy
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "即时通讯程序"
+
+#, fuzzy
+#~ msgid "Joining"
+#~ msgstr "加入(_J)"
+
+#, fuzzy
+#~ msgid "Unknown"
+#~ msgstr "未知的错误"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "使用通知声音"
+
+#, fuzzy
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "未知的错误"
+
+#, fuzzy
+#~ msgid "Unavailable"
+#~ msgstr "在线"
+
+#, fuzzy
+#~ msgid "An unknown error occurred."
+#~ msgstr "未知的错误"
+
+#, fuzzy
+#~ msgid "Connection refused."
+#~ msgstr "已连接"
+
+#, fuzzy
+#~ msgid "Connection timed out."
+#~ msgstr "已连接"
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "Jabber 帐户"
+
+#~ msgid "Home"
+#~ msgstr "首页"
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "正在注册帐户"
+
+#, fuzzy
+#~ msgid "Disconnect"
+#~ msgstr "断开连接(_D)"
+
+#~ msgid "Connect"
+#~ msgstr "连接"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "成功注册帐户"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "注册帐户失败"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "请输入您的密码:"
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "请输入您的密码:"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr "请为组 %s 输入新名称"
+
+#, fuzzy
+#~ msgid "Information requested, please wait..."
+#~ msgstr "<b>已请求信息,请稍等...</b>"
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "我希望可以将您加入我的联系人清单内。"
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "新建消息(_C)..."
+#~ msgstr[1] "新建消息(_C)..."
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "订阅请求"
+#~ msgstr[1] "订阅请求"
+
+#, fuzzy
+#~ msgid "Edit Account _Details"
+#~ msgstr "修改帐户信息"
+
+#~ msgid "New message from %s"
+#~ msgstr "收到来自 %s 的消息"
+
+#, fuzzy
+#~ msgid "Accept"
+#~ msgstr "接受(_A)"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "名字:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "房间(_R):"
+
+#, fuzzy
+#~ msgid "Auto Connect"
+#~ msgstr "连接"
+
+#, fuzzy
+#~ msgid "Information requested..."
+#~ msgstr "<b>已请求信息,请稍等...</b>"
+
+#, fuzzy
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr ""
+#~ "您是否想从联系人清单中删除\n"
+#~ "%s?"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr "请为组 %s 输入新名称"
+
+#~ msgid "Select"
+#~ msgstr "选择"
+
+#~ msgid "Unsorted"
+#~ msgstr "未排序"
+
+#, fuzzy
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "未知的错误"
+
+#, fuzzy
+#~ msgid "%s would like to send you a file."
+#~ msgstr "我希望可以将您加入我的联系人清单内。"
+
+#, fuzzy
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "我希望可以将您加入我的联系人清单内。"
+
+#, fuzzy
+#~ msgid "Select a file"
+#~ msgstr "选择"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "连接(_C)..."
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "连接"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "您想使用什么昵称来代表这个联系人?"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "话题(_T):"
+
+#, fuzzy
+#~ msgid "Account"
+#~ msgstr "Jabber 帐户"
+
+#, fuzzy
+#~ msgid "Conversation With"
+#~ msgstr "对话(_C)"
+
+#~ msgid "List the available accounts"
+#~ msgstr "列出可使用的帐户"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "启动时连接到哪个帐户"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "帐户名称"
+
+#~ msgid "Available accounts:"
+#~ msgstr "可使用的帐户:"
+
+#~ msgid "[default]"
+#~ msgstr "[默认]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "没有名为“%s”的帐户。"
+
+#, fuzzy
+#~ msgid "Join"
+#~ msgstr "加入(_J)"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "聊天"
+
+#, fuzzy
+#~ msgid "Chat Rooms"
+#~ msgstr "Gossip - 聊天"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "<b>已请求信息,请稍等...</b>"
+
+#, fuzzy
+#~ msgid "Default"
+#~ msgstr "[默认]"
+
+#, fuzzy
+#~ msgid "Chat!"
+#~ msgstr "聊天"
+
+#, fuzzy
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s 将会被加入至您的联系人清单。"
+
+#, fuzzy
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "%s 将会被加入至您的联系人清单。"
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "订阅请求"
+
+#, fuzzy
+#~ msgid "Contact Information"
+#~ msgstr "联系人信息(_I)"
+
+#, fuzzy
+#~ msgid "New subscription request from %s"
+#~ msgstr "订阅请求"
+
+#, fuzzy
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr ""
+#~ "您是否想从联系人清单中删除\n"
+#~ "%s?"
+
+#, fuzzy
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr ""
+#~ "您是否想从联系人清单中删除\n"
+#~ "%s?"
+
+#, fuzzy
+#~ msgid "Please enter your %s account password"
+#~ msgstr "请输入您的密码:"
+
+#~ msgid "Remember Password?"
+#~ msgstr "是否记住密码?"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "聊天"
+
+#, fuzzy
+#~ msgid "Contact goes online"
+#~ msgstr "%s 上线了"
+
+#, fuzzy
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "您要接受请求吗?"
+
+#, fuzzy
+#~ msgid "File name:"
+#~ msgstr "用户名(_U):"
+
+#, fuzzy
+#~ msgid "File size:"
+#~ msgstr "网站:"
+
+#~ msgid "Web site:"
+#~ msgstr "网站:"
+
+#~ msgid "_Accept"
+#~ msgstr "接受(_A)"
+
+#~ msgid "_Deny"
+#~ msgstr "拒绝(_D)"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>收藏夹:</b>"
+
+#, fuzzy
+#~ msgid "Account:"
+#~ msgstr "Jabber 帐户"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "Gossip - 编辑聊天组"
+
+#, fuzzy
+#~ msgid "Group Chat"
+#~ msgstr "Gossip - 聊天"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "加入(_J)"
+
+#, fuzzy
+#~ msgid "Join room on start_up"
+#~ msgstr "启动时不自动登录"
+
+#, fuzzy
+#~ msgid "N_ame:"
+#~ msgstr "名字:"
+
+#, fuzzy
+#~ msgid "S_erver:"
+#~ msgstr "服务器:"
+
+#~ msgid "_Nickname:"
+#~ msgstr "昵称(_N):"
+
+#~ msgid "_Room:"
+#~ msgstr "房间(_R):"
+
+#, fuzzy
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>收藏夹:</b>"
+
+#, fuzzy
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "客户信息"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>收藏夹:</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "状态"
+
+#, fuzzy
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "个人信息"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "订阅"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">例如:user@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "Jabber 帐户"
+
+#, fuzzy
+#~ msgid "Add Contact"
+#~ msgstr "添加联系人(_A)..."
+
+#, fuzzy
+#~ msgid "Ch_at"
+#~ msgstr "聊天"
+
+#~ msgid "Client:"
+#~ msgstr "客户:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "添加联系人(_A)..."
+
+#, fuzzy
+#~ msgid "Connect on S_tartup"
+#~ msgstr "启动时不自动登录"
+
+#, fuzzy
+#~ msgid "Contacts"
+#~ msgstr "添加联系人(_A)..."
+
+#~ msgid "Country:"
+#~ msgstr "国籍:"
+
+#~ msgid "Decide _Later"
+#~ msgstr "以后再决定(_L)"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "添加联系人(_A)..."
+
+#~ msgid "Edit Groups"
+#~ msgstr "编辑组"
+
+#~ msgid "Email:"
+#~ msgstr "电子邮件:"
+
+#, fuzzy
+#~ msgid "ID:"
+#~ msgstr "JID"
+
+#~ msgid "Name:"
+#~ msgstr "名字:"
+
+#~ msgid "OS:"
+#~ msgstr "操作系统:"
+
+#, fuzzy
+#~ msgid "Personal Details"
+#~ msgstr "个人信息(_P)"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "注册(_G)..."
+
+#, fuzzy
+#~ msgid "Search"
+#~ msgstr "搜索(_S)..."
+
+#, fuzzy
+#~ msgid "Spell Checker"
+#~ msgstr "Gossip - 发送消息"
+
+#, fuzzy
+#~ msgid "Subscription Request"
+#~ msgstr "订阅请求"
+
+#, fuzzy
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "您想使用什么昵称来代表这个联系人?"
+
+#, fuzzy
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "此名称将在聊天窗口中标识您。"
+
+#, fuzzy
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr "此名称将在聊天窗口中标识您。"
+
+#~ msgid "Version:"
+#~ msgstr "版本:"
+
+#, fuzzy
+#~ msgid "View Previous Conversations"
+#~ msgstr "对话(_C)"
+
+#, fuzzy
+#~ msgid "Which account do you want to use?"
+#~ msgstr "您想使用什么用户名?"
+
+#, fuzzy
+#~ msgid "_Connect"
+#~ msgstr "连接"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "描述"
+
+#~ msgid "_Disconnect"
+#~ msgstr "断开连接(_D)"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "电子邮件:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr "输入您想与他聊天的人的用户 ID"
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "端口(_O):"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "名字:"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "组"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "昵称(_N):"
+
+#, fuzzy
+#~ msgid "_Password:"
+#~ msgstr "密码(_P):"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "状态消息(_S)"
+
+#, fuzzy
+#~ msgid "_Retrieve"
+#~ msgstr "删除(_R)"
+
+#~ msgid "_Subscribe"
+#~ msgstr "订阅(_S)"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "网站:"
+
+#, fuzzy
+#~ msgid "irc account settings"
+#~ msgstr "<b>帐户设置</b>"
+
+#, fuzzy
+#~ msgid "msn account settings"
+#~ msgstr "<b>帐户设置</b>"
+
+#~ msgid "Preset status messages"
+#~ msgstr "预设状态消息"
+
+#~ msgid "Preset status messages."
+#~ msgstr "预设状态消息。"
+
+#, fuzzy
+#~ msgid "Connecting"
+#~ msgstr "连接"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s 将会被加入至您的联系人清单。"
+
+#, fuzzy
+#~ msgid "%s ID of new contact:"
+#~ msgstr "新联系人的 Jabber ID(_J):"
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr "请输入您的密码:"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "%s 的联系人信息"
+
+#, fuzzy
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/联系人信息(_I)"
+
+#, fuzzy
+#~ msgid "/Re_name Contact"
+#~ msgstr "/更改联系人名称(_N)"
+
+#, fuzzy
+#~ msgid "/_Edit Groups"
+#~ msgstr "/编辑组(_E)"
+
+#, fuzzy
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "对话(_C)"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr "请输入联系人 %s 的新昵称"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "编辑 %s 的组"
+
+#~ msgid "Conversation Log"
+#~ msgstr "对话日志"
+
+#~ msgid "Registering account"
+#~ msgstr "正在注册帐户"
+
+#, fuzzy
+#~ msgid "Respond"
+#~ msgstr "原因:"
+
+#, fuzzy
+#~ msgid "Add to _favourites"
+#~ msgstr "编辑收藏夹(_E)..."
+
+#, fuzzy
+#~ msgid "Na_me:"
+#~ msgstr "名字:"
+
+#, fuzzy
+#~ msgid "New Chat Room"
+#~ msgstr "Gossip - 聊天"
+
+#~ msgid " "
+#~ msgstr " "
+
+#, fuzzy
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>已请求信息,请稍等...</b>"
+
+#, fuzzy
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">例如:user@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "Gossip - 聊天"
+
+#, fuzzy
+#~ msgid "Connection Details"
+#~ msgstr "个人信息"
+
+#, fuzzy
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "您是否已经在 Jabber 服务器中有帐户了?"
+
+#, fuzzy
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr "请输入联系人 %s 的新昵称"
+
+#, fuzzy
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr "请输入联系人 %s 的新昵称"
+
+#, fuzzy
+#~ msgid "Finished"
+#~ msgstr "设置完成"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip 是一个新潮的 Jabber 即时通讯客户端程序。\n"
+#~ "\n"
+#~ "此助理会帮助您配置 Gossip,并连接至您最喜欢的 Jabber 服务器。\n"
+#~ "\n"
+#~ "要开始,请点击“前进”。"
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "您要发送一个请求才能订阅用户的在线通知。在您的联系人清单中,该用户会被显示"
+#~ "为“离线”直至他同意您的请求。"
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "您想将这个联系人加入哪个组之内?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "Jabber ID:"
+
+#~ msgid "Nickname:"
+#~ msgstr "昵称:"
+
+#, fuzzy
+#~ msgid "Port:"
+#~ msgstr "端口(_O):"
+
+#, fuzzy
+#~ msgid "Registering Account"
+#~ msgstr "正在注册帐户"
+
+#, fuzzy
+#~ msgid "Resource:"
+#~ msgstr "资源(_R):"
+
+#~ msgid "Sending request"
+#~ msgstr "发送请求"
+
+#~ msgid "Server:"
+#~ msgstr "服务器:"
+
+#, fuzzy
+#~ msgid "Web Site:"
+#~ msgstr "网站:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "欢迎使用 Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "该联系人使用哪种即时通讯系统?"
+
+#~ msgid "What is your name?"
+#~ msgstr "您的名字是?"
+
+#, fuzzy
+#~ msgid "What password do you want to use?"
+#~ msgstr "您想使用哪个服务器?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "您使用什么用户名?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "您想使用什么用户名?"
+
+#, fuzzy
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "您想将这个联系人加入哪个组之内?"
+
+#, fuzzy
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr ""
+#~ "Gossip 已经正确完成设定。\n"
+#~ "您可以在稍后在菜单中选取“聊天→连接...”,更改帐户设定。"
+
+#, fuzzy
+#~ msgid "Your Account"
+#~ msgstr "Jabber 帐户"
+
+#~ msgid "Your Identity"
+#~ msgstr "您的身份"
+
+#, fuzzy
+#~ msgid "_Group Chat"
+#~ msgstr "Gossip - 聊天"
+
+#, fuzzy
+#~ msgid "_No"
+#~ msgstr "否"
+
+#~ msgid "_Search..."
+#~ msgstr "搜索(_S)..."
+
+#, fuzzy
+#~ msgid "_Yes"
+#~ msgstr "是"
+
+#~ msgid "Be silent when away"
+#~ msgstr "离开时不发出声音"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "忙碌时不发出声音"
+
+#~ msgid "Height of main window"
+#~ msgstr "主窗口高度"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "主窗口水平位置。"
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "主窗口垂直位置。"
+
+#~ msgid "The width of the main window."
+#~ msgstr "主窗口宽度。"
+
+#~ msgid "Width of the main window"
+#~ msgstr "主窗口宽度"
+
+#~ msgid "X position of main window"
+#~ msgstr "主窗口水平位置"
+
+#~ msgid "Y position of main window"
+#~ msgstr "主窗口垂直位置"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip 即时通讯客户端"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "隐藏主窗口。"
+
+#, fuzzy
+#~ msgid "Requested Information"
+#~ msgstr "帐户信息(_A)"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "状态消息"
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "%s 离线了"
+
+#~ msgid "Available..."
+#~ msgstr "在线..."
+
+#~ msgid "Busy..."
+#~ msgstr "忙碌..."
+
+#~ msgid "Away..."
+#~ msgstr "离开..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "联系人信息(_I)"
+
+#, fuzzy
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>描述</b>"
+
+#, fuzzy
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - 聊天组"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "加入聊天组(_J)..."
+
+#, fuzzy
+#~ msgid "Por_t:"
+#~ msgstr "端口(_O):"
+
+#, fuzzy
+#~ msgid "Requested information."
+#~ msgstr "客户信息"
+
+#, fuzzy
+#~ msgid "Could not open connection"
+#~ msgstr "无法连接"
+
+#, fuzzy
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "您想使用哪个服务器?"
+
+#, fuzzy
+#~ msgid "Connection to the server failed."
+#~ msgstr "<b>连接至服务器</b>"
+
+#~ msgid "Written by:"
+#~ msgstr "作者:"
+
+#~ msgid "Artwork by:"
+#~ msgstr "美工:"
+
+#~ msgid "Translated by:"
+#~ msgstr "翻译:"
+
+#, fuzzy
+#~ msgid "Account ID"
+#~ msgstr "帐户信息(_A)"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%s聊天 - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/显示日志(_L)"
+
+#, fuzzy
+#~ msgid "Persian"
+#~ msgstr "版本:"
+
+#~ msgid "View Lo_g"
+#~ msgstr "查看日志(_G)"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - 聊天组"
+
+#, fuzzy
+#~ msgid "Gossip - Add contact"
+#~ msgstr "添加联系人"
+
+#, fuzzy
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "联系人信息(_I)"
+
+#, fuzzy
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - 编辑聊天组"
+
+#, fuzzy
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - 聊天组"
+
+#, fuzzy
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - 发送消息"
+
+#, fuzzy
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "个人信息"
+
+#, fuzzy
+#~ msgid "Gossip - Preferences"
+#~ msgstr "首选项"
+
+#, fuzzy
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - 发送消息"
+
+#, fuzzy
+#~ msgid "Personal Details Saved!"
+#~ msgstr "个人信息"
+
+#~ msgid "What request message do you want to send to %s?"
+#~ msgstr "您想给 %s 发送什么请求?"
+
+#~ msgid "Make sure that your account information is correct."
+#~ msgstr "请确保您的帐户信息是正确的。"
+
+#~ msgid "%s wants to be notified of your status."
+#~ msgstr "%s 想收到您状态的通知。"
+
+#~ msgid "You were disconnected from the server. Do you want to reconnect?"
+#~ msgstr "服务器方面已经中断连接。是否重新连接?"
+
+#~ msgid ""
+#~ "Make sure that your account information is correct. The server may also "
+#~ "currently be unavailable."
+#~ msgstr "请确保您的帐户信息是正确的。服务器目前也可能不可用。"
+
+#~ msgid "Edit List..."
+#~ msgstr "编辑清单..."
+
+#~ msgid "An error occurred when chatting with %s."
+#~ msgstr "和 %s 聊天时发生错误。"
+
+#~ msgid "Details:"
+#~ msgstr "详细资料:"
+
+#~ msgid "An error occurred when chatting in the group chat %s."
+#~ msgstr "在聊天组 %s 聊天时发生错误。"
+
+#~ msgid "Unable to enter the group chat %s."
+#~ msgstr "无法进入聊天组 %s。"
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip 现在会尝试使用您的帐户:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "Gossip 现在会尝试注册帐户:"
+
+#~ msgid "*"
+#~ msgstr "*"
+
+#~ msgid "From:"
+#~ msgstr "来自:"
+
+#~ msgid "Gossip - Received Message"
+#~ msgstr "Gossip - 收到消息"
+
+#~ msgid "In reply to:"
+#~ msgstr "回复到:"
+
+#~ msgid "To:"
+#~ msgstr "接收人:"
+
+#~ msgid "_Reply..."
+#~ msgstr "回复(_R)..."
+
+#~ msgid "_Send"
+#~ msgstr "发送(_S)"
+
+#~ msgid "C_onnect"
+#~ msgstr "连接(_O)"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Available chat rooms</b>"
+#~ msgstr "<b>可供选择的聊天室</b>"
+
+#~ msgid "<b>Chat room information</b>"
+#~ msgstr "<b>聊天室信息</b>"
+
+#~ msgid "Gossip - Join Group Chat"
+#~ msgstr "Gossip - 加入聊天组"
+
+#~ msgid "N_ickname:"
+#~ msgstr "昵称(_I):"
+
+#~ msgid ""
+#~ "Pick a favorite, or enter nickname, server name, and the name of the chat "
+#~ "room to enter."
+#~ msgstr "从收藏夹选择一个,或者输入昵称、服务器和要进入的聊天室名称。"
+
+#~ msgid "R_emove"
+#~ msgstr "删除(_E)"
+
+#~ msgid "_Add"
+#~ msgstr "添加(_A)"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Personal information</b>"
+#~ msgstr "<b>个人信息</b>"
+
+#~ msgid "<b>Preset status messages</b>"
+#~ msgstr "<b>预设状态消息</b>"
+
+#~ msgid "<i>Information not available</i>"
+#~ msgstr "<i>信息不可用</i>"
+
+#~ msgid "Choose a Server"
+#~ msgstr "选择服务器"
+
+#~ msgid "Choose from list:"
+#~ msgstr "从清单中选择:"
+
+#~ msgid "Information about ..."
+#~ msgstr "信息关于..."
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "On what server do you have a Jabber account?"
+#~ msgstr "您在哪个服务器有 Jabber 帐户?"
+
+#~ msgid "Sound"
+#~ msgstr "声音"
+
+#~ msgid "Use a different server"
+#~ msgstr "使用另一个服务器"
+
+#~ msgid "What request message do you want to send to ...?"
+#~ msgstr "您要给联系人发送什么请求?"
+
+#~ msgid "subscription_label"
+#~ msgstr "订阅标签"
diff --git a/trunk/po/zh_HK.po b/trunk/po/zh_HK.po
new file mode 100644
index 000000000..36a663cae
--- /dev/null
+++ b/trunk/po/zh_HK.po
@@ -0,0 +1,2561 @@
+# traditional Chinese translation of gossip.
+# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+# Abel Cheung <abel@oaka.org>, 2003, 2004.
+# Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip 0.13\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2006-08-24 18:45+0800\n"
+"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
+"Language-Team: Chinese (traditional) <community@linuxhall.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "即時通訊程式"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "即時通訊程式"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "永遠為新的聊天開啟個別的聊天視窗。"
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "聊天視窗佈景主題"
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr "以逗號分隔的拼字檢查程式語言清單(例. en, fr, nl)。"
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "顯示好友名單(_S)"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr "預設用以選擇大頭貼圖像的目錄"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr "當聯絡人上線時使用彈出式選單"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr "當「離開」時啟用音效"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr "當「忙碌」時啟用音效"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "啟用拼字檢查"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "隱藏主視窗"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "隱藏主視窗。"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr "在個別視窗中開啟新聊天"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr "顯示大頭貼"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "主視窗高度"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "顯示已離線的好友"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr "拼字檢查程式語言"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr "用來選擇大頭貼圖像的最後目錄。"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "這個佈景主題會用在聊天視窗中顯示交談。"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "使用表情圖示"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "使用音效來通知收到訊息"
+
+#: ../data/empathy.schemas.in.h:22
+#, fuzzy
+msgid "Use theme for chat rooms"
+msgstr "加入該聊天室"
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "在對話時,是否將代表表情圖示的字符轉換為真正的圖示。"
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "將收到訊息時,是否播放音效。"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "當離開時是否播放音效。"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "當忙碌時是否播放音效。"
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "當聯絡人上線時,是否顯示彈出式視窗。"
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "是否在聯絡人清單與聊天視窗中顯示大頭貼。"
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "是否顯示清單中離線的好友。"
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "是否在聯絡人清單與聊天視窗中顯示大頭貼。"
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "離線"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "已連線"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "忙碌"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "離開"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "顯示好友名單(_S)"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "群組"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "聯絡人"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "隱藏好友名單(_H)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "內容(_C)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "加入喜好(_F)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr "加入新的(_N)..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+#, fuzzy
+msgid "Manage Favorites..."
+msgstr "加入喜好(_F)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "顯示已離線的好友(_O)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "帳號(_A)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "帳號(_A)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "加入好友(_A)..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "聊天(_C)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "內容(_C)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "編輯"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "新增訊息(_N)..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "個人資訊(_P)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "偏好設定(_P)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr "聊天室(_R)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr "顯示前一次交談(_V)"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "狀態"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "顯示好友名單(_S)"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+#, fuzzy
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Gossip 是自由軟件;你可以遵照Free Software Foundation (Free Software "
+"Foundation) 出版的 GNU 通用公共許可證條款 (GNU General Public License) 第二版"
+"來修改和重新發佈這一程式,或者自由選擇使用任何更新的版本。"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+#, fuzzy
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"發佈 Gossip 的目的是希望它有用,但沒有任何擔保。甚至沒有適合特定目的而隱含的"
+"擔保。更詳細的情況請參閱 GNU 通用公共許可證。"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"你應該已經和 Gossip 一起收到一份 GNU 通用公共許可證的副本;如果還沒有,寫信"
+"給: Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA "
+"02111-1307 USA"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "GNOME 的即時通訊軟件"
+
+# Abel's note: The dialog is really not wide enough to show email with name.
+#
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"如對翻譯有任何意見,請送一封電郵給\n"
+"以下地址,GNOME 翻譯隊伍會盡快回覆你:\n"
+"community@linuxhall.org\n"
+"\n"
+"Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>, 2003, 05\n"
+"Craig Jeffares <cjeffares@novell.com>, 2004\n"
+"Joe Man <trmetal@yahoo.com.hk>, 2001"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "已連線"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr "啟用"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>帳號設定</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>帳號設定</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr "帳號"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"即將移除你的 %s 帳號!\n"
+"確定要繼續嗎?"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"如果你決定繼續,任何相關的交談及聊天室將 不會 被移除。\n"
+"\n"
+"若你稍後決定將該帳號加回來,它們仍然可以使用。"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+msgid "<b>Account</b>"
+msgstr "<b>帳戶</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>帳戶</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>帳號設定</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "聊天!"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+msgid "_Name:"
+msgstr "名稱(_N):"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "題目(_T):"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">範例:user@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr "登入 I_D:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+msgid "Pass_word:"
+msgstr "密碼(_W):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr "資源(_U):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "將訊息加密(_SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+msgid "_Port:"
+msgstr "連接埠(_P):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "伺服器(_S):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+#, fuzzy
+msgid "jabber account settings"
+msgstr "<b>帳號設定</b>"
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "已斷線"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr "插入笑臉圖像"
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr "檢查拼字(_C)..."
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "已連線"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+#, fuzzy
+msgid "C_lear"
+msgstr "清除(_L)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "聊天"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr "聯絡人資訊(_M)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "聊天(_A)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "邀請(_V)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "插入笑臉圖像(_S)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "輸入狀態訊息:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+#, fuzzy
+msgid "Invite"
+msgstr "邀請(_V)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "將分頁左移(_L)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "將分頁右移(_R)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "你已經被邀請參加聊天會議。"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "加入喜好(_A)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "對話(_C)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "脫離分頁(_D)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "下個分頁(_N)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+#, fuzzy
+msgid "_Paste"
+msgstr "日期"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "上個分頁(_P)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr "顯示好友名單(_S)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "分頁(_T)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "複製鏈結地址(_C)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "開啟連結(_O)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%Y-%m-%d (%A)"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "新增訊息"
+msgstr[1] "新增訊息"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+msgid "Chat Room"
+msgstr "聊天室"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "對話(_C)"
+msgstr[1] "對話(_C)"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "正在鍵入訊息。"
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "聯絡人"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "群組"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "加入好友"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "聯絡人資訊(_M)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "好友資訊"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/更改群組名稱(_N)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "檔案名稱:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr "請輸入這個帳號的名稱"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "_Remove"
+msgstr "/移除好友(_R)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/移除好友(_R)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "/邀請至聊天室(_I)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "_Send File..."
+msgstr "/傳送檔案(_S)..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "選擇一個檔案"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "顯示前一次交談"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr "語言"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>外觀</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>音訊</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>行為</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "<b>狀態</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr "<b>語言</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "<b>連線</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>視覺效果</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr "<small>這裏的語言清單只反映出你已經安裝字典的語言。</small>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "大頭貼是使用者選擇來提供聯絡人清單顯示用的"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "聊天佈景主題(_E):"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "聯絡人上線時顯示通知(_O)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "當「離開」時啟用音效(_A)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "當「忙碌」時啟用音效(_B)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr "一般"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+msgid "Notifications"
+msgstr "通知"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+msgid "Preferences"
+msgstr "偏好設定"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "顯示大頭貼(_A)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "以圖像顯示表情符號(_S)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "顯示好友名單(_S)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "拼字檢查"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+#, fuzzy
+msgid "_Enable spell checking"
+msgstr "啟用拼字檢查"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "在個別視窗開啟新的聊天(_O)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "收到訊息時播放音效(_P)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "儲存此聊天室(_T)"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr "自訂訊息..."
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+msgid "Clear List..."
+msgstr "清除清單..."
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "確定要清空這個清單?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr "這樣會移除任何你曾加入到預先設定狀態訊息清單中的自訂訊息。"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr "清除清單"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "輸入狀態訊息:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+msgid "Status Message Presets"
+msgstr "狀態訊息預先設定"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "加入至狀態訊息清單"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s 已離線"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr "%s 已經上線"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr "古典"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+#, fuzzy
+msgid "Simple"
+msgstr "範例"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "清除(_L)"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr "藍色"
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "啟動程式時不進行連線"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "- Gossip 即時通訊程式"
+
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Gossip 即時通訊程式"
+
+#~ msgid "Normal"
+#~ msgstr "正常"
+
+#~ msgid "Joining"
+#~ msgstr "加入中"
+
+#~ msgid "Active"
+#~ msgstr "使用中"
+
+#~ msgid "Inactive"
+#~ msgstr "未使用"
+
+#~ msgid "Unknown"
+#~ msgstr "不明"
+
+#~ msgid "Error"
+#~ msgstr "錯誤"
+
+#, fuzzy
+#~ msgid "Participant"
+#~ msgid_plural "Participants"
+#~ msgstr[0] "加利西亞文"
+#~ msgstr[1] "加利西亞文"
+
+#, fuzzy
+#~ msgid "No role"
+#~ msgstr "正常"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "通知"
+
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "你所選的暱稱已經被使用了。"
+
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr "你嘗試加入的聊天室需要密碼。"
+
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr "遠端會議伺服器沒有在時間內回應。"
+
+#~ msgid "The conference server you tried to join could not be found."
+#~ msgstr "找不到你嘗試加入的會議伺服器。"
+
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "發生了未知的錯誤,請檢查你的詳細資訊是否正確。"
+
+#, fuzzy
+#~ msgid "Joining the chatroom was canceled."
+#~ msgstr "加入該聊天室"
+
+#~ msgid "Unavailable"
+#~ msgstr "無法使用"
+
+#~ msgid "An unknown error occurred."
+#~ msgstr "發生不明的錯誤。"
+
+#~ msgid "Connection refused."
+#~ msgstr "連線被拒絕。"
+
+#~ msgid "Server address could not be resolved."
+#~ msgstr "無法解析伺服器位址。"
+
+#~ msgid "Connection timed out."
+#~ msgstr "連線已逾時。"
+
+#~ msgid "Authentication failed."
+#~ msgstr "驗證已失敗。"
+
+#~ msgid "The username you are trying already exists."
+#~ msgstr "你所輸入的使用者名稱已經被使用了。"
+
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "你所輸入的使用者名稱是無效的。"
+
+#~ msgid "This feature is unavailable."
+#~ msgstr "這項功能無法使用。"
+
+#~ msgid "This feature is unauthorized."
+#~ msgstr "這項功能未獲授權。"
+
+#~ msgid "A specific protocol error occurred that was unexpected."
+#~ msgstr "指定的通訊協定發生未預期的錯誤。"
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "新增帳號"
+
+#~ msgid "Home"
+#~ msgstr "首頁"
+
+#~ msgid "Couldn't send message!"
+#~ msgstr "無法傳送訊息!"
+
+#~ msgid "Connection could not be opened"
+#~ msgstr "無法開啟連線"
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "這項功能無法使用。"
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "註冊"
+
+#, fuzzy
+#~ msgid "There was an internal service error"
+#~ msgstr "內部的伺服器錯誤"
+
+#, fuzzy
+#~ msgid "This feature is not implemented"
+#~ msgstr "這項功能未獲授權。"
+
+#, fuzzy
+#~ msgid "The remote service timed out"
+#~ msgstr "遠端伺服器逾時"
+
+#~ msgid "Stop"
+#~ msgstr "停止"
+
+#~ msgid "Disconnect"
+#~ msgstr "中斷連線"
+
+#~ msgid "Connect"
+#~ msgstr "連線"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "成功註冊帳號"
+
+#, fuzzy
+#~ msgid "You should now be able to connect to your new account."
+#~ msgstr "你不能將 --no-connect 與 --account 一起使用"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "註冊新帳號設定值不成功"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "輸入你的帳號密碼: "
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "輸入你的帳號密碼: "
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "請為新的群組命名:\n"
+#~ "%s"
+
+#~ msgid "No information is available for this contact."
+#~ msgstr "沒有這個好友的相關資訊。"
+
+#~ msgid "Information requested, please wait..."
+#~ msgstr "要求資訊,請稍候..."
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "我希望可以將你加入我的好友名單之內。"
+
+#~ msgid "To summarize:"
+#~ msgstr "要做總結:"
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "新增訊息"
+#~ msgstr[1] "新增訊息"
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "訂閱要求"
+#~ msgstr[1] "訂閱要求"
+
+#, fuzzy
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "檔案傳輸要求"
+#~ msgstr[1] "檔案傳輸要求"
+
+#, fuzzy
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "無法傳送訊息!"
+#~ msgstr[1] "無法傳送訊息!"
+
+#, fuzzy
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "錯誤"
+#~ msgstr[1] "錯誤"
+
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "如果離開,你將失去所有未閱讀的資訊。"
+
+#~ msgid "Edit Account _Details"
+#~ msgstr "編輯帳號詳細資訊(_D)"
+
+#~ msgid "Click to enlarge"
+#~ msgstr "按這裏放大"
+
+#~ msgid "Word"
+#~ msgstr "字"
+
+#~ msgid "New message from %s"
+#~ msgstr "收到來自 %s 的新訊息"
+
+#~ msgid "Your invitation has been declined"
+#~ msgstr "你的邀請被拒絕了"
+
+#~ msgid "Accept"
+#~ msgstr "接受"
+
+#~ msgid "Decline"
+#~ msgstr "拒絕"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "名稱:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "聊天室(_R)"
+
+#~ msgid "Auto Connect"
+#~ msgstr "自動連線"
+
+#~ msgid "Information requested..."
+#~ msgstr "要求資訊..."
+
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr "是否想從名單中移除這個好友?"
+
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "請為新的群組命名:\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "選擇"
+
+#~ msgid "Unsorted"
+#~ msgstr "未排序"
+
+#~ msgid "New file transfer request from %s"
+#~ msgstr "來自 %s 的檔案傳輸要求"
+
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "雙方都不支援檔案傳輸。"
+
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "你的檔案傳輸要求被拒絕了。"
+
+#~ msgid "The other user decided not to continue."
+#~ msgstr "另一個使用者決定不要繼續。"
+
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "在檔案傳輸過程中遇到未知的錯誤。"
+
+#~ msgid "%s would like to send you a file."
+#~ msgstr "%s 希望可以傳送給你一個檔案。"
+
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "某人想要傳送給你一個檔案。"
+
+#~ msgid "Select a file"
+#~ msgstr "選擇一個檔案"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "正在連線"
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "停止連線"
+
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "邀請 %s 參加這個聊天會議。"
+
+#, fuzzy
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "%s 已經設定該主題"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "你想使用甚麼稱呼來代表這個好友?"
+
+#, fuzzy
+#~ msgid "%s has joined the room"
+#~ msgstr "%s 已經設定該主題"
+
+#, fuzzy
+#~ msgid "%s has left the room"
+#~ msgstr "%s 已經設定該主題"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "題目(_T):"
+
+#~ msgid "Account"
+#~ msgstr "帳號"
+
+#~ msgid "Conversation With"
+#~ msgstr "交談於"
+
+#~ msgid "Date"
+#~ msgstr "日期"
+
+#~ msgid "List the available accounts"
+#~ msgstr "列出可供使用的帳號"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "程式啟動時自動連接至哪個帳號"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "帳號名稱"
+
+#~ msgid "You can not use --no-connect together with --account"
+#~ msgstr "你不能將 --no-connect 與 --account 一起使用"
+
+#~ msgid "No accounts available."
+#~ msgstr "沒有可用的帳號。"
+
+#~ msgid "Available accounts:"
+#~ msgstr "可使用的帳號:"
+
+#~ msgid "[default]"
+#~ msgstr "[預設]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "已經有名為“%s”的帳號存在。"
+
+#~ msgid "Join"
+#~ msgstr "加入"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "日期"
+
+#~ msgid "Chat Rooms"
+#~ msgstr "聊天室"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "正嘗試加入聊天室,請稍等..."
+
+#~ msgid "Default"
+#~ msgstr "預設值"
+
+#~ msgid "Chat!"
+#~ msgstr "聊天!"
+
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s 將會被加入至你的好友名單。"
+
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "有人希望能加入至你的好友名單。"
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "訂閱要求"
+
+#~ msgid "Contact Information"
+#~ msgstr "聯絡人資訊"
+
+#~ msgid "Subject: %s"
+#~ msgstr "主旨:%s"
+
+#~ msgid "Suggestions for the word"
+#~ msgstr "對這個字的建議"
+
+#~ msgid "New subscription request from %s"
+#~ msgstr "來自 %s 的新訂閱要求"
+
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "你是否想將這個人加入至你的好友名單?"
+
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "你是否想將 %s 加入你的好友名單?"
+
+#~ msgid "Please enter your %s account password"
+#~ msgstr "請輸入 %s 的帳號密碼"
+
+#, fuzzy
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "登入到:%s"
+
+#~ msgid "Remember Password?"
+#~ msgstr "是否記下密碼?"
+
+#~ msgid "Could not display the help contents."
+#~ msgstr "無法顯示說明內容。"
+
+#~ msgid "Select Your Avatar Image"
+#~ msgstr "選擇你的大頭貼圖像。"
+
+#~ msgid "No Image"
+#~ msgstr "沒有圖像"
+
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "此伺服器似乎沒有回應。"
+
+#~ msgid "Try again later."
+#~ msgstr "請稍後再試。"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "聊天"
+
+#~ msgid "Contact goes offline"
+#~ msgstr "好友已離線"
+
+#~ msgid "Contact goes online"
+#~ msgstr "好友已上線"
+
+#~ msgid "Contact ID:"
+#~ msgstr "聯絡人 ID:"
+
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "你是否想接受這個檔案?"
+
+#~ msgid "File Transfer Request"
+#~ msgstr "檔案傳輸要求"
+
+#~ msgid "File name:"
+#~ msgstr "檔案名稱:"
+
+#~ msgid "File size:"
+#~ msgstr "檔案大小:"
+
+#~ msgid "Not supported yet"
+#~ msgstr "尚未支援"
+
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "這個人希望傳送給你這個檔案:"
+
+#~ msgid "Web site:"
+#~ msgstr "網站:"
+
+#~ msgid "_Accept"
+#~ msgstr "接受(_A)"
+
+#~ msgid "_Deny"
+#~ msgstr "拒絕(_D)"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>關於</b>"
+
+#~ msgid "Account:"
+#~ msgstr "帳號:"
+
+#, fuzzy
+#~ msgid "Browse:"
+#~ msgstr "法羅文"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "編輯聊天室"
+
+#~ msgid "Group Chat"
+#~ msgstr "群組聊天"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "加入新的(_N)..."
+
+#~ msgid "Join room on start_up"
+#~ msgstr "啟動時加入聊天室(_U)"
+
+#~ msgid "Join this chat room when Gossip starts and you are connected"
+#~ msgstr "當 Gossip 啟動並連上網絡時加入這個聊天室。"
+
+#, fuzzy
+#~ msgid "Manage Favorite Rooms"
+#~ msgstr "管理聊天室"
+
+#~ msgid "N_ame:"
+#~ msgstr "名稱(_A):"
+
+#~ msgid "S_erver:"
+#~ msgstr "伺服器(_E):"
+
+#~ msgid "_Nickname:"
+#~ msgstr "暱稱(_N):"
+
+#~ msgid "_Room:"
+#~ msgstr "聊天室(_R):"
+
+#~ msgid "-"
+#~ msgstr "-"
+
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>關於</b>"
+
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "<b>客戶端資訊</b>"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>關於</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>語言</b>"
+
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>個人資訊</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>連線</b>"
+
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">範例:Mikael 或 user@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "帳號:"
+
+#~ msgid "Add Contact"
+#~ msgstr "加入聯絡人"
+
+#, fuzzy
+#~ msgid "Alia_s:"
+#~ msgstr "別名:"
+
+#~ msgid "Avatar:"
+#~ msgstr "大頭貼:"
+
+#~ msgid "Ch_at"
+#~ msgstr "聊天(_A)"
+
+#~ msgid "Client:"
+#~ msgstr "客戶端:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "聯絡人"
+
+#~ msgid "Connect on S_tartup"
+#~ msgstr "啟動時連線(_T)"
+
+#~ msgid "Contacts"
+#~ msgstr "聯絡人"
+
+#~ msgid "Country:"
+#~ msgstr "國家:"
+
+#~ msgid "Decide _Later"
+#~ msgstr "稍後決定(_L)"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "加入聯絡人"
+
+#~ msgid "Edit Groups"
+#~ msgstr "編輯群組"
+
+#~ msgid "Email:"
+#~ msgstr "電郵:"
+
+#~ msgid "ID:"
+#~ msgstr "ID:"
+
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr "如果你選擇稍後再決定,下次登入時將被再詢問一次。"
+
+#~ msgid "Name:"
+#~ msgstr "名稱:"
+
+#~ msgid "OS:"
+#~ msgstr "作業系統:"
+
+#~ msgid "Personal Details"
+#~ msgstr "個人詳細資料"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "註冊(_G)..."
+
+#~ msgid "Search"
+#~ msgstr "搜尋"
+
+#~ msgid "Spell Checker"
+#~ msgstr "拼字檢查"
+
+#~ msgid "Subscription Request"
+#~ msgstr "訂閱要求"
+
+#~ msgid "Suggestions for the word:"
+#~ msgstr "對這個字的建議:"
+
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "這會做為下面聯絡人清單的過濾器。你可以使用聯絡人的部分名稱或 ID,例如,"
+#~ "「jabber.org」會列出每個使用該伺服器的人"
+
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "這是在你的好友名單上用來顯示此聯絡人的名稱"
+
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "這個名稱會用在聊天視窗中辨識你的身分"
+
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr "這個名稱用在有新的聯絡人查詢你的詳細資訊時可供辨識身分"
+
+#~ msgid "Use system pro_xy"
+#~ msgstr "使用系統的代理伺服器設定(_X)"
+
+#~ msgid "Version:"
+#~ msgstr "版本:"
+
+#~ msgid "View Previous Conversations"
+#~ msgstr "顯示前一次交談"
+
+#~ msgid "Which account do you want to use?"
+#~ msgstr "要使用甚麼帳號名稱?"
+
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "你沒有訂閱這個好友。"
+
+#~ msgid "_Connect"
+#~ msgstr "連線(_C)"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "描述:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "斷線(_D)"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "電郵:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr "在下面輸入你想聊天的人名或聯絡人 ID:"
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "連接埠(_P):"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "名稱(_N):"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "群組:"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "暱稱(_N):"
+
+#~ msgid "_Password:"
+#~ msgstr "密碼(_P):"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "新增訊息"
+
+#~ msgid "_Subscribe"
+#~ msgstr "訂閱(_S)"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "網站:"
+
+#, fuzzy
+#~ msgid "irc account settings"
+#~ msgstr "<b>帳號設定</b>"
+
+#, fuzzy
+#~ msgid "msn account settings"
+#~ msgstr "<b>帳號設定</b>"
+
+#~ msgid "Preset status messages"
+#~ msgstr "預設狀態訊息"
+
+#~ msgid "Preset status messages."
+#~ msgstr "預設狀態訊息"
+
+#~ msgid "Connecting"
+#~ msgstr "正在連線"
+
+#~ msgid "Perhaps you are trying to connect to the wrong port?"
+#~ msgstr "也許你嘗試連線到錯誤的連接埠?"
+
+#~ msgid "Perhaps the service is not currently running?"
+#~ msgstr "也許此伺服器並未執行這個服務?"
+
+#~ msgid "Check your connection details."
+#~ msgstr "請檢查你的連線詳細資訊。"
+
+#~ msgid "Perhaps the server is not running this service."
+#~ msgstr "也許此伺服器並未執行這個服務。"
+
+#~ msgid "Check your username and password are correct."
+#~ msgstr "請檢查你的使用者名稱與密碼是否正確。"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s 將會被加入至你的好友名單。"
+
+#~ msgid "%s ID of new contact:"
+#~ msgstr "新的好友的 %s ID:"
+
+#~ msgid "Example: %s"
+#~ msgstr "範例: %s"
+
+#, fuzzy
+#~ msgid "Show accounts and pending connections"
+#~ msgstr "按這裏顯示帳號及任何進行中的連線。"
+
+#~ msgid "You have no Instant Messaging accounts configured!"
+#~ msgstr "你尚未設定即時通訊帳號!"
+
+#~ msgid ""
+#~ "Next you will be presented with the Account Information dialog to set "
+#~ "your details up."
+#~ msgstr "接下來將會出現帳號資訊對話方塊以讓你設定詳細資訊。"
+
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "請輸入你的邀請訊息給:\n"
+#~ "%s"
+
+#~ msgid "Favourite"
+#~ msgstr "喜好"
+
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/聯絡人資訊(_M)"
+
+#~ msgid "/Re_name Contact"
+#~ msgstr "/更改好友名稱(_N)"
+
+#~ msgid "/_Edit Groups"
+#~ msgstr "/編輯群組(_E)"
+
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "/顯示前一次交談(_V)"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "請輸入以下好友的稱呼\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "編輯 %s 的群組"
+
+#~ msgid "Conversation Log"
+#~ msgstr "對話紀錄"
+
+#~ msgid "Registering account"
+#~ msgstr "註冊帳號"
+
+#~ msgid "Example"
+#~ msgstr "範例"
+
+#~ msgid "Add to _favourites"
+#~ msgstr "加入喜好(_F)"
+
+#~ msgid ""
+#~ "Customize your own nickname, the server and chatroom which you wish to "
+#~ "join."
+#~ msgstr "自訂你的暱稱、伺服器名稱和要進入的聊天室名稱。"
+
+#~ msgid "Edit your chat room details:"
+#~ msgstr "編輯你的群組聊天室詳細資訊:"
+
+#~ msgid "Na_me:"
+#~ msgstr "名稱(_M):"
+
+#~ msgid "New Chat Room"
+#~ msgstr "新增聊天室"
+
+#~ msgid ""
+#~ "Pick a saved chat room from the presets available below and click Join to "
+#~ "start chatting."
+#~ msgstr "從下列可用的預先設定中挑選一個已儲存的聊天室,再按加入開始聊天。"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>要求資訊,請稍候...</b>"
+
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">範例:</span>"
+
+#~ msgid "Account Name"
+#~ msgstr "帳號名稱"
+
+#~ msgid "Connection Details"
+#~ msgstr "連線詳細資料"
+
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "你是不是已經有伺服器的帳號了?"
+
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr "輸入這個帳號在此連線中所使用的連接埠"
+
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr "輸入這個帳號在此連線中所使用的伺服器"
+
+#~ msgid "Enter the user's contact ID:"
+#~ msgstr "輸入該使用者的聯絡人 ID:"
+
+#~ msgid "Enter your real name here"
+#~ msgstr "在這裏輸入你的真實姓名"
+
+#~ msgid "Finished"
+#~ msgstr "完成設定"
+
+#~ msgid "For increased security, enable this option"
+#~ msgstr "為了增進安全性,請啟用這個選項"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip 是一個嶄新的 Jabber 即時通訊客戶端程式。\n"
+#~ "\n"
+#~ "本精靈會協助你設定 Gossip,並連接至你想使用的 Jabber 伺服器。\n"
+#~ "\n"
+#~ "如果準備好,請按「下一頁」。"
+
+#~ msgid ""
+#~ "If you have another machine on your network which 'proxies' the "
+#~ "connection to the internet and you want to use it, enable this option"
+#~ msgstr ""
+#~ "如果在你的網絡中有其他電腦「代理」到網際網絡的連線而你想要使用它,請啟用這"
+#~ "個選項"
+
+#~ msgid ""
+#~ "If you need to set specific connection details, like a different server "
+#~ "or port, you can configure that here:"
+#~ msgstr ""
+#~ "如果需要設定特定的連線資訊,像是不同的伺服器或連接埠,可以在這裏設定:"
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "為了訂閱使用者的上線通知,將送出要求。直到這個要求被同意之前,該使用者在你"
+#~ "的好友名單中將顯示為“離線”。"
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "你想將這個好友加入哪個群組之內?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "Jabber ID:"
+
+#~ msgid ""
+#~ "Leave this blank if you don't want your password stored on a public "
+#~ "machine. If you decide to do this, you will be prompted each time you "
+#~ "connect for a password"
+#~ msgstr ""
+#~ "如果不希望你的密碼儲存在公用的電腦上,可以保持此欄空白。如果決定要這麼做,"
+#~ "每一次連線的時候都會向你提問密碼"
+
+#~ msgid "Nickname:"
+#~ msgstr "暱稱:"
+
+#~ msgid "Port:"
+#~ msgstr "埠號:"
+
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr "請訂閱以接收他們的狀態"
+
+#~ msgid "Registering Account"
+#~ msgstr "註冊帳號"
+
+#~ msgid "Resource:"
+#~ msgstr "資源:"
+
+#~ msgid "Sending request"
+#~ msgstr "正在傳送要求"
+
+#~ msgid "Server:"
+#~ msgstr "伺服器:"
+
+#~ msgid "Web Site:"
+#~ msgstr "網站:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "歡迎使用 Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "該好友使用哪種即時通訊系統?"
+
+#~ msgid "What is your name?"
+#~ msgstr "怎樣稱呼你?"
+
+#~ msgid ""
+#~ "What name do you want to use to identify this account?\n"
+#~ "\n"
+#~ "This name could be something associated with the service provider, for "
+#~ "example, <b>Google</b>."
+#~ msgstr ""
+#~ "要使用何種名稱來識別這個帳號?\n"
+#~ "\n"
+#~ "這個名稱可以是跟其服務的提供者有關的事物,例如,<b>Google</b>。"
+
+#~ msgid "What password do you want to use?"
+#~ msgstr "要使用什麼密碼?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "你使用甚麼名稱?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "你想使用甚麼用戶名稱?"
+
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "你想將這個好友加入哪個帳號之內?"
+
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr "稍後你可以在選單中選取「編輯→帳號」來更改帳號設定。"
+
+#~ msgid ""
+#~ "You need to set a name for the connection, for example, <b>Home</b> or "
+#~ "<b>Laptop</b>."
+#~ msgstr "你需要設定該連線的名稱,例如,<b>家裏</b> 或 <b>筆電</b>。"
+
+#~ msgid "Your Account"
+#~ msgstr "你的帳號"
+
+#~ msgid "Your Identity"
+#~ msgstr "你的身分"
+
+#~ msgid "Your new account has now been set up."
+#~ msgstr "現在已設定好你的新帳號。"
+
+#~ msgid "_Forget"
+#~ msgstr "忘記密碼(_F)"
+
+#~ msgid "_Group Chat"
+#~ msgstr "群組聊天(_G)"
+
+#~ msgid "_No"
+#~ msgstr "否(_N)"
+
+#~ msgid "_Search..."
+#~ msgstr "搜尋(_S)..."
+
+#~ msgid "_Yes"
+#~ msgstr "是(_Y)"
+
+#~ msgid "Respond"
+#~ msgstr "回應"
+
+#~ msgid "Dark"
+#~ msgstr "暗"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "有關 %s 的資訊"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "聊天室:"
+
+#~ msgid "Be silent when away"
+#~ msgstr "「離開」時不發出音效"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "「忙碌」時不發出音效"
+
+#~ msgid "Height of main window"
+#~ msgstr "主視窗高度"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "啟動時主視窗的水平位置。"
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "啟動時主視窗的垂直位置。"
+
+#~ msgid "The width of the main window."
+#~ msgstr "主視窗寬度"
+
+#~ msgid "Whether spell checking should be turned on."
+#~ msgstr "是否開啟拼字檢查。"
+
+#~ msgid "Width of the main window"
+#~ msgstr "主視窗寬度"
+
+#~ msgid "X position of main window"
+#~ msgstr "主視窗水平位置"
+
+#~ msgid "Y position of main window"
+#~ msgstr "主視窗垂直位置"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip 即時通訊軟體"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "邀請至聊天室(_I)"
+
+#~ msgid "Requested Information"
+#~ msgstr "要求的資訊"
+
+#~ msgid "/_Invite to Chat Conference"
+#~ msgstr "/邀請至聊天會議(_I)"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "新增訊息(_N)..."
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "%s 已離線"
+
+#~ msgid "Available..."
+#~ msgstr "有空..."
+
+#~ msgid "Busy..."
+#~ msgstr "忙碌..."
+
+#~ msgid "Away..."
+#~ msgstr "離開..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "連絡資訊(_I)"
+
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>聲音</b>"
+
+#~ msgid "Check spelling while I _type"
+#~ msgstr "當我輸入時檢查拼字(_T)"
+
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - 帳號"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "加入群組聊天(_J)..."
+
+#~ msgid "Por_t:"
+#~ msgstr "連接埠(_T):"
+
+#~ msgid "Requested information."
+#~ msgstr "要求的資訊。"
+
+#~ msgid "Requesting contact information, please wait..."
+#~ msgstr "正要求好友資訊,請稍候..."
+
+#~ msgid "Could not open connection"
+#~ msgstr "無法開啟連線"
+
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "找不到您想要使用的伺服器"
+
+#~ msgid "Connection to the server failed."
+#~ msgstr "連線至伺服器時失敗。"
+
+#~ msgid "Authentication failed"
+#~ msgstr "驗證失敗"
+
+#~ msgid "Written by:"
+#~ msgstr "作者:"
+
+#~ msgid "Artwork by:"
+#~ msgstr "美工:"
+
+#~ msgid "Translated by:"
+#~ msgstr "翻譯:"
+
+#~ msgid "Account ID"
+#~ msgstr "帳號 ID"
+
+#~ msgid "Last Error"
+#~ msgstr "上次錯誤"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%s聊天 - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/顯示對話紀錄(_L)"
+
+#~ msgid "Afrikaans"
+#~ msgstr "南非荷蘭語"
+
+#~ msgid "Amharic"
+#~ msgstr "阿姆哈拉語"
+
+#~ msgid "Arabic"
+#~ msgstr "阿拉伯語"
+
+#~ msgid "Azerbaijani"
+#~ msgstr "亞塞拜然語"
+
+#~ msgid "Belarusian"
+#~ msgstr "白俄羅斯語"
+
+#~ msgid "Bulgarian"
+#~ msgstr "保加利亞語"
+
+#~ msgid "Bengali"
+#~ msgstr "孟加拉語"
+
+#~ msgid "Breton"
+#~ msgstr "不列塔尼語"
+
+#~ msgid "Bosnian"
+#~ msgstr "波士尼亞語"
+
+#~ msgid "Catalan"
+#~ msgstr "加泰隆語"
+
+#~ msgid "Czech"
+#~ msgstr "捷克語"
+
+#~ msgid "Welsh"
+#~ msgstr "威爾士語"
+
+#~ msgid "Danish"
+#~ msgstr "丹麥語"
+
+#~ msgid "German"
+#~ msgstr "德文"
+
+#~ msgid "German (Austria)"
+#~ msgstr "德文(奧地利)"
+
+#~ msgid "German (Germany)"
+#~ msgstr "德文(德意志)"
+
+#~ msgid "German (Swiss)"
+#~ msgstr "德文(瑞士)"
+
+#~ msgid "Greek"
+#~ msgstr "希臘語"
+
+#~ msgid "English"
+#~ msgstr "英文"
+
+#~ msgid "English (Canadian)"
+#~ msgstr "英文(加拿大)"
+
+#~ msgid "English (British)"
+#~ msgstr "英語(英式)"
+
+#~ msgid "English (American)"
+#~ msgstr "英語(美式)"
+
+#~ msgid "Esperanto"
+#~ msgstr "世界語"
+
+#~ msgid "Spanish"
+#~ msgstr "西班牙文"
+
+#~ msgid "Estonian"
+#~ msgstr "愛沙尼亞語"
+
+#~ msgid "Persian"
+#~ msgstr "波斯語"
+
+#~ msgid "Finnish"
+#~ msgstr "芬蘭語"
+
+#~ msgid "French"
+#~ msgstr "法文"
+
+#~ msgid "French (France)"
+#~ msgstr "法文(法蘭西)"
+
+#~ msgid "French (Swiss)"
+#~ msgstr "法文(瑞士)"
+
+#~ msgid "Irish Gaelic"
+#~ msgstr "愛爾蘭蓋爾文"
+
+#~ msgid "Scots Gaelic"
+#~ msgstr "蘇格蘭蓋爾文"
+
+#~ msgid "Gujarati"
+#~ msgstr "印度語"
+
+#~ msgid "Manx Gaelic"
+#~ msgstr "人島蓋爾文"
+
+#~ msgid "Hebrew"
+#~ msgstr "希伯來語"
+
+#~ msgid "Hindi"
+#~ msgstr "印度語(北印度)"
+
+#~ msgid "Croatian"
+#~ msgstr "克羅地亞語"
+
+#~ msgid "Hungarian"
+#~ msgstr "匈牙利語"
+
+#~ msgid "Indonesian"
+#~ msgstr "印尼語"
+
+#~ msgid "Icelandic"
+#~ msgstr "冰島語"
+
+#~ msgid "Italian"
+#~ msgstr "意大利文"
+
+#~ msgid "Japanese"
+#~ msgstr "日語"
+
+#~ msgid "Georgian"
+#~ msgstr "喬治亞語"
+
+#~ msgid "Kannada"
+#~ msgstr "坎納達語"
+
+#~ msgid "Korean"
+#~ msgstr "韓文"
+
+#~ msgid "Kurdish"
+#~ msgstr "庫德語"
+
+#~ msgid "Cornish"
+#~ msgstr "康沃爾語"
+
+#~ msgid "Limburgish"
+#~ msgstr "林堡語"
+
+#~ msgid "Lithuanian"
+#~ msgstr "立陶宛文"
+
+#~ msgid "Latvian"
+#~ msgstr "拉脫維亞語"
+
+#~ msgid "Maori"
+#~ msgstr "毛利語"
+
+#~ msgid "Macedonian"
+#~ msgstr "馬其頓語"
+
+#~ msgid "Malayalam"
+#~ msgstr "馬拉雅拉姆語"
+
+#~ msgid "Mongolian"
+#~ msgstr "蒙古語"
+
+#~ msgid "Marathi"
+#~ msgstr "馬拉塔語"
+
+#~ msgid "Malay"
+#~ msgstr "馬來語"
+
+#~ msgid "Norwegian (Bokmal)"
+#~ msgstr "挪威語(Bokmaal)"
+
+#~ msgid "Nepali"
+#~ msgstr "尼泊爾語"
+
+#~ msgid "Dutch"
+#~ msgstr "荷蘭語"
+
+#~ msgid "Norwegian"
+#~ msgstr "挪威語"
+
+#~ msgid "Norwegian (Nynorsk)"
+#~ msgstr "挪威語(Nynorsk)"
+
+#~ msgid "Norwegian (Nyorsk)"
+#~ msgstr "挪威語(Bokmaal)"
+
+#~ msgid "Oriya"
+#~ msgstr "奧里雅語"
+
+#~ msgid "Punjabi"
+#~ msgstr "旁加語"
+
+#~ msgid "Polish"
+#~ msgstr "波蘭語"
+
+#~ msgid "Portuguese"
+#~ msgstr "葡萄牙文"
+
+#~ msgid "Portuguese (Portugal)"
+#~ msgstr "葡萄牙文(葡萄牙)"
+
+#~ msgid "Portuguese (Brazil)"
+#~ msgstr "葡萄牙文(巴西)"
+
+#~ msgid "Romanian"
+#~ msgstr "羅馬尼亞語"
+
+#~ msgid "Russian"
+#~ msgstr "俄文"
+
+#~ msgid "Kinyarwanda"
+#~ msgstr "盧安達語"
+
+#~ msgid "Slovak"
+#~ msgstr "斯洛伐克語"
+
+#~ msgid "Slovenian"
+#~ msgstr "斯洛文尼亞語"
+
+#~ msgid "Albanian"
+#~ msgstr "阿爾巴尼亞語"
+
+#~ msgid "Serbian"
+#~ msgstr "塞爾維亞語"
+
+#~ msgid "Swedish"
+#~ msgstr "瑞典語"
+
+#~ msgid "Tamil"
+#~ msgstr "泰米爾語"
+
+#~ msgid "Telugu"
+#~ msgstr "泰盧固語"
+
+#~ msgid "Thai"
+#~ msgstr "泰文"
+
+#~ msgid "Turkmen"
+#~ msgstr "土庫曼語"
+
+#~ msgid "Turkish"
+#~ msgstr "土耳其語"
+
+#~ msgid "Ukrainian"
+#~ msgstr "烏克蘭語"
+
+#~ msgid "Vietnamese"
+#~ msgstr "越南文"
+
+#~ msgid "Wallon"
+#~ msgstr "瓦隆語"
+
+#~ msgid "Xhosa"
+#~ msgstr "科薩語"
+
+#~ msgid "Yiddish"
+#~ msgstr "意第緒語"
+
+#~ msgid "Chinese Simplified"
+#~ msgstr "簡體中文"
+
+#~ msgid "Chinese Traditional"
+#~ msgstr "繁體中文"
+
+#~ msgid "View Lo_g"
+#~ msgstr "觀看對話紀錄(_G)"
+
+#, fuzzy
+#~ msgid "Gossip - Chat Rooms"
+#~ msgstr "Gossip - 編輯聊天室"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - 群組聊天"
+
+#, fuzzy
+#~ msgid "Gossip - New Chatroom"
+#~ msgstr "Gossip - 編輯聊天室"
+
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Gossip - 加入好友"
+
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "Gossip - 好友資訊"
+
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - 編輯群組"
+
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - 新增帳號"
+
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - 新訊息"
+
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Gossip - 個人資訊"
+
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Gossip - 偏好設定"
+
+#~ msgid "Gossip - Spell Checker"
+#~ msgstr "Gossip - 拼字檢查"
+
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - 狀態訊息"
+
+#~ msgid "Waiting for server to respond, please wait..."
+#~ msgstr "等候伺服器的回應,請稍候..."
+
+#~ msgid "Connection could not be created"
+#~ msgstr "無法建立連線"
+
+#~ msgid "Redirect"
+#~ msgstr "重新導向"
+
+#~ msgid "Bad Request"
+#~ msgstr "錯誤的要求"
+
+#~ msgid "Not Authorized"
+#~ msgstr "未授權"
+
+#~ msgid "Payment Required"
+#~ msgstr "需付款"
+
+#~ msgid "Forbidden"
+#~ msgstr "被禁止"
+
+#~ msgid "Not Found"
+#~ msgstr "找不到"
+
+#~ msgid "Not Allowed"
+#~ msgstr "不允許"
+
+#~ msgid "Not Acceptable"
+#~ msgstr "不能接受"
+
+#~ msgid "Request Timeout"
+#~ msgstr "要求已逾時"
+
+#~ msgid "Conflict"
+#~ msgstr "衝突"
+
+#~ msgid "Not Implemented"
+#~ msgstr "未實作"
+
+#~ msgid "Remote Server Error"
+#~ msgstr "遠端伺服器錯誤"
+
+#~ msgid "Service Unavailable"
+#~ msgstr "服務無法使用"
+
+#~ msgid "Unknown error."
+#~ msgstr "不明的錯誤。"
+
+#~ msgid "Custom"
+#~ msgstr "自訂"
+
+#~ msgid "The chat room you are trying is not responding."
+#~ msgstr "您所嘗試的聊天室沒有回應。"
+
+#~ msgid "Check your details and try again."
+#~ msgstr "請檢查您的詳細資訊並再試一次。"
+
+#~ msgid "This is currently unsupported."
+#~ msgstr "此項目前不支援。"
+
+#~ msgid "Perhaps the conference server is busy, try again later."
+#~ msgstr "也許此會議伺服器正在忙碌,請稍後再試。"
+
+#~ msgid "Check the server host name is correct and is available."
+#~ msgstr "請檢查伺服器主機名稱是否正確可用。"
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip 現在會嘗試使用這個帳號:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "現在 Gossip 會嘗試註冊帳號:"
+
+#~ msgid "Cus_tomize"
+#~ msgstr "自訂(_T)"
+
+#~ msgid "Edit or Delete this favorite."
+#~ msgstr "編輯或刪除這個喜好。"
+
+#~ msgid "Gossip - Join Chat Room "
+#~ msgstr "Gossip - 加入聊天室"
+
+#~ msgid "Choose a Server"
+#~ msgstr "選取伺服器"
+
+#~ msgid "On what server do you have an account?"
+#~ msgstr "您在哪個伺服器有帳號?"
+
+#~ msgid "Configure Transports"
+#~ msgstr "設定轉送程式"
+
+#~ msgid "_Jabber ID of new contact:"
+#~ msgstr "新的好友的 _Jabber ID:"
+
+#~ msgid "Edit List..."
+#~ msgstr "編輯清單..."
+
+#~ msgid "Automatically Connect"
+#~ msgstr "自動連線"
+
+#~ msgid "Connect _Server:"
+#~ msgstr "連接伺服器(_S):"
+
+#~ msgid "Gossip - Account Information"
+#~ msgstr "Gossip - 帳號資訊"
+
+#~ msgid "_Jabber ID:"
+#~ msgstr "_Jabber ID:"
+
+#~ msgid "Gossip - Edit Favorite"
+#~ msgstr "Gossip - 編輯喜好"
+
+#~ msgid "Gossip - Edit Group Chat Favorites"
+#~ msgstr "Gossip - 編輯群組聊天喜好"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid ""
+#~ "<b>Configuring your new service...</b>\n"
+#~ "This will take a few moments, please wait."
+#~ msgstr ""
+#~ "<b>正在設定您的新服務...</b>\n"
+#~ "這需要一點時間,請稍等。"
+
+#~ msgid "<b>Preferred Service</b>"
+#~ msgstr "<b>偏好的服務</b>"
+
+#~ msgid "<b>Recommended Services</b>"
+#~ msgstr "<b>建議的服務</b>"
+
+#~ msgid ""
+#~ "<b>Requested service requirements...</b>\n"
+#~ "This will take a few moments, please wait."
+#~ msgstr ""
+#~ "<b>正在尋找服務的要件...</b>\n"
+#~ "這需要一點時間,請稍等。"
+
+#~ msgid "Add Account"
+#~ msgstr "新增帳號"
+
+#~ msgid "Add Another Account"
+#~ msgstr "新增其他帳號"
+
+#~ msgid "Choose from list:"
+#~ msgstr "從名單中選取:"
+
+#~ msgid "Configure Transport"
+#~ msgstr "設定轉送程式"
+
+#~ msgid "Configuring Service"
+#~ msgstr "正在設定服務"
+
+#~ msgid "Gossip - Status Presets"
+#~ msgstr "Gossip - 狀態預先設定"
+
+#~ msgid "Gossip - Welcome"
+#~ msgstr "Gossip - 歡迎"
+
+#~ msgid "If you prefer, you can specify your own service:"
+#~ msgstr "如果您喜歡,可以指定您自己的服務:"
+
+#~ msgid "Jabber Account"
+#~ msgstr "Jabber 帳號"
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "Nick name:"
+#~ msgstr "暱稱:"
+
+#~ msgid "Please complete the details below to set up your account: "
+#~ msgstr "請在以下的欄位填上詳細的資料,以設定您的帳號: "
+
+#~ msgid "Populating services..."
+#~ msgstr "計算服務的使用率..."
+
+#~ msgid "Remove Account"
+#~ msgstr "移除帳號"
+
+#~ msgid "Service Details"
+#~ msgstr "服務詳細資料"
+
+#~ msgid "Service:"
+#~ msgstr "服務:"
+
+#~ msgid ""
+#~ "This wizard will allow you to configure your account settings for another "
+#~ "protocol. "
+#~ msgstr "這個精靈會讓您設定其他協定的帳號設定值。"
+
+#~ msgid "Transport Accounts"
+#~ msgstr "轉送程式帳號"
+
+#~ msgid "Use a different server"
+#~ msgstr "使用另一個伺服器"
+
+#~ msgid "Which protocol would you like to set up? "
+#~ msgstr "您想要設定哪個協定?"
+
+#~ msgid ""
+#~ "You can set the status presets which appear in the presence menu on the "
+#~ "main window here."
+#~ msgstr "您可以在此設定顯示在主視窗上線選單中的狀態預先設定。"
+
+#~ msgid "You currently have the following accounts set up:"
+#~ msgstr "您目前已設定下列帳號:"
+
+#~ msgid "_Account Information"
+#~ msgstr "帳號資訊(_A)"
diff --git a/trunk/po/zh_TW.po b/trunk/po/zh_TW.po
new file mode 100644
index 000000000..d69a174df
--- /dev/null
+++ b/trunk/po/zh_TW.po
@@ -0,0 +1,2561 @@
+# traditional Chinese translation of gossip.
+# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+# Abel Cheung <abel@oaka.org>, 2003, 2004.
+# Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: gossip 0.13\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-05-15 23:46+0200\n"
+"PO-Revision-Date: 2006-07-05 07:38+0800\n"
+"Last-Translator: Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>\n"
+"Language-Team: Chinese (traditional) <community@linuxhall.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../data/empathy.desktop.in.h:1
+#, fuzzy
+msgid "Empathy Instant Messenger"
+msgstr "即時通訊程式"
+
+#: ../data/empathy.desktop.in.h:2
+msgid "Instant Messenger"
+msgstr "即時通訊程式"
+
+#: ../data/empathy.schemas.in.h:1
+msgid "Always open a separate chat window for new chats."
+msgstr "永遠為新的聊天開啟個別的聊天視窗。"
+
+#: ../data/empathy.schemas.in.h:2
+msgid "Chat window theme"
+msgstr "聊天視窗佈景主題"
+
+#: ../data/empathy.schemas.in.h:3
+msgid ""
+"Comma separated list of spell checker languages to use (e.g. en, fr, nl)."
+msgstr "以逗號分隔的拼字檢查程式語言清單(例. en, fr, nl)。"
+
+#: ../data/empathy.schemas.in.h:4
+#, fuzzy
+msgid "Compact contact list"
+msgstr "顯示好友名單(_S)"
+
+#: ../data/empathy.schemas.in.h:5
+msgid "Contact list sort criterium"
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:6
+msgid "Default directory to select an avatar image from"
+msgstr "預設用以選擇大頭貼影像的目錄"
+
+#: ../data/empathy.schemas.in.h:7
+msgid "Enable popup when contact is available"
+msgstr "當連絡人上線時使用彈出式選單"
+
+#: ../data/empathy.schemas.in.h:8
+msgid "Enable sound when away"
+msgstr "當「離開」時啟用音效"
+
+#: ../data/empathy.schemas.in.h:9
+msgid "Enable sound when busy"
+msgstr "當「忙碌」時啟用音效"
+
+#: ../data/empathy.schemas.in.h:10
+#, fuzzy
+msgid "Enable spell checker"
+msgstr "啟用拼字檢查"
+
+#: ../data/empathy.schemas.in.h:11
+msgid "Hide main window"
+msgstr "隱藏主視窗"
+
+#: ../data/empathy.schemas.in.h:12
+msgid "Hide the main window."
+msgstr "隱藏主視窗。"
+
+#: ../data/empathy.schemas.in.h:13
+msgid "Open new chats in separate windows"
+msgstr "在個別視窗中開啟新聊天"
+
+#: ../data/empathy.schemas.in.h:14
+msgid "Show avatars"
+msgstr "顯示大頭貼"
+
+#: ../data/empathy.schemas.in.h:15
+#, fuzzy
+msgid "Show hint about closing the main window"
+msgstr "主視窗高度"
+
+#: ../data/empathy.schemas.in.h:16
+msgid "Show offline contacts"
+msgstr "顯示已離線的好友"
+
+#: ../data/empathy.schemas.in.h:17
+msgid "Spell checking languages"
+msgstr "拼字檢查程式語言"
+
+#: ../data/empathy.schemas.in.h:18
+msgid "The last directory that an avatar image was chosen from."
+msgstr "用來選擇大頭貼影像的最後目錄。"
+
+#: ../data/empathy.schemas.in.h:19
+msgid "The theme that is used to display the conversation in chat windows."
+msgstr "這個佈景主題會用在聊天視窗中顯示交談。"
+
+#: ../data/empathy.schemas.in.h:20
+msgid "Use graphical smileys"
+msgstr "使用表情圖示"
+
+#: ../data/empathy.schemas.in.h:21
+msgid "Use notification sounds"
+msgstr "使用音效來通知收到訊息"
+
+#: ../data/empathy.schemas.in.h:22
+#, fuzzy
+msgid "Use theme for chat rooms"
+msgstr "加入該聊天室"
+
+#: ../data/empathy.schemas.in.h:23
+msgid ""
+"Whether or not to check words typed against the languages you want to check "
+"with."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:24
+msgid ""
+"Whether or not to convert smileys into graphical images in conversations."
+msgstr "在對話時,是否將代表表情圖示的字符轉換為真正的圖示。"
+
+#: ../data/empathy.schemas.in.h:25
+msgid "Whether or not to play a sound when messages arrive."
+msgstr "將收到訊息時,是否播放音效。"
+
+#: ../data/empathy.schemas.in.h:26
+msgid "Whether or not to play sounds when away."
+msgstr "當離開時是否播放音效。"
+
+#: ../data/empathy.schemas.in.h:27
+msgid "Whether or not to play sounds when busy."
+msgstr "當忙碌時是否播放音效。"
+
+#: ../data/empathy.schemas.in.h:28
+msgid "Whether or not to show a popup when a contact becomes available."
+msgstr "當連絡人上線時,是否顯示彈出式視窗。"
+
+#: ../data/empathy.schemas.in.h:29
+msgid ""
+"Whether or not to show avatars for contacts in the contact list and chat "
+"windows."
+msgstr "是否在連絡人清單與聊天視窗中顯示大頭貼。"
+
+#: ../data/empathy.schemas.in.h:30
+msgid "Whether or not to show contacts that are offline in the contact list."
+msgstr "是否顯示清單中離線的好友。"
+
+#: ../data/empathy.schemas.in.h:31
+msgid ""
+"Whether or not to show the message dialog about closing the main window with "
+"the 'x' button in the title bar."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:32
+#, fuzzy
+msgid "Whether to show the contact list in compact mode or not."
+msgstr "是否在連絡人清單與聊天視窗中顯示大頭貼。"
+
+#: ../data/empathy.schemas.in.h:33
+msgid "Whether to use the theme for chat rooms or not."
+msgstr ""
+
+#: ../data/empathy.schemas.in.h:34
+msgid ""
+"Which criterium to use when sorting the contact list. Default is to use sort "
+"by the contact's name with the value \"name\". A value of \"state\" will "
+"sort the contact list by state."
+msgstr ""
+
+#: ../libempathy/gossip-contact.c:654 ../libempathy/gossip-presence.c:184
+#: ../libempathy/gossip-presence.c:283
+msgid "Offline"
+msgstr "離線"
+
+#: ../libempathy/gossip-presence.c:274
+msgid "Available"
+msgstr "已連線"
+
+#: ../libempathy/gossip-presence.c:276
+msgid "Busy"
+msgstr "忙碌"
+
+#: ../libempathy/gossip-presence.c:279
+msgid "Away"
+msgstr "離開"
+
+#: ../libempathy-gtk/empathy-main-window.c:254
+#, fuzzy
+msgid "Show and edit accounts"
+msgstr "顯示好友名單(_S)"
+
+#: ../libempathy-gtk/empathy-main-window.c:456
+msgid "Group"
+msgstr "群組"
+
+#: ../libempathy-gtk/empathy-main-window.c:477
+#, fuzzy
+msgid "Contact"
+msgstr "連絡人"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:1
+#, fuzzy
+msgid "Contact List - Empathy"
+msgstr "隱藏好友名單(_H)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:2
+#, fuzzy
+msgid "Context"
+msgstr "內容(_C)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:3
+#, fuzzy
+msgid "Join _Favorites"
+msgstr "加入喜好(_F)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:4
+#: ../libempathy-gtk/gossip-chat.glade.h:10
+msgid "Join _New..."
+msgstr "加入新的(_N)..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:5
+#, fuzzy
+msgid "Manage Favorites..."
+msgstr "加入喜好(_F)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:6
+msgid "Show _Offline Contacts"
+msgstr "顯示已離線的好友(_O)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:7
+#, fuzzy
+msgid "_About"
+msgstr "帳號(_A)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:8
+msgid "_Accounts"
+msgstr "帳號(_A)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:9
+#: ../libempathy-gtk/gossip-chat.glade.h:15
+msgid "_Add Contact..."
+msgstr "加入好友(_A)..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:10
+#: ../libempathy-gtk/gossip-contact-list.c:298
+msgid "_Chat"
+msgstr "聊天(_C)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:11
+msgid "_Contents"
+msgstr "內容(_C)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:12
+#: ../libempathy-gtk/gossip-chat.glade.h:21
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "_Edit"
+msgstr "編輯"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:13
+msgid "_Help"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:14
+#: ../libempathy-gtk/empathy-status-icon.glade.h:2
+msgid "_New Message..."
+msgstr "新增訊息(_N)..."
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:15
+msgid "_Personal Information"
+msgstr "個人資訊(_P)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:16
+msgid "_Preferences"
+msgstr "偏好設定(_P)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:17
+#: ../libempathy-gtk/empathy-status-icon.glade.h:3
+msgid "_Quit"
+msgstr ""
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:18
+#: ../libempathy-gtk/gossip-chat.glade.h:25
+msgid "_Room"
+msgstr "聊天室(_R)"
+
+#: ../libempathy-gtk/empathy-main-window.glade.h:19
+#: ../libempathy-gtk/gossip-chat.glade.h:28
+#: ../libempathy-gtk/gossip-contact-list.c:326
+msgid "_View Previous Conversations"
+msgstr "顯示前一次交談(_V)"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:1
+msgid "Status"
+msgstr "狀態"
+
+#: ../libempathy-gtk/empathy-status-icon.glade.h:4
+msgid "_Show Contact List"
+msgstr "顯示好友名單(_S)"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:63
+#, fuzzy
+msgid ""
+"Empathy is free software; you can redistribute it and/or modify it under the "
+"terms of the GNU General Public License as published by the Free Software "
+"Foundation; either version 2 of the License, or (at your option) any later "
+"version."
+msgstr ""
+"Gossip 是自由軟體;您可以遵照自由軟體基金會 (Free Software Foundation) 出版"
+"的 GNU 通用公共許可證條款 (GNU General Public License) 第二版來修改和重新發佈"
+"這一程式,或者自由選擇使用任何更新的版本。"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:67
+#, fuzzy
+msgid ""
+"Empathy is distributed in the hope that it will be useful, but WITHOUT ANY "
+"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS "
+"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more "
+"details."
+msgstr ""
+"發佈 Gossip 的目的是希望它有用,但沒有任何擔保。甚至沒有適合特定目的而隱含的"
+"擔保。更詳細的情況請參閱 GNU 通用公共許可證。"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:71
+#, fuzzy
+msgid ""
+"You should have received a copy of the GNU General Public License along with "
+"Empathy; if not, write to the Free Software Foundation, Inc., 51 Franklin "
+"Street, Fifth Floor, Boston, MA 02110-130159 USA"
+msgstr ""
+"您應該已經和 Gossip 一起收到一份 GNU 通用公共許可證的副本;如果還沒有,寫信"
+"給: Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA "
+"02111-1307 USA"
+
+#: ../libempathy-gtk/gossip-about-dialog.c:99
+msgid "An Instant Messaging client for GNOME"
+msgstr "GNOME 的即時通訊軟體"
+
+# Abel's note: The dialog is really not wide enough to show email with name.
+#
+#: ../libempathy-gtk/gossip-about-dialog.c:105
+msgid "translator-credits"
+msgstr ""
+"如對翻譯有任何意見,請送一封電子郵件給\n"
+"以下地址,GNOME 翻譯團隊會盡快回覆您:\n"
+"community@linuxhall.org\n"
+"\n"
+"Chao-Hsiung Liao <j_h_liau@yahoo.com.tw>, 2003, 05\n"
+"Craig Jeffares <cjeffares@novell.com>, 2004\n"
+"Joe Man <trmetal@yahoo.com.hk>, 2001"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:224
+#, fuzzy
+msgid "Disable"
+msgstr "已連線"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:227
+msgid "Enable"
+msgstr "啟用"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:261
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:3
+#, fuzzy
+msgid "<b>No Account Selected</b>"
+msgstr "<b>帳號設定</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:263
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:272
+#, fuzzy
+msgid "<b>No Accounts Configured</b>"
+msgstr "<b>帳號設定</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:274
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to start configuring."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:362
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:6
+msgid "Accounts"
+msgstr "帳號"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:857
+#, c-format
+msgid ""
+"You are about to remove your %s account!\n"
+"Are you sure you want to proceed?"
+msgstr ""
+"即將移除您的 %s 帳號!\n"
+"確定要繼續嗎?"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.c:863
+msgid ""
+"Any associated conversations and chat rooms will NOT be removed if you "
+"decide to proceed.\n"
+"\n"
+"Should you decide to add the account back at a later time, they will still "
+"be available."
+msgstr ""
+"如果您決定繼續,任何相關的交談及聊天室將 不會 被移除。\n"
+"\n"
+"若您稍後決定將該帳號加回來,它們仍然可以使用。"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:1
+msgid "<b>Account</b>"
+msgstr "<b>帳戶</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:2
+#, fuzzy
+msgid "<b>New Account</b>"
+msgstr "<b>帳戶</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:4
+#, fuzzy
+msgid "<b>Settings</b>"
+msgstr "<b>帳號設定</b>"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:5
+msgid "A unique name for this account to identify it personally to you."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:7
+#, fuzzy
+msgid "Cr_eate"
+msgstr "聊天!"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:8
+msgid "Imendio "
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:9
+msgid "Jabber"
+msgstr "Jabber"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:10
+msgid ""
+"To add a new account, you can click on the 'Add' button and a new entry will "
+"be created for you to started configuring.\n"
+"\n"
+"If you do not want to add an account, simply click on the account you want "
+"to configure in the list on the left."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:13
+msgid "_Name:"
+msgstr "名稱(_N):"
+
+#: ../libempathy-gtk/gossip-accounts-dialog.glade.h:14
+#, fuzzy
+msgid "_Type:"
+msgstr "題目(_T):"
+
+#: ../libempathy-gtk/gossip-account-widget-generic.c:144
+#: ../libempathy-gtk/gossip-account-widget-generic.c:186
+#, c-format
+msgid "%s:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:1
+#, fuzzy
+msgid ""
+"<small><b><span foreground=\"#555\">Example: user@jabber.org</span></b></"
+"small>"
+msgstr "<span size=\"smaller\">範例:user@jabber.org</span>"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:2
+msgid "Forget password and clear the entry."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:3
+msgid "Login I_D:"
+msgstr "登入 I_D:"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:4
+msgid "Pass_word:"
+msgstr "密碼(_W):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:5
+msgid "Reso_urce:"
+msgstr "資源(_U):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:6
+#, fuzzy
+msgid "Use encryption (SS_L)"
+msgstr "將訊息加密(_SSL)"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:7
+msgid "_Port:"
+msgstr "連接埠(_P):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:8
+msgid "_Server:"
+msgstr "伺服器(_S):"
+
+#: ../libempathy-gtk/gossip-account-widget-jabber.glade.h:9
+#, fuzzy
+msgid "jabber account settings"
+msgstr "<b>帳號設定</b>"
+
+#: ../libempathy-gtk/gossip-chat.c:314
+msgid "Disconnected"
+msgstr "已斷線"
+
+#: ../libempathy-gtk/gossip-chat.c:858
+msgid "Insert Smiley"
+msgstr "插入笑臉影像"
+
+#: ../libempathy-gtk/gossip-chat.c:906
+msgid "_Check Word Spelling..."
+msgstr "檢查拼字(_C)..."
+
+#: ../libempathy-gtk/gossip-chat.c:1244
+msgid "Connected"
+msgstr "已連線"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:1
+#, fuzzy
+msgid "C_lear"
+msgstr "清除(_L)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:2
+msgid "Change _Topic..."
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:3
+msgid "Chat"
+msgstr "聊天"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:4
+msgid "Contact Infor_mation"
+msgstr "連絡人資訊(_M)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:5
+#, fuzzy
+msgid "Cu_t"
+msgstr "聊天(_A)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:6
+#, fuzzy
+msgid "In_vite..."
+msgstr "邀請(_V)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:7
+msgid "Insert _Smiley"
+msgstr "插入笑臉影像(_S)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:8
+#, fuzzy
+msgid "Invitation _message:"
+msgstr "輸入狀態訊息:"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:9
+#, fuzzy
+msgid "Invite"
+msgstr "邀請(_V)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:11
+msgid "Move Tab _Left"
+msgstr "將分頁左移(_L)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:12
+msgid "Move Tab _Right"
+msgstr "將分頁右移(_R)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:13
+msgid "Select who would you like to invite:"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:14
+msgid "You have been invited to join a chat conference."
+msgstr "您已經被邀請參加聊天會議。"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:16
+msgid "_Add To Favorites"
+msgstr "加入喜好(_A)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:17
+msgid "_Close"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:18
+msgid "_Conversation"
+msgstr "對話(_C)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:19
+msgid "_Copy"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-chat.glade.h:20
+msgid "_Detach Tab"
+msgstr "脫離分頁(_D)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:22
+msgid "_Next Tab"
+msgstr "下個分頁(_N)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:23
+#, fuzzy
+msgid "_Paste"
+msgstr "日期"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:24
+msgid "_Previous Tab"
+msgstr "上個分頁(_P)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:26
+msgid "_Show Contacts"
+msgstr "顯示好友名單(_S)"
+
+#: ../libempathy-gtk/gossip-chat.glade.h:27
+msgid "_Tabs"
+msgstr "分頁(_T)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:544
+msgid "_Copy Link Address"
+msgstr "複製鏈結地址(_C)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:552
+msgid "_Open Link"
+msgstr "開啟連結(_O)"
+
+#: ../libempathy-gtk/gossip-chat-view.c:889
+msgid "%A %d %B %Y"
+msgstr "%Y-%m-%d (%A)"
+
+#: ../libempathy-gtk/gossip-chat-window.c:685
+#: ../libempathy-gtk/gossip-chat-window.c:715
+#, fuzzy
+msgid "New Message"
+msgid_plural "New Messages"
+msgstr[0] "新增訊息"
+msgstr[1] "新增訊息"
+
+#: ../libempathy-gtk/gossip-chat-window.c:691
+msgid "Chat Room"
+msgstr "聊天室"
+
+#: ../libempathy-gtk/gossip-chat-window.c:696
+#: ../libempathy-gtk/gossip-chat-window.c:719
+#, fuzzy, c-format
+msgid "Conversation"
+msgid_plural "Conversations (%d)"
+msgstr[0] "對話(_C)"
+msgstr[1] "對話(_C)"
+
+#: ../libempathy-gtk/gossip-chat-window.c:1295
+msgid "Typing a message."
+msgstr "正在鍵入訊息。"
+
+#: ../libempathy-gtk/gossip-contact-list.c:290
+#, fuzzy
+msgid "_Contact"
+msgstr "連絡人"
+
+#: ../libempathy-gtk/gossip-contact-list.c:294
+#, fuzzy
+msgid "_Group"
+msgstr "群組"
+
+#: ../libempathy-gtk/gossip-contact-list.c:298
+#, fuzzy
+msgid "Chat with contact"
+msgstr "加入好友"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "Infor_mation"
+msgstr "連絡人資訊(_M)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:302
+#, fuzzy
+msgid "View contact information"
+msgstr "好友資訊"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Re_name"
+msgstr "/更改群組名稱(_N)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:306
+#, fuzzy
+msgid "Rename"
+msgstr "檔案名稱:"
+
+#: ../libempathy-gtk/gossip-contact-list.c:310
+#, fuzzy
+msgid "Edit the groups and name for this contact"
+msgstr "請輸入這個帳號的名稱"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "_Remove"
+msgstr "/移除好友(_R)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:314
+#, fuzzy
+msgid "Remove contact"
+msgstr "/移除好友(_R)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+#, fuzzy
+msgid "_Invite to Chat Room"
+msgstr "/邀請至聊天室(_I)"
+
+#: ../libempathy-gtk/gossip-contact-list.c:318
+msgid "Invite to a currently open chat room"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "_Send File..."
+msgstr "/傳送檔案(_S)..."
+
+#: ../libempathy-gtk/gossip-contact-list.c:322
+#, fuzzy
+msgid "Send a file"
+msgstr "選擇一個檔案"
+
+#: ../libempathy-gtk/gossip-contact-list.c:326
+#, fuzzy
+msgid "View previous conversations with this contact"
+msgstr "顯示前一次交談"
+
+#: ../libempathy-gtk/gossip-preferences.c:250
+msgid "Language"
+msgstr "語言"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:1
+msgid "<b>Appearance</b>"
+msgstr "<b>外觀</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:2
+msgid "<b>Audio</b>"
+msgstr "<b>音訊</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:3
+msgid "<b>Behaviour</b>"
+msgstr "<b>行為</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:4
+#, fuzzy
+msgid "<b>Contact List</b>"
+msgstr "<b>狀態</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:5
+msgid "<b>Languages</b>"
+msgstr "<b>語言</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:6
+#, fuzzy
+msgid "<b>Options</b>"
+msgstr "<b>連線</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:7
+msgid "<b>Visual</b>"
+msgstr "<b>視覺效果</b>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:8
+msgid ""
+"<small>The list of languages reflects only the languages for which you have "
+"a dictionary installed.</small>"
+msgstr "<small>這裡的語言清單只反映出您已經安裝字典的語言。</small>"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:9
+msgid "Avatars are user chosen images shown in the contact list"
+msgstr "大頭貼是使用者選擇來提供連絡人清單顯示用的"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:10
+msgid "Chat Th_eme:"
+msgstr "聊天佈景主題(_E):"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:11
+msgid "Display notifications when contacts come _online"
+msgstr "連絡人上線時顯示通知(_O)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:12
+msgid "Enable sounds when _away"
+msgstr "當「離開」時啟用音效(_A)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:13
+msgid "Enable sounds when _busy"
+msgstr "當「忙碌」時啟用音效(_B)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:14
+msgid "General"
+msgstr "一般"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:15
+msgid "Notifications"
+msgstr "通知"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:16
+msgid "Preferences"
+msgstr "偏好設定"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:17
+msgid "Show _avatars"
+msgstr "顯示大頭貼(_A)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:18
+msgid "Show _smileys as images"
+msgstr "以影像顯示表情符號(_S)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:19
+#, fuzzy
+msgid "Show co_mpact contact list"
+msgstr "顯示好友名單(_S)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:20
+msgid "Sort by _name"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:21
+msgid "Sort by s_tate"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:22
+msgid "Spell Checking"
+msgstr "拼字檢查"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:23
+msgid "Themes"
+msgstr ""
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:24
+#, fuzzy
+msgid "_Enable spell checking"
+msgstr "啟用拼字檢查"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:25
+msgid "_Open new chats in separate windows"
+msgstr "在個別視窗開啟新的聊天(_O)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:26
+msgid "_Play sound when messages arrive"
+msgstr "收到訊息時播放音效(_P)"
+
+#: ../libempathy-gtk/gossip-preferences.glade.h:27
+#, fuzzy
+msgid "_Use for chat rooms"
+msgstr "儲存此聊天室(_T)"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:702
+msgid "Custom message..."
+msgstr "自訂訊息..."
+
+#. Clear list
+#: ../libempathy-gtk/gossip-presence-chooser.c:724
+msgid "Clear List..."
+msgstr "清除清單..."
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:803
+#, fuzzy
+msgid "Are you sure you want to clear the list?"
+msgstr "確定要清空這個清單?"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:807
+msgid ""
+"This will remove any custom messages you have added to the list of preset "
+"status messages."
+msgstr "這樣會移除任何您曾加入到預先設定狀態訊息清單中的自訂訊息。"
+
+#: ../libempathy-gtk/gossip-presence-chooser.c:812
+msgid "Clear List"
+msgstr "清除清單"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:1
+msgid "Enter status message:"
+msgstr "輸入狀態訊息:"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:2
+msgid "Status Message Presets"
+msgstr "狀態訊息預先設定"
+
+#: ../libempathy-gtk/gossip-presence-chooser.glade.h:3
+#, fuzzy
+msgid "_Add to status message list"
+msgstr "加入至狀態訊息清單"
+
+#: ../libempathy-gtk/gossip-private-chat.c:198
+#, c-format
+msgid "%s went offline"
+msgstr "%s 已離線"
+
+#: ../libempathy-gtk/gossip-private-chat.c:212
+#, c-format
+msgid "%s has come online"
+msgstr "%s 已經上線"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:87
+msgid "Classic"
+msgstr "古典"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:88
+#, fuzzy
+msgid "Simple"
+msgstr "範例"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:89
+#, fuzzy
+msgid "Clean"
+msgstr "清除(_L)"
+
+#: ../libempathy-gtk/gossip-theme-manager.c:90
+msgid "Blue"
+msgstr "藍色"
+
+#: ../src/empathy-main.c:145
+msgid "Don't connect on startup"
+msgstr "啟動程式時不進行連線"
+
+#: ../src/empathy-main.c:155
+#, fuzzy
+msgid "- Empathy Instant Messenger"
+msgstr "- Gossip 即時通訊程式"
+
+#~ msgid "Gossip Instant Messenger"
+#~ msgstr "Gossip 即時通訊程式"
+
+#~ msgid "Normal"
+#~ msgstr "正常"
+
+#~ msgid "Joining"
+#~ msgstr "加入中"
+
+#~ msgid "Active"
+#~ msgstr "使用中"
+
+#~ msgid "Inactive"
+#~ msgstr "未使用"
+
+#~ msgid "Unknown"
+#~ msgstr "不明"
+
+#~ msgid "Error"
+#~ msgstr "錯誤"
+
+#, fuzzy
+#~ msgid "Participant"
+#~ msgid_plural "Participants"
+#~ msgstr[0] "加利西亞文"
+#~ msgstr[1] "加利西亞文"
+
+#, fuzzy
+#~ msgid "No role"
+#~ msgstr "正常"
+
+#, fuzzy
+#~ msgid "No affiliation"
+#~ msgstr "通知"
+
+#~ msgid "The nickname you have chosen is already in use."
+#~ msgstr "您所選的暱稱已經被使用了。"
+
+#~ msgid "The chat room you tried to join requires a password."
+#~ msgstr "您嘗試加入的聊天室需要密碼。"
+
+#~ msgid "The remote conference server did not respond in a sensible time."
+#~ msgstr "遠端會議伺服器沒有在時間內回應。"
+
+#~ msgid "The conference server you tried to join could not be found."
+#~ msgstr "找不到您嘗試加入的會議伺服器。"
+
+#~ msgid "An unknown error occurred, check your details are correct."
+#~ msgstr "發生了未知的錯誤,請檢查您的詳細資訊是否正確。"
+
+#, fuzzy
+#~ msgid "Joining the chatroom was canceled."
+#~ msgstr "加入該聊天室"
+
+#~ msgid "Unavailable"
+#~ msgstr "無法使用"
+
+#~ msgid "An unknown error occurred."
+#~ msgstr "發生不明的錯誤。"
+
+#~ msgid "Connection refused."
+#~ msgstr "連線被拒絕。"
+
+#~ msgid "Server address could not be resolved."
+#~ msgstr "無法解析伺服器位址。"
+
+#~ msgid "Connection timed out."
+#~ msgstr "連線已逾時。"
+
+#~ msgid "Authentication failed."
+#~ msgstr "驗證已失敗。"
+
+#~ msgid "The username you are trying already exists."
+#~ msgstr "您所輸入的使用者名稱已經被使用了。"
+
+#~ msgid "The username you are trying is not valid."
+#~ msgstr "您所輸入的使用者名稱是無效的。"
+
+#~ msgid "This feature is unavailable."
+#~ msgstr "這項功能無法使用。"
+
+#~ msgid "This feature is unauthorized."
+#~ msgstr "這項功能未獲授權。"
+
+#~ msgid "A specific protocol error occurred that was unexpected."
+#~ msgstr "指定的通訊協定發生未預期的錯誤。"
+
+#, fuzzy
+#~ msgid "new account"
+#~ msgstr "新增帳號"
+
+#~ msgid "Home"
+#~ msgstr "首頁"
+
+#~ msgid "Couldn't send message!"
+#~ msgstr "無法傳送訊息!"
+
+#~ msgid "Connection could not be opened"
+#~ msgstr "無法開啟連線"
+
+#, fuzzy
+#~ msgid "This service is unavailable or not found"
+#~ msgstr "這項功能無法使用。"
+
+#, fuzzy
+#~ msgid "Registration is required"
+#~ msgstr "註冊"
+
+#, fuzzy
+#~ msgid "There was an internal service error"
+#~ msgstr "內部的伺服器錯誤"
+
+#, fuzzy
+#~ msgid "This feature is not implemented"
+#~ msgstr "這項功能未獲授權。"
+
+#, fuzzy
+#~ msgid "The remote service timed out"
+#~ msgstr "遠端伺服器逾時"
+
+#~ msgid "Stop"
+#~ msgstr "停止"
+
+#~ msgid "Disconnect"
+#~ msgstr "中斷連線"
+
+#~ msgid "Connect"
+#~ msgstr "連線"
+
+#, fuzzy
+#~ msgid "Successfully registered your new account settings."
+#~ msgstr "成功註冊帳號"
+
+#, fuzzy
+#~ msgid "You should now be able to connect to your new account."
+#~ msgstr "您不能將 --no-connect 與 --account 一起使用"
+
+#, fuzzy
+#~ msgid "Failed to register your new account settings."
+#~ msgstr "註冊新帳號設定值不成功"
+
+#, fuzzy
+#~ msgid "Successfully changed your account password."
+#~ msgstr "輸入您的帳號密碼: "
+
+#, fuzzy
+#~ msgid "Failed to change your account password."
+#~ msgstr "輸入您的帳號密碼: "
+
+#, fuzzy
+#~ msgid ""
+#~ "Please enter a new password for this account:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "請為新的群組命名:\n"
+#~ "%s"
+
+#~ msgid "No information is available for this contact."
+#~ msgstr "沒有這個好友的相關資訊。"
+
+#~ msgid "Information requested, please wait..."
+#~ msgstr "要求資訊,請稍候..."
+
+#~ msgid "I would like to add you to my contact list."
+#~ msgstr "我希望可以將您加入我的好友名單之內。"
+
+#~ msgid "To summarize:"
+#~ msgstr "要做總結:"
+
+#, fuzzy
+#~ msgid "%d new message"
+#~ msgid_plural "%d new messages"
+#~ msgstr[0] "新增訊息"
+#~ msgstr[1] "新增訊息"
+
+#, fuzzy
+#~ msgid "%d subscription request"
+#~ msgid_plural "%d subscription requests"
+#~ msgstr[0] "訂閱要求"
+#~ msgstr[1] "訂閱要求"
+
+#, fuzzy
+#~ msgid "%d file transfer request"
+#~ msgid_plural "%d file transfer requests"
+#~ msgstr[0] "檔案傳輸要求"
+#~ msgstr[1] "檔案傳輸要求"
+
+#, fuzzy
+#~ msgid "%d server message"
+#~ msgid_plural "%d server messages"
+#~ msgstr[0] "無法傳送訊息!"
+#~ msgstr[1] "無法傳送訊息!"
+
+#, fuzzy
+#~ msgid "%d error"
+#~ msgid_plural "%d errors"
+#~ msgstr[0] "錯誤"
+#~ msgstr[1] "錯誤"
+
+#~ msgid "If you quit, you will lose all unread information."
+#~ msgstr "如果離開,您將失去所有未閱讀的資訊。"
+
+#~ msgid "Edit Account _Details"
+#~ msgstr "編輯帳號詳細資訊(_D)"
+
+#~ msgid "Click to enlarge"
+#~ msgstr "按這裡放大"
+
+#~ msgid "Word"
+#~ msgstr "字"
+
+#~ msgid "New message from %s"
+#~ msgstr "收到來自 %s 的新訊息"
+
+#~ msgid "Your invitation has been declined"
+#~ msgstr "您的邀請被拒絕了"
+
+#~ msgid "Accept"
+#~ msgstr "接受"
+
+#~ msgid "Decline"
+#~ msgstr "拒絕"
+
+#, fuzzy
+#~ msgid "Name"
+#~ msgstr "名稱:"
+
+#, fuzzy
+#~ msgid "Room"
+#~ msgstr "聊天室(_R)"
+
+#~ msgid "Auto Connect"
+#~ msgstr "自動連線"
+
+#~ msgid "Information requested..."
+#~ msgstr "要求資訊..."
+
+#~ msgid "Do you want to remove this contact from your roster?"
+#~ msgstr "是否想從名單中移除這個好友?"
+
+#~ msgid ""
+#~ "Please enter a new name for the group:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "請為新的群組命名:\n"
+#~ "%s"
+
+#~ msgid "Select"
+#~ msgstr "選擇"
+
+#~ msgid "Unsorted"
+#~ msgstr "未排序"
+
+#~ msgid "New file transfer request from %s"
+#~ msgstr "來自 %s 的檔案傳輸要求"
+
+#~ msgid "File transfer is not supported by both parties."
+#~ msgstr "雙方都不支援檔案傳輸。"
+
+#~ msgid "Your file transfer offer declined."
+#~ msgstr "您的檔案傳輸要求被拒絕了。"
+
+#~ msgid "The other user decided not to continue."
+#~ msgstr "另一個使用者決定不要繼續。"
+
+#~ msgid "Unknown error occurred during file transfer."
+#~ msgstr "在檔案傳輸過程中遇到未知的錯誤。"
+
+#~ msgid "%s would like to send you a file."
+#~ msgstr "%s 希望可以傳送給您一個檔案。"
+
+#~ msgid "Someone would like to send you a file."
+#~ msgstr "某人想要傳送給您一個檔案。"
+
+#~ msgid "Select a file"
+#~ msgstr "選擇一個檔案"
+
+#, fuzzy
+#~ msgid "Connecting..."
+#~ msgstr "正在連線"
+
+#, fuzzy
+#~ msgid "Retry connection"
+#~ msgstr "停止連線"
+
+#~ msgid "Invited %s to join this chat conference."
+#~ msgstr "邀請 %s 參加這個聊天會議。"
+
+#, fuzzy
+#~ msgid "%s has set the topic: %s"
+#~ msgstr "%s 已經設定該主題"
+
+#, fuzzy
+#~ msgid "Enter the new topic you want to set for this room:"
+#~ msgstr "您想使用甚麼稱呼來代表這個好友?"
+
+#, fuzzy
+#~ msgid "%s has joined the room"
+#~ msgstr "%s 已經設定該主題"
+
+#, fuzzy
+#~ msgid "%s has left the room"
+#~ msgstr "%s 已經設定該主題"
+
+#, fuzzy
+#~ msgid "Topic: %s"
+#~ msgstr "題目(_T):"
+
+#~ msgid "Account"
+#~ msgstr "帳號"
+
+#~ msgid "Conversation With"
+#~ msgstr "交談於"
+
+#~ msgid "Date"
+#~ msgstr "日期"
+
+#~ msgid "List the available accounts"
+#~ msgstr "列出可供使用的帳號"
+
+#~ msgid "Which account to connect to on startup"
+#~ msgstr "程式啟動時自動連接至哪個帳號"
+
+#~ msgid "ACCOUNT-NAME"
+#~ msgstr "帳號名稱"
+
+#~ msgid "You can not use --no-connect together with --account"
+#~ msgstr "您不能將 --no-connect 與 --account 一起使用"
+
+#~ msgid "No accounts available."
+#~ msgstr "沒有可用的帳號。"
+
+#~ msgid "Available accounts:"
+#~ msgstr "可使用的帳號:"
+
+#~ msgid "[default]"
+#~ msgstr "[預設]"
+
+#~ msgid "There is no account with the name '%s'."
+#~ msgstr "已經有名為“%s”的帳號存在。"
+
+#~ msgid "Join"
+#~ msgstr "加入"
+
+#, fuzzy
+#~ msgid "Create"
+#~ msgstr "日期"
+
+#~ msgid "Chat Rooms"
+#~ msgstr "聊天室"
+
+#, fuzzy
+#~ msgid "Browsing for conference rooms, please wait..."
+#~ msgstr "正嘗試加入聊天室,請稍等..."
+
+#~ msgid "Default"
+#~ msgstr "預設值"
+
+#~ msgid "Chat!"
+#~ msgstr "聊天!"
+
+#~ msgid "%s wants to be added to your contact list."
+#~ msgstr "%s 將會被加入至您的好友名單。"
+
+#~ msgid "Someone wants to be added to your contact list."
+#~ msgstr "有人希望能加入至您的好友名單。"
+
+#, fuzzy
+#~ msgid "Subscription request"
+#~ msgstr "訂閱要求"
+
+#~ msgid "Contact Information"
+#~ msgstr "連絡人資訊"
+
+#~ msgid "Subject: %s"
+#~ msgstr "主旨:%s"
+
+#~ msgid "Suggestions for the word"
+#~ msgstr "對這個字的建議"
+
+#~ msgid "New subscription request from %s"
+#~ msgstr "來自 %s 的新訂閱要求"
+
+#~ msgid "Do you want to add this person to your contact list?"
+#~ msgstr "您是否想將這個人加入至您的好友名單?"
+
+#~ msgid "Do you want to add %s to your contact list?"
+#~ msgstr "您是否想將 %s 加入您的好友名單?"
+
+#~ msgid "Please enter your %s account password"
+#~ msgstr "請輸入 %s 的帳號密碼"
+
+#, fuzzy
+#~ msgid "Logging in to account '%s'"
+#~ msgstr "登入到:%s"
+
+#~ msgid "Remember Password?"
+#~ msgstr "是否記下密碼?"
+
+#~ msgid "Could not display the help contents."
+#~ msgstr "無法顯示說明內容。"
+
+#~ msgid "Select Your Avatar Image"
+#~ msgstr "選擇您的大頭貼影像。"
+
+#~ msgid "No Image"
+#~ msgstr "沒有影像"
+
+#~ msgid "The server does not seem to be responding."
+#~ msgstr "此伺服器似乎沒有回應。"
+
+#~ msgid "Try again later."
+#~ msgstr "請稍後再試。"
+
+#, fuzzy
+#~ msgid "Change"
+#~ msgstr "聊天"
+
+#~ msgid "Contact goes offline"
+#~ msgstr "好友已離線"
+
+#~ msgid "Contact goes online"
+#~ msgstr "好友已上線"
+
+#~ msgid "Contact ID:"
+#~ msgstr "連絡人 ID:"
+
+#~ msgid "Do you want to accept this file?"
+#~ msgstr "您是否想接受這個檔案?"
+
+#~ msgid "File Transfer Request"
+#~ msgstr "檔案傳輸要求"
+
+#~ msgid "File name:"
+#~ msgstr "檔案名稱:"
+
+#~ msgid "File size:"
+#~ msgstr "檔案大小:"
+
+#~ msgid "Not supported yet"
+#~ msgstr "尚未支援"
+
+#~ msgid "This person wishes to send you this file:"
+#~ msgstr "這個人希望傳送給您這個檔案:"
+
+#~ msgid "Web site:"
+#~ msgstr "網站:"
+
+#~ msgid "_Accept"
+#~ msgstr "接受(_A)"
+
+#~ msgid "_Deny"
+#~ msgstr "拒絕(_D)"
+
+#, fuzzy
+#~ msgid "<b>Topic:</b>"
+#~ msgstr "<b>關於</b>"
+
+#~ msgid "Account:"
+#~ msgstr "帳號:"
+
+#, fuzzy
+#~ msgid "Browse:"
+#~ msgstr "法羅文"
+
+#, fuzzy
+#~ msgid "Edit Favorite Room"
+#~ msgstr "編輯聊天室"
+
+#~ msgid "Group Chat"
+#~ msgstr "群組聊天"
+
+#, fuzzy
+#~ msgid "Join New"
+#~ msgstr "加入新的(_N)..."
+
+#~ msgid "Join room on start_up"
+#~ msgstr "啟動時加入聊天室(_U)"
+
+#~ msgid "Join this chat room when Gossip starts and you are connected"
+#~ msgstr "當 Gossip 啟動並連上網路時加入這個聊天室。"
+
+#, fuzzy
+#~ msgid "Manage Favorite Rooms"
+#~ msgstr "管理聊天室"
+
+#~ msgid "N_ame:"
+#~ msgstr "名稱(_A):"
+
+#~ msgid "S_erver:"
+#~ msgstr "伺服器(_E):"
+
+#~ msgid "_Nickname:"
+#~ msgstr "暱稱(_N):"
+
+#~ msgid "_Room:"
+#~ msgstr "聊天室(_R):"
+
+#~ msgid "-"
+#~ msgstr "-"
+
+#~ msgid "<b>About</b>"
+#~ msgstr "<b>關於</b>"
+
+#~ msgid "<b>Client Information</b>"
+#~ msgstr "<b>客戶端資訊</b>"
+
+#, fuzzy
+#~ msgid "<b>Groups</b>"
+#~ msgstr "<b>關於</b>"
+
+#, fuzzy
+#~ msgid "<b>Name</b>"
+#~ msgstr "<b>語言</b>"
+
+#~ msgid "<b>Personal Details</b>"
+#~ msgstr "<b>個人資訊</b>"
+
+#, fuzzy
+#~ msgid "<b>Subscription</b>"
+#~ msgstr "<b>連線</b>"
+
+#~ msgid "<span size=\"smaller\">Example: Mikael or user@server.org</span>"
+#~ msgstr "<span size=\"smaller\">範例:Mikael 或 user@jabber.org</span>"
+
+#, fuzzy
+#~ msgid "Accou_nt:"
+#~ msgstr "帳號:"
+
+#~ msgid "Add Contact"
+#~ msgstr "加入聯絡人"
+
+#, fuzzy
+#~ msgid "Alia_s:"
+#~ msgstr "別名:"
+
+#~ msgid "Avatar:"
+#~ msgstr "大頭貼:"
+
+#~ msgid "Ch_at"
+#~ msgstr "聊天(_A)"
+
+#~ msgid "Client:"
+#~ msgstr "客戶端:"
+
+#, fuzzy
+#~ msgid "Con_tact:"
+#~ msgstr "連絡人"
+
+#~ msgid "Connect on S_tartup"
+#~ msgstr "啟動時連線(_T)"
+
+#~ msgid "Contacts"
+#~ msgstr "連絡人"
+
+#~ msgid "Country:"
+#~ msgstr "國家:"
+
+#~ msgid "Decide _Later"
+#~ msgstr "稍後決定(_L)"
+
+#, fuzzy
+#~ msgid "Edit Contact"
+#~ msgstr "加入聯絡人"
+
+#~ msgid "Edit Groups"
+#~ msgstr "編輯群組"
+
+#~ msgid "Email:"
+#~ msgstr "電郵:"
+
+#~ msgid "ID:"
+#~ msgstr "ID:"
+
+#~ msgid ""
+#~ "If you chose to decide later you will be asked the next time you log on."
+#~ msgstr "如果您選擇稍後再決定,下次登入時將被再詢問一次。"
+
+#~ msgid "Name:"
+#~ msgstr "名稱:"
+
+#~ msgid "OS:"
+#~ msgstr "作業系統:"
+
+#~ msgid "Personal Details"
+#~ msgstr "個人詳細資料"
+
+#, fuzzy
+#~ msgid "R_egister"
+#~ msgstr "註冊(_G)..."
+
+#~ msgid "Search"
+#~ msgstr "搜尋"
+
+#~ msgid "Spell Checker"
+#~ msgstr "拼字檢查"
+
+#~ msgid "Subscription Request"
+#~ msgstr "訂閱要求"
+
+#~ msgid "Suggestions for the word:"
+#~ msgstr "對這個字的建議:"
+
+#~ msgid ""
+#~ "This acts as a filter to the contact list below. You can use segments of "
+#~ "contact's name or ID, for example, \"jabber.org\" will list everyone "
+#~ "using that server"
+#~ msgstr ""
+#~ "這會做為下面連絡人清單的過濾器。您可以使用連絡人的部分名稱或 ID,例如,"
+#~ "「jabber.org」會列出每個使用該伺服器的人"
+
+#~ msgid "This is the name that will be used on your roster for this contact"
+#~ msgstr "這是在您的好友名單上用來顯示此連絡人的名稱"
+
+#~ msgid "This name will be used to identify you in chat windows"
+#~ msgstr "這個名稱會用在聊天視窗中辨識您的身分"
+
+#~ msgid ""
+#~ "This name will be used to identify you when new contacts lookup your "
+#~ "details"
+#~ msgstr "這個名稱用在有新的連絡人查詢您的詳細資訊時可供辨識身分"
+
+#~ msgid "Use system pro_xy"
+#~ msgstr "使用系統的代理伺服器設定(_X)"
+
+#~ msgid "Version:"
+#~ msgstr "版本:"
+
+#~ msgid "View Previous Conversations"
+#~ msgstr "顯示前一次交談"
+
+#~ msgid "Which account do you want to use?"
+#~ msgstr "要使用甚麼帳號名稱?"
+
+#~ msgid "You are not subscribed to this contact."
+#~ msgstr "您沒有訂閱這個好友。"
+
+#~ msgid "_Connect"
+#~ msgstr "連線(_C)"
+
+#, fuzzy
+#~ msgid "_Description:"
+#~ msgstr "描述:"
+
+#~ msgid "_Disconnect"
+#~ msgstr "斷線(_D)"
+
+#, fuzzy
+#~ msgid "_Email:"
+#~ msgstr "電郵:"
+
+#, fuzzy
+#~ msgid ""
+#~ "_Enter the name or contact ID of the person you want to chat to below:"
+#~ msgstr "在下面輸入您想聊天的人名或連絡人 ID:"
+
+#, fuzzy
+#~ msgid "_For:"
+#~ msgstr "連接埠(_P):"
+
+#, fuzzy
+#~ msgid "_Full Name:"
+#~ msgstr "名稱(_N):"
+
+#, fuzzy
+#~ msgid "_Group:"
+#~ msgstr "群組:"
+
+#, fuzzy
+#~ msgid "_Nick Name:"
+#~ msgstr "暱稱(_N):"
+
+#~ msgid "_Password:"
+#~ msgstr "密碼(_P):"
+
+#, fuzzy
+#~ msgid "_Quit Message:"
+#~ msgstr "新增訊息"
+
+#~ msgid "_Subscribe"
+#~ msgstr "訂閱(_S)"
+
+#, fuzzy
+#~ msgid "_Web site:"
+#~ msgstr "網站:"
+
+#, fuzzy
+#~ msgid "irc account settings"
+#~ msgstr "<b>帳號設定</b>"
+
+#, fuzzy
+#~ msgid "msn account settings"
+#~ msgstr "<b>帳號設定</b>"
+
+#~ msgid "Preset status messages"
+#~ msgstr "預設狀態訊息"
+
+#~ msgid "Preset status messages."
+#~ msgstr "預設狀態訊息"
+
+#~ msgid "Connecting"
+#~ msgstr "正在連線"
+
+#~ msgid "Perhaps you are trying to connect to the wrong port?"
+#~ msgstr "也許您嘗試連線到錯誤的連接埠?"
+
+#~ msgid "Perhaps the service is not currently running?"
+#~ msgstr "也許此伺服器並未執行這個服務?"
+
+#~ msgid "Check your connection details."
+#~ msgstr "請檢查您的連線詳細資訊。"
+
+#~ msgid "Perhaps the server is not running this service."
+#~ msgstr "也許此伺服器並未執行這個服務。"
+
+#~ msgid "Check your username and password are correct."
+#~ msgstr "請檢查您的使用者名稱與密碼是否正確。"
+
+#~ msgid "%s will be added to your contact list."
+#~ msgstr "%s 將會被加入至您的好友名單。"
+
+#~ msgid "%s ID of new contact:"
+#~ msgstr "新的好友的 %s ID:"
+
+#~ msgid "Example: %s"
+#~ msgstr "範例: %s"
+
+#, fuzzy
+#~ msgid "Show accounts and pending connections"
+#~ msgstr "按這裡顯示帳號及任何進行中的連線。"
+
+#~ msgid "You have no Instant Messaging accounts configured!"
+#~ msgstr "您尚未設定即時通訊帳號!"
+
+#~ msgid ""
+#~ "Next you will be presented with the Account Information dialog to set "
+#~ "your details up."
+#~ msgstr "接下來將會出現帳號資訊對話方塊以讓您設定詳細資訊。"
+
+#~ msgid ""
+#~ "Please enter your invitation message to:\n"
+#~ "%s"
+#~ msgstr ""
+#~ "請輸入您的邀請訊息給:\n"
+#~ "%s"
+
+#~ msgid "Favourite"
+#~ msgstr "喜好"
+
+#~ msgid "/Contact Infor_mation"
+#~ msgstr "/連絡人資訊(_M)"
+
+#~ msgid "/Re_name Contact"
+#~ msgstr "/更改好友名稱(_N)"
+
+#~ msgid "/_Edit Groups"
+#~ msgstr "/編輯群組(_E)"
+
+#~ msgid "/_View Previous Conversations"
+#~ msgstr "/顯示前一次交談(_V)"
+
+#~ msgid ""
+#~ "Please enter a new nickname for the contact\n"
+#~ "%s"
+#~ msgstr ""
+#~ "請輸入以下好友的稱呼\n"
+#~ "%s"
+
+#~ msgid "Edit groups for %s"
+#~ msgstr "編輯 %s 的群組"
+
+#~ msgid "Conversation Log"
+#~ msgstr "對話紀錄"
+
+#~ msgid "Registering account"
+#~ msgstr "註冊帳號"
+
+#~ msgid "Example"
+#~ msgstr "範例"
+
+#~ msgid "Add to _favourites"
+#~ msgstr "加入喜好(_F)"
+
+#~ msgid ""
+#~ "Customize your own nickname, the server and chatroom which you wish to "
+#~ "join."
+#~ msgstr "自訂您的暱稱、伺服器名稱和要進入的聊天室名稱。"
+
+#~ msgid "Edit your chat room details:"
+#~ msgstr "編輯您的群組聊天室詳細資訊:"
+
+#~ msgid "Na_me:"
+#~ msgstr "名稱(_M):"
+
+#~ msgid "New Chat Room"
+#~ msgstr "新增聊天室"
+
+#~ msgid ""
+#~ "Pick a saved chat room from the presets available below and click Join to "
+#~ "start chatting."
+#~ msgstr "從下列可用的預先設定中挑選一個已儲存的聊天室,再按加入開始聊天。"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid "<b>Information requested, please wait...</b>"
+#~ msgstr "<b>要求資訊,請稍候...</b>"
+
+#~ msgid "<span size=\"smaller\">Example:</span>"
+#~ msgstr "<span size=\"smaller\">範例:</span>"
+
+#~ msgid "Account Name"
+#~ msgstr "帳號名稱"
+
+#~ msgid "Connection Details"
+#~ msgstr "連線詳細資料"
+
+#~ msgid "Do you already have an account set up on a server?"
+#~ msgstr "您是不是已經有伺服器的帳號了?"
+
+#~ msgid "Enter the port used in the connection for this account"
+#~ msgstr "輸入這個帳號在此連線中所使用的連接埠"
+
+#~ msgid "Enter the server used in the connection for this account"
+#~ msgstr "輸入這個帳號在此連線中所使用的伺服器"
+
+#~ msgid "Enter the user's contact ID:"
+#~ msgstr "輸入該使用者的連絡人 ID:"
+
+#~ msgid "Enter your real name here"
+#~ msgstr "在這裡輸入您的真實姓名"
+
+#~ msgid "Finished"
+#~ msgstr "完成設定"
+
+#~ msgid "For increased security, enable this option"
+#~ msgstr "為了增進安全性,請啟用這個選項"
+
+#~ msgid "Gossip"
+#~ msgstr "Gossip"
+
+#~ msgid ""
+#~ "Gossip is a modern client for the Jabber Instant Messaging system.\n"
+#~ "\n"
+#~ "This assistant will help you configure Gossip and connect you to your "
+#~ "favorite Jabber server.\n"
+#~ "\n"
+#~ "To get started, just click \"Forward\"."
+#~ msgstr ""
+#~ "Gossip 是一個嶄新的 Jabber 即時通訊客戶端程式。\n"
+#~ "\n"
+#~ "本精靈會協助您設定 Gossip,並連接至您想使用的 Jabber 伺服器。\n"
+#~ "\n"
+#~ "如果準備好,請按「下一頁」。"
+
+#~ msgid ""
+#~ "If you have another machine on your network which 'proxies' the "
+#~ "connection to the internet and you want to use it, enable this option"
+#~ msgstr ""
+#~ "如果在您的網路中有其他電腦「代理」到網際網絡的連線而您想要使用它,請啟用這"
+#~ "個選項"
+
+#~ msgid ""
+#~ "If you need to set specific connection details, like a different server "
+#~ "or port, you can configure that here:"
+#~ msgstr ""
+#~ "如果需要設定特定的連線資訊,像是不同的伺服器或連接埠,可以在這裡設定:"
+
+#~ msgid ""
+#~ "In order to subscribe to presence notifications from the user, a request "
+#~ "will be sent. Until this request is approved, the user will always be "
+#~ "shown as \"Offline\" in your contact list."
+#~ msgstr ""
+#~ "為了訂閱使用者的上線通知,將送出要求。直到這個要求被同意之前,該使用者在您"
+#~ "的好友名單中將顯示為“離線”。"
+
+#~ msgid "In which group do you want to place this contact?"
+#~ msgstr "您想將這個好友加入哪個群組之內?"
+
+#~ msgid "Jabber ID:"
+#~ msgstr "Jabber ID:"
+
+#~ msgid ""
+#~ "Leave this blank if you don't want your password stored on a public "
+#~ "machine. If you decide to do this, you will be prompted each time you "
+#~ "connect for a password"
+#~ msgstr ""
+#~ "如果不希望您的密碼儲存在公用的電腦上,可以保持此欄空白。如果決定要這麼做,"
+#~ "每一次連線的時候都會向您提問密碼"
+
+#~ msgid "Nickname:"
+#~ msgstr "暱稱:"
+
+#~ msgid "Port:"
+#~ msgstr "埠號:"
+
+#~ msgid "Press Subscribe to request to receive their status"
+#~ msgstr "請訂閱以接收他們的狀態"
+
+#~ msgid "Registering Account"
+#~ msgstr "註冊帳號"
+
+#~ msgid "Resource:"
+#~ msgstr "資源:"
+
+#~ msgid "Sending request"
+#~ msgstr "正在傳送要求"
+
+#~ msgid "Server:"
+#~ msgstr "伺服器:"
+
+#~ msgid "Web Site:"
+#~ msgstr "網站:"
+
+#~ msgid "Welcome to Gossip"
+#~ msgstr "歡迎使用 Gossip"
+
+#~ msgid "What instant messaging system does the contact use?"
+#~ msgstr "該好友使用哪種即時通訊系統?"
+
+#~ msgid "What is your name?"
+#~ msgstr "怎樣稱呼您?"
+
+#~ msgid ""
+#~ "What name do you want to use to identify this account?\n"
+#~ "\n"
+#~ "This name could be something associated with the service provider, for "
+#~ "example, <b>Google</b>."
+#~ msgstr ""
+#~ "要使用何種名稱來識別這個帳號?\n"
+#~ "\n"
+#~ "這個名稱可以是跟其服務的提供者有關的事物,例如,<b>Google</b>。"
+
+#~ msgid "What password do you want to use?"
+#~ msgstr "要使用什麼密碼?"
+
+#~ msgid "What username do you use?"
+#~ msgstr "您使用甚麼名稱?"
+
+#~ msgid "What username do you want to use?"
+#~ msgstr "您想使用甚麼用戶名稱?"
+
+#~ msgid "Which account do you want to add this contact to?"
+#~ msgstr "您想將這個好友加入哪個帳號之內?"
+
+#~ msgid ""
+#~ "You can change your account settings later by selecting the Edit-"
+#~ ">Accounts menu item."
+#~ msgstr "稍後您可以在選單中選取「編輯→帳號」來更改帳號設定。"
+
+#~ msgid ""
+#~ "You need to set a name for the connection, for example, <b>Home</b> or "
+#~ "<b>Laptop</b>."
+#~ msgstr "您需要設定該連線的名稱,例如,<b>家裡</b> 或 <b>筆電</b>。"
+
+#~ msgid "Your Account"
+#~ msgstr "您的帳號"
+
+#~ msgid "Your Identity"
+#~ msgstr "您的身分"
+
+#~ msgid "Your new account has now been set up."
+#~ msgstr "現在已設定好您的新帳號。"
+
+#~ msgid "_Forget"
+#~ msgstr "忘記密碼(_F)"
+
+#~ msgid "_Group Chat"
+#~ msgstr "群組聊天(_G)"
+
+#~ msgid "_No"
+#~ msgstr "否(_N)"
+
+#~ msgid "_Search..."
+#~ msgstr "搜尋(_S)..."
+
+#~ msgid "_Yes"
+#~ msgstr "是(_Y)"
+
+#~ msgid "Respond"
+#~ msgstr "回應"
+
+#~ msgid "Dark"
+#~ msgstr "暗"
+
+#~ msgid "Contact Information for %s"
+#~ msgstr "有關 %s 的資訊"
+
+#, fuzzy
+#~ msgid "Chat Rooms..."
+#~ msgstr "聊天室:"
+
+#~ msgid "Be silent when away"
+#~ msgstr "「離開」時不發出音效"
+
+#~ msgid "Be silent when busy"
+#~ msgstr "「忙碌」時不發出音效"
+
+#~ msgid "Height of main window"
+#~ msgstr "主視窗高度"
+
+#~ msgid "The X position of the main window."
+#~ msgstr "啟動時主視窗的水平位置。"
+
+#~ msgid "The Y position of the main window."
+#~ msgstr "啟動時主視窗的垂直位置。"
+
+#~ msgid "The width of the main window."
+#~ msgstr "主視窗寬度"
+
+#~ msgid "Whether spell checking should be turned on."
+#~ msgstr "是否開啟拼字檢查。"
+
+#~ msgid "Width of the main window"
+#~ msgstr "主視窗寬度"
+
+#~ msgid "X position of main window"
+#~ msgstr "主視窗水平位置"
+
+#~ msgid "Y position of main window"
+#~ msgstr "主視窗垂直位置"
+
+#~ msgid "Gossip, Instant Messaging Client"
+#~ msgstr "Gossip 即時通訊軟體"
+
+#, fuzzy
+#~ msgid "Close this chat window"
+#~ msgstr "邀請至聊天室(_I)"
+
+#~ msgid "Requested Information"
+#~ msgstr "要求的資訊"
+
+#~ msgid "/_Invite to Chat Conference"
+#~ msgstr "/邀請至聊天會議(_I)"
+
+#, fuzzy
+#~ msgid "Send Message"
+#~ msgstr "新增訊息(_N)..."
+
+#, fuzzy
+#~ msgid "%s has gone offline"
+#~ msgstr "%s 已離線"
+
+#~ msgid "Available..."
+#~ msgstr "有空..."
+
+#~ msgid "Busy..."
+#~ msgstr "忙碌..."
+
+#~ msgid "Away..."
+#~ msgstr "離開..."
+
+#~ msgid "Contact _Information"
+#~ msgstr "連絡資訊(_I)"
+
+#~ msgid "<b>Sound</b>"
+#~ msgstr "<b>聲音</b>"
+
+#~ msgid "Check spelling while I _type"
+#~ msgstr "當我輸入時檢查拼字(_T)"
+
+#~ msgid "Gossip - Accounts"
+#~ msgstr "Gossip - 帳號"
+
+#, fuzzy
+#~ msgid "Join _Group Chat..."
+#~ msgstr "加入群組聊天(_J)..."
+
+#~ msgid "Por_t:"
+#~ msgstr "連接埠(_T):"
+
+#~ msgid "Requested information."
+#~ msgstr "要求的資訊。"
+
+#~ msgid "Requesting contact information, please wait..."
+#~ msgstr "正要求好友資訊,請稍候..."
+
+#~ msgid "Could not open connection"
+#~ msgstr "無法開啟連線"
+
+#~ msgid "Could not find the server you wanted to use"
+#~ msgstr "找不到您想要使用的伺服器"
+
+#~ msgid "Connection to the server failed."
+#~ msgstr "連線至伺服器時失敗。"
+
+#~ msgid "Authentication failed"
+#~ msgstr "驗證失敗"
+
+#~ msgid "Written by:"
+#~ msgstr "作者:"
+
+#~ msgid "Artwork by:"
+#~ msgstr "美工:"
+
+#~ msgid "Translated by:"
+#~ msgstr "翻譯:"
+
+#~ msgid "Account ID"
+#~ msgstr "帳號 ID"
+
+#~ msgid "Last Error"
+#~ msgstr "上次錯誤"
+
+#~ msgid "%sChat - %s"
+#~ msgstr "%s聊天 - %s"
+
+#~ msgid "/Show _Log"
+#~ msgstr "/顯示對話紀錄(_L)"
+
+#~ msgid "Afrikaans"
+#~ msgstr "南非荷蘭語"
+
+#~ msgid "Amharic"
+#~ msgstr "阿姆哈拉語"
+
+#~ msgid "Arabic"
+#~ msgstr "阿拉伯語"
+
+#~ msgid "Azerbaijani"
+#~ msgstr "亞塞拜然語"
+
+#~ msgid "Belarusian"
+#~ msgstr "白俄羅斯語"
+
+#~ msgid "Bulgarian"
+#~ msgstr "保加利亞語"
+
+#~ msgid "Bengali"
+#~ msgstr "孟加拉語"
+
+#~ msgid "Breton"
+#~ msgstr "不列塔尼語"
+
+#~ msgid "Bosnian"
+#~ msgstr "波士尼亞語"
+
+#~ msgid "Catalan"
+#~ msgstr "加泰隆語"
+
+#~ msgid "Czech"
+#~ msgstr "捷克語"
+
+#~ msgid "Welsh"
+#~ msgstr "威爾士語"
+
+#~ msgid "Danish"
+#~ msgstr "丹麥語"
+
+#~ msgid "German"
+#~ msgstr "德文"
+
+#~ msgid "German (Austria)"
+#~ msgstr "德文(奧地利)"
+
+#~ msgid "German (Germany)"
+#~ msgstr "德文(德意志)"
+
+#~ msgid "German (Swiss)"
+#~ msgstr "德文(瑞士)"
+
+#~ msgid "Greek"
+#~ msgstr "希臘語"
+
+#~ msgid "English"
+#~ msgstr "英文"
+
+#~ msgid "English (Canadian)"
+#~ msgstr "英文(加拿大)"
+
+#~ msgid "English (British)"
+#~ msgstr "英語(英式)"
+
+#~ msgid "English (American)"
+#~ msgstr "英語(美式)"
+
+#~ msgid "Esperanto"
+#~ msgstr "世界語"
+
+#~ msgid "Spanish"
+#~ msgstr "西班牙文"
+
+#~ msgid "Estonian"
+#~ msgstr "愛沙尼亞語"
+
+#~ msgid "Persian"
+#~ msgstr "波斯語"
+
+#~ msgid "Finnish"
+#~ msgstr "芬蘭語"
+
+#~ msgid "French"
+#~ msgstr "法文"
+
+#~ msgid "French (France)"
+#~ msgstr "法文(法蘭西)"
+
+#~ msgid "French (Swiss)"
+#~ msgstr "法文(瑞士)"
+
+#~ msgid "Irish Gaelic"
+#~ msgstr "愛爾蘭蓋爾文"
+
+#~ msgid "Scots Gaelic"
+#~ msgstr "蘇格蘭蓋爾文"
+
+#~ msgid "Gujarati"
+#~ msgstr "印度語"
+
+#~ msgid "Manx Gaelic"
+#~ msgstr "人島蓋爾文"
+
+#~ msgid "Hebrew"
+#~ msgstr "希伯來語"
+
+#~ msgid "Hindi"
+#~ msgstr "印度語(北印度)"
+
+#~ msgid "Croatian"
+#~ msgstr "克羅地亞語"
+
+#~ msgid "Hungarian"
+#~ msgstr "匈牙利語"
+
+#~ msgid "Indonesian"
+#~ msgstr "印尼語"
+
+#~ msgid "Icelandic"
+#~ msgstr "冰島語"
+
+#~ msgid "Italian"
+#~ msgstr "意大利文"
+
+#~ msgid "Japanese"
+#~ msgstr "日語"
+
+#~ msgid "Georgian"
+#~ msgstr "喬治亞語"
+
+#~ msgid "Kannada"
+#~ msgstr "坎納達語"
+
+#~ msgid "Korean"
+#~ msgstr "韓文"
+
+#~ msgid "Kurdish"
+#~ msgstr "庫德語"
+
+#~ msgid "Cornish"
+#~ msgstr "康沃爾語"
+
+#~ msgid "Limburgish"
+#~ msgstr "林堡語"
+
+#~ msgid "Lithuanian"
+#~ msgstr "立陶宛文"
+
+#~ msgid "Latvian"
+#~ msgstr "拉脫維亞語"
+
+#~ msgid "Maori"
+#~ msgstr "毛利語"
+
+#~ msgid "Macedonian"
+#~ msgstr "馬其頓語"
+
+#~ msgid "Malayalam"
+#~ msgstr "馬拉雅拉姆語"
+
+#~ msgid "Mongolian"
+#~ msgstr "蒙古語"
+
+#~ msgid "Marathi"
+#~ msgstr "馬拉塔語"
+
+#~ msgid "Malay"
+#~ msgstr "馬來語"
+
+#~ msgid "Norwegian (Bokmal)"
+#~ msgstr "挪威語(Bokmaal)"
+
+#~ msgid "Nepali"
+#~ msgstr "尼泊爾語"
+
+#~ msgid "Dutch"
+#~ msgstr "荷蘭語"
+
+#~ msgid "Norwegian"
+#~ msgstr "挪威語"
+
+#~ msgid "Norwegian (Nynorsk)"
+#~ msgstr "挪威語(Nynorsk)"
+
+#~ msgid "Norwegian (Nyorsk)"
+#~ msgstr "挪威語(Bokmaal)"
+
+#~ msgid "Oriya"
+#~ msgstr "奧里雅語"
+
+#~ msgid "Punjabi"
+#~ msgstr "旁加語"
+
+#~ msgid "Polish"
+#~ msgstr "波蘭語"
+
+#~ msgid "Portuguese"
+#~ msgstr "葡萄牙文"
+
+#~ msgid "Portuguese (Portugal)"
+#~ msgstr "葡萄牙文(葡萄牙)"
+
+#~ msgid "Portuguese (Brazil)"
+#~ msgstr "葡萄牙文(巴西)"
+
+#~ msgid "Romanian"
+#~ msgstr "羅馬尼亞語"
+
+#~ msgid "Russian"
+#~ msgstr "俄文"
+
+#~ msgid "Kinyarwanda"
+#~ msgstr "盧安達語"
+
+#~ msgid "Slovak"
+#~ msgstr "斯洛伐克語"
+
+#~ msgid "Slovenian"
+#~ msgstr "斯洛文尼亞語"
+
+#~ msgid "Albanian"
+#~ msgstr "阿爾巴尼亞語"
+
+#~ msgid "Serbian"
+#~ msgstr "塞爾維亞語"
+
+#~ msgid "Swedish"
+#~ msgstr "瑞典語"
+
+#~ msgid "Tamil"
+#~ msgstr "泰米爾語"
+
+#~ msgid "Telugu"
+#~ msgstr "泰盧固語"
+
+#~ msgid "Thai"
+#~ msgstr "泰文"
+
+#~ msgid "Turkmen"
+#~ msgstr "土庫曼語"
+
+#~ msgid "Turkish"
+#~ msgstr "土耳其語"
+
+#~ msgid "Ukrainian"
+#~ msgstr "烏克蘭語"
+
+#~ msgid "Vietnamese"
+#~ msgstr "越南文"
+
+#~ msgid "Wallon"
+#~ msgstr "瓦隆語"
+
+#~ msgid "Xhosa"
+#~ msgstr "科薩語"
+
+#~ msgid "Yiddish"
+#~ msgstr "意第緒語"
+
+#~ msgid "Chinese Simplified"
+#~ msgstr "簡體中文"
+
+#~ msgid "Chinese Traditional"
+#~ msgstr "繁體中文"
+
+#~ msgid "View Lo_g"
+#~ msgstr "觀看對話紀錄(_G)"
+
+#, fuzzy
+#~ msgid "Gossip - Chat Rooms"
+#~ msgstr "Gossip - 編輯聊天室"
+
+#~ msgid "Gossip - Group Chat"
+#~ msgstr "Gossip - 群組聊天"
+
+#, fuzzy
+#~ msgid "Gossip - New Chatroom"
+#~ msgstr "Gossip - 編輯聊天室"
+
+#~ msgid "Gossip - Add contact"
+#~ msgstr "Gossip - 加入好友"
+
+#~ msgid "Gossip - Contact Information"
+#~ msgstr "Gossip - 好友資訊"
+
+#~ msgid "Gossip - Edit Groups"
+#~ msgstr "Gossip - 編輯群組"
+
+#~ msgid "Gossip - New Account"
+#~ msgstr "Gossip - 新增帳號"
+
+#~ msgid "Gossip - New Message"
+#~ msgstr "Gossip - 新訊息"
+
+#~ msgid "Gossip - Personal Details"
+#~ msgstr "Gossip - 個人資訊"
+
+#~ msgid "Gossip - Preferences"
+#~ msgstr "Gossip - 偏好設定"
+
+#~ msgid "Gossip - Spell Checker"
+#~ msgstr "Gossip - 拼字檢查"
+
+#~ msgid "Gossip - Status Message"
+#~ msgstr "Gossip - 狀態訊息"
+
+#~ msgid "Waiting for server to respond, please wait..."
+#~ msgstr "等候伺服器的回應,請稍候..."
+
+#~ msgid "Connection could not be created"
+#~ msgstr "無法建立連線"
+
+#~ msgid "Redirect"
+#~ msgstr "重新導向"
+
+#~ msgid "Bad Request"
+#~ msgstr "錯誤的要求"
+
+#~ msgid "Not Authorized"
+#~ msgstr "未授權"
+
+#~ msgid "Payment Required"
+#~ msgstr "需付款"
+
+#~ msgid "Forbidden"
+#~ msgstr "被禁止"
+
+#~ msgid "Not Found"
+#~ msgstr "找不到"
+
+#~ msgid "Not Allowed"
+#~ msgstr "不允許"
+
+#~ msgid "Not Acceptable"
+#~ msgstr "不能接受"
+
+#~ msgid "Request Timeout"
+#~ msgstr "要求已逾時"
+
+#~ msgid "Conflict"
+#~ msgstr "衝突"
+
+#~ msgid "Not Implemented"
+#~ msgstr "未實作"
+
+#~ msgid "Remote Server Error"
+#~ msgstr "遠端伺服器錯誤"
+
+#~ msgid "Service Unavailable"
+#~ msgstr "服務無法使用"
+
+#~ msgid "Unknown error."
+#~ msgstr "不明的錯誤。"
+
+#~ msgid "Custom"
+#~ msgstr "自訂"
+
+#~ msgid "The chat room you are trying is not responding."
+#~ msgstr "您所嘗試的聊天室沒有回應。"
+
+#~ msgid "Check your details and try again."
+#~ msgstr "請檢查您的詳細資訊並再試一次。"
+
+#~ msgid "This is currently unsupported."
+#~ msgstr "此項目前不支援。"
+
+#~ msgid "Perhaps the conference server is busy, try again later."
+#~ msgstr "也許此會議伺服器正在忙碌,請稍後再試。"
+
+#~ msgid "Check the server host name is correct and is available."
+#~ msgstr "請檢查伺服器主機名稱是否正確可用。"
+
+#~ msgid "Gossip will now try to use your account:"
+#~ msgstr "Gossip 現在會嘗試使用這個帳號:"
+
+#~ msgid "Gossip will now try to register the account:"
+#~ msgstr "現在 Gossip 會嘗試註冊帳號:"
+
+#~ msgid "Cus_tomize"
+#~ msgstr "自訂(_T)"
+
+#~ msgid "Edit or Delete this favorite."
+#~ msgstr "編輯或刪除這個喜好。"
+
+#~ msgid "Gossip - Join Chat Room "
+#~ msgstr "Gossip - 加入聊天室"
+
+#~ msgid "Choose a Server"
+#~ msgstr "選取伺服器"
+
+#~ msgid "On what server do you have an account?"
+#~ msgstr "您在哪個伺服器有帳號?"
+
+#~ msgid "Configure Transports"
+#~ msgstr "設定轉送程式"
+
+#~ msgid "_Jabber ID of new contact:"
+#~ msgstr "新的好友的 _Jabber ID:"
+
+#~ msgid "Edit List..."
+#~ msgstr "編輯清單..."
+
+#~ msgid "Automatically Connect"
+#~ msgstr "自動連線"
+
+#~ msgid "Connect _Server:"
+#~ msgstr "連接伺服器(_S):"
+
+#~ msgid "Gossip - Account Information"
+#~ msgstr "Gossip - 帳號資訊"
+
+#~ msgid "_Jabber ID:"
+#~ msgstr "_Jabber ID:"
+
+#~ msgid "Gossip - Edit Favorite"
+#~ msgstr "Gossip - 編輯喜好"
+
+#~ msgid "Gossip - Edit Group Chat Favorites"
+#~ msgstr "Gossip - 編輯群組聊天喜好"
+
+#~ msgid " "
+#~ msgstr " "
+
+#~ msgid ""
+#~ "<b>Configuring your new service...</b>\n"
+#~ "This will take a few moments, please wait."
+#~ msgstr ""
+#~ "<b>正在設定您的新服務...</b>\n"
+#~ "這需要一點時間,請稍等。"
+
+#~ msgid "<b>Preferred Service</b>"
+#~ msgstr "<b>偏好的服務</b>"
+
+#~ msgid "<b>Recommended Services</b>"
+#~ msgstr "<b>建議的服務</b>"
+
+#~ msgid ""
+#~ "<b>Requested service requirements...</b>\n"
+#~ "This will take a few moments, please wait."
+#~ msgstr ""
+#~ "<b>正在尋找服務的要件...</b>\n"
+#~ "這需要一點時間,請稍等。"
+
+#~ msgid "Add Account"
+#~ msgstr "新增帳號"
+
+#~ msgid "Add Another Account"
+#~ msgstr "新增其他帳號"
+
+#~ msgid "Choose from list:"
+#~ msgstr "從名單中選取:"
+
+#~ msgid "Configure Transport"
+#~ msgstr "設定轉送程式"
+
+#~ msgid "Configuring Service"
+#~ msgstr "正在設定服務"
+
+#~ msgid "Gossip - Status Presets"
+#~ msgstr "Gossip - 狀態預先設定"
+
+#~ msgid "Gossip - Welcome"
+#~ msgstr "Gossip - 歡迎"
+
+#~ msgid "If you prefer, you can specify your own service:"
+#~ msgstr "如果您喜歡,可以指定您自己的服務:"
+
+#~ msgid "Jabber Account"
+#~ msgstr "Jabber 帳號"
+
+#~ msgid "Jabber.com"
+#~ msgstr "Jabber.com"
+
+#~ msgid "Jabber.org"
+#~ msgstr "Jabber.org"
+
+#~ msgid "Nick name:"
+#~ msgstr "暱稱:"
+
+#~ msgid "Please complete the details below to set up your account: "
+#~ msgstr "請在以下的欄位填上詳細的資料,以設定您的帳號: "
+
+#~ msgid "Populating services..."
+#~ msgstr "計算服務的使用率..."
+
+#~ msgid "Remove Account"
+#~ msgstr "移除帳號"
+
+#~ msgid "Service Details"
+#~ msgstr "服務詳細資料"
+
+#~ msgid "Service:"
+#~ msgstr "服務:"
+
+#~ msgid ""
+#~ "This wizard will allow you to configure your account settings for another "
+#~ "protocol. "
+#~ msgstr "這個精靈會讓您設定其他協定的帳號設定值。"
+
+#~ msgid "Transport Accounts"
+#~ msgstr "轉送程式帳號"
+
+#~ msgid "Use a different server"
+#~ msgstr "使用另一個伺服器"
+
+#~ msgid "Which protocol would you like to set up? "
+#~ msgstr "您想要設定哪個協定?"
+
+#~ msgid ""
+#~ "You can set the status presets which appear in the presence menu on the "
+#~ "main window here."
+#~ msgstr "您可以在此設定顯示在主視窗上線選單中的狀態預先設定。"
+
+#~ msgid "You currently have the following accounts set up:"
+#~ msgstr "您目前已設定下列帳號:"
+
+#~ msgid "_Account Information"
+#~ msgstr "帳號資訊(_A)"
diff --git a/trunk/python/.gitignore b/trunk/python/.gitignore
new file mode 100644
index 000000000..19cea19bb
--- /dev/null
+++ b/trunk/python/.gitignore
@@ -0,0 +1,2 @@
+pyempathy.c
+pyempathygtk.c
diff --git a/trunk/python/Makefile.am b/trunk/python/Makefile.am
new file mode 100644
index 000000000..5050f1b86
--- /dev/null
+++ b/trunk/python/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = pyempathy pyempathygtk
+
diff --git a/trunk/python/example.py b/trunk/python/example.py
new file mode 100755
index 000000000..cffd5fffb
--- /dev/null
+++ b/trunk/python/example.py
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+
+import gtk
+import empathy
+import empathygtk
+
+class HelloWorld:
+
+ def destroy(self, widget, data=None):
+ print "destroy signal occurred"
+ gtk.main_quit()
+
+ def __init__(self):
+ self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ self.window.connect("destroy", self.destroy)
+
+ manager = empathy.ContactManager()
+ store = empathygtk.ContactListStore(manager)
+ view = empathygtk.ContactListView(store, 0)
+
+ self.window.add (view)
+ view.show()
+ self.window.show()
+
+ def main(self):
+ gtk.main()
+
+if __name__ == "__main__":
+ hello = HelloWorld()
+ hello.main()
+
diff --git a/trunk/python/pyempathy.patch b/trunk/python/pyempathy.patch
new file mode 100644
index 000000000..f7de6a440
--- /dev/null
+++ b/trunk/python/pyempathy.patch
@@ -0,0 +1,27 @@
+--- /home/zdra/Desktop/pyempathy.defs 2008-04-02 11:08:02.000000000 +0200
++++ pyempathy/pyempathy.defs 2008-04-02 11:28:00.000000000 +0200
+@@ -35,7 +35,7 @@
+ (gtype-id "EMPATHY_TYPE_CONTACT_FACTORY")
+ )
+
+-(define-object ContactList
++(define-interface ContactList
+ (in-module "Empathy")
+ (c-name "EmpathyContactList")
+ (gtype-id "EMPATHY_TYPE_CONTACT_LIST")
+@@ -44,6 +44,7 @@
+ (define-object ContactManager
+ (in-module "Empathy")
+ (parent "GObject")
++ (implements "EmpathyContactList")
+ (c-name "EmpathyContactManager")
+ (gtype-id "EMPATHY_TYPE_CONTACT_MANAGER")
+ )
+@@ -121,6 +122,7 @@
+ (define-object TpContactList
+ (in-module "Empathy")
+ (parent "GObject")
++ (implements "EmpathyContactList")
+ (c-name "EmpathyTpContactList")
+ (gtype-id "EMPATHY_TYPE_TP_CONTACT_LIST")
+ )
diff --git a/trunk/python/pyempathy/Makefile.am b/trunk/python/pyempathy/Makefile.am
new file mode 100644
index 000000000..a2b76b264
--- /dev/null
+++ b/trunk/python/pyempathy/Makefile.am
@@ -0,0 +1,42 @@
+PYDEFS=`pkg-config --variable=defsdir pygtk-2.0`
+
+AM_CPPFLAGS = \
+ -I. \
+ -I$(top_srcdir)/libempathy \
+ -I$(top_srcdir) \
+ -DDATADIR=\""$(datadir)"\" \
+ $(PYTHON_BINDING_CFLAGS) \
+ $(PYTHON_INCLUDES) \
+ $(WARN_CFLAGS)
+
+BUILT_SOURCES = \
+ pyempathy.c
+
+pyempathydir = $(pyexecdir)
+pyempathy_LTLIBRARIES = empathy.la
+
+empathy_la_SOURCES = \
+ pyempathymodule.c \
+ pyempathy.c
+
+empathy_la_LIBADD = \
+ $(PYTHON_BINDING_LIBS) \
+ $(top_builddir)/libempathy/libempathy.la
+
+empathy_la_LDFLAGS = \
+ -module -avoid-version
+
+pyempathy.c: pyempathy.override pyempathy.defs
+ pygtk-codegen-2.0 \
+ --prefix empathy \
+ --register $(PYDEFS)/gdk-types.defs \
+ --register $(PYDEFS)/gtk-types.defs \
+ --override pyempathy.override \
+ pyempathy.defs > $@
+
+EXTRA_DIST = \
+ pyempathy.override \
+ pyempathy.defs
+
+CLEANFILES = $(BUILT_SOURCES)
+
diff --git a/trunk/python/pyempathy/pyempathy.defs b/trunk/python/pyempathy/pyempathy.defs
new file mode 100644
index 000000000..cc9ef339e
--- /dev/null
+++ b/trunk/python/pyempathy/pyempathy.defs
@@ -0,0 +1,2305 @@
+;; -*- scheme -*-
+; object definitions ...
+(define-object Chatroom
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyChatroom")
+ (gtype-id "EMPATHY_TYPE_CHATROOM")
+)
+
+(define-object ChatroomManager
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyChatroomManager")
+ (gtype-id "EMPATHY_TYPE_CHATROOM_MANAGER")
+)
+
+(define-object Contact
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyContact")
+ (gtype-id "EMPATHY_TYPE_CONTACT")
+)
+
+(define-object ContactFactory
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyContactFactory")
+ (gtype-id "EMPATHY_TYPE_CONTACT_FACTORY")
+)
+
+(define-interface ContactList
+ (in-module "Empathy")
+ (c-name "EmpathyContactList")
+ (gtype-id "EMPATHY_TYPE_CONTACT_LIST")
+)
+
+(define-object ContactManager
+ (in-module "Empathy")
+ (parent "GObject")
+ (implements "EmpathyContactList")
+ (c-name "EmpathyContactManager")
+ (gtype-id "EMPATHY_TYPE_CONTACT_MANAGER")
+)
+
+(define-object Dispatcher
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyDispatcher")
+ (gtype-id "EMPATHY_TYPE_DISPATCHER")
+)
+
+(define-object Idle
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyIdle")
+ (gtype-id "EMPATHY_TYPE_IDLE")
+)
+
+(define-object IrcNetwork
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyIrcNetwork")
+ (gtype-id "EMPATHY_TYPE_IRC_NETWORK")
+)
+
+(define-object IrcNetworkManager
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyIrcNetworkManager")
+ (gtype-id "EMPATHY_TYPE_IRC_NETWORK_MANAGER")
+)
+
+(define-object IrcServer
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyIrcServer")
+ (gtype-id "EMPATHY_TYPE_IRC_SERVER")
+)
+
+(define-object LogManager
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyLogManager")
+ (gtype-id "EMPATHY_TYPE_LOG_MANAGER")
+)
+
+(define-object Message
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyMessage")
+ (gtype-id "EMPATHY_TYPE_MESSAGE")
+)
+
+(define-object TpCall
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyTpCall")
+ (gtype-id "EMPATHY_TYPE_TP_CALL")
+)
+
+(define-object TpChat
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyTpChat")
+ (gtype-id "EMPATHY_TYPE_TP_CHAT")
+)
+
+(define-object TpContactFactory
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyTpContactFactory")
+ (gtype-id "EMPATHY_TYPE_TP_CONTACT_FACTORY")
+)
+
+(define-object TpContactList
+ (in-module "Empathy")
+ (parent "GObject")
+ (implements "EmpathyContactList")
+ (c-name "EmpathyTpContactList")
+ (gtype-id "EMPATHY_TYPE_TP_CONTACT_LIST")
+)
+
+(define-object TpGroup
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyTpGroup")
+ (gtype-id "EMPATHY_TYPE_TP_GROUP")
+)
+
+(define-object TpRoomlist
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyTpRoomlist")
+ (gtype-id "EMPATHY_TYPE_TP_ROOMLIST")
+)
+
+(define-object TpTube
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyTpTube")
+ (gtype-id "EMPATHY_TYPE_TP_TUBE")
+)
+
+(define-object TubeHandler
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyTubeHandler")
+ (gtype-id "EMPATHY_TYPE_TUBE_HANDLER")
+)
+
+;; Enumerations and flags ...
+
+(define-flags DebugFlags
+ (in-module "Empathy")
+ (c-name "EmpathyDebugFlags")
+ (gtype-id "EMPATHY_TYPE_DEBUG_FLAGS")
+ (values
+ '("tp" "EMPATHY_DEBUG_TP")
+ '("chat" "EMPATHY_DEBUG_CHAT")
+ '("contact" "EMPATHY_DEBUG_CONTACT")
+ '("account" "EMPATHY_DEBUG_ACCOUNT")
+ '("irc" "EMPATHY_DEBUG_IRC")
+ '("dispatcher" "EMPATHY_DEBUG_DISPATCHER")
+ '("other" "EMPATHY_DEBUG_OTHER")
+ )
+)
+
+(define-enum RegExType
+ (in-module "Empathy")
+ (c-name "EmpathyRegExType")
+ (gtype-id "EMPATHY_TYPE_REG_EX_TYPE")
+ (values
+ '("as-is" "EMPATHY_REGEX_AS_IS")
+ '("browser" "EMPATHY_REGEX_BROWSER")
+ '("apt" "EMPATHY_REGEX_APT")
+ '("email" "EMPATHY_REGEX_EMAIL")
+ '("other" "EMPATHY_REGEX_OTHER")
+ '("all" "EMPATHY_REGEX_ALL")
+ )
+)
+
+(define-flags Capabilities
+ (in-module "Empathy")
+ (c-name "EmpathyCapabilities")
+ (gtype-id "EMPATHY_TYPE_CAPABILITIES")
+ (values
+ '("none" "EMPATHY_CAPABILITIES_NONE")
+ '("audio" "EMPATHY_CAPABILITIES_AUDIO")
+ '("video" "EMPATHY_CAPABILITIES_VIDEO")
+ '("unknown" "EMPATHY_CAPABILITIES_UNKNOWN")
+ )
+)
+
+(define-flags ContactReady
+ (in-module "Empathy")
+ (c-name "EmpathyContactReady")
+ (gtype-id "EMPATHY_TYPE_CONTACT_READY")
+ (values
+ '("none" "EMPATHY_CONTACT_READY_NONE")
+ '("id" "EMPATHY_CONTACT_READY_ID")
+ '("handle" "EMPATHY_CONTACT_READY_HANDLE")
+ '("name" "EMPATHY_CONTACT_READY_NAME")
+ '("all" "EMPATHY_CONTACT_READY_ALL")
+ )
+)
+
+(define-enum TpCallStatus
+ (in-module "Empathy")
+ (c-name "EmpathyTpCallStatus")
+ (gtype-id "EMPATHY_TYPE_TP_CALL_STATUS")
+ (values
+ '("readying" "EMPATHY_TP_CALL_STATUS_READYING")
+ '("pending" "EMPATHY_TP_CALL_STATUS_PENDING")
+ '("accepted" "EMPATHY_TP_CALL_STATUS_ACCEPTED")
+ '("closed" "EMPATHY_TP_CALL_STATUS_CLOSED")
+ )
+)
+
+
+;; From empathy-avatar.h
+
+(define-function empathy_avatar_get_type
+ (c-name "empathy_avatar_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_avatar_new
+ (c-name "empathy_avatar_new")
+ (is-constructor-of "EmpathyAvatar")
+ (return-type "EmpathyAvatar*")
+ (parameters
+ '("const-guchar*" "avatar")
+ '("const-gsize" "len")
+ '("const-gchar*" "format")
+ '("const-gchar*" "token")
+ )
+)
+
+(define-function empathy_avatar_new_from_cache
+ (c-name "empathy_avatar_new_from_cache")
+ (return-type "EmpathyAvatar*")
+ (parameters
+ '("const-gchar*" "token")
+ )
+)
+
+(define-method ref
+ (of-object "EmpathyAvatar")
+ (c-name "empathy_avatar_ref")
+ (return-type "EmpathyAvatar*")
+)
+
+(define-method unref
+ (of-object "EmpathyAvatar")
+ (c-name "empathy_avatar_unref")
+ (return-type "none")
+)
+
+
+
+;; From empathy-time.h
+
+(define-function empathy_time_get_current
+ (c-name "empathy_time_get_current")
+ (return-type "time_t")
+)
+
+(define-function empathy_time_get_local_time
+ (c-name "empathy_time_get_local_time")
+ (return-type "time_t")
+ (parameters
+ '("struct-tm*" "tm")
+ )
+)
+
+(define-function empathy_time_parse
+ (c-name "empathy_time_parse")
+ (return-type "time_t")
+ (parameters
+ '("const-gchar*" "str")
+ )
+)
+
+(define-function empathy_time_to_string_utc
+ (c-name "empathy_time_to_string_utc")
+ (return-type "gchar*")
+ (parameters
+ '("time_t" "t")
+ '("const-gchar*" "format")
+ )
+)
+
+(define-function empathy_time_to_string_local
+ (c-name "empathy_time_to_string_local")
+ (return-type "gchar*")
+ (parameters
+ '("time_t" "t")
+ '("const-gchar*" "format")
+ )
+)
+
+
+
+;; From empathy-status-presets.h
+
+(define-function empathy_status_presets_get_all
+ (c-name "empathy_status_presets_get_all")
+ (return-type "none")
+)
+
+(define-function empathy_status_presets_get
+ (c-name "empathy_status_presets_get")
+ (return-type "GList*")
+ (parameters
+ '("McPresence" "state")
+ '("gint" "max_number")
+ )
+)
+
+(define-function empathy_status_presets_set_last
+ (c-name "empathy_status_presets_set_last")
+ (return-type "none")
+ (parameters
+ '("McPresence" "state")
+ '("const-gchar*" "status")
+ )
+)
+
+(define-function empathy_status_presets_remove
+ (c-name "empathy_status_presets_remove")
+ (return-type "none")
+ (parameters
+ '("McPresence" "state")
+ '("const-gchar*" "status")
+ )
+)
+
+(define-function empathy_status_presets_reset
+ (c-name "empathy_status_presets_reset")
+ (return-type "none")
+)
+
+(define-function empathy_status_presets_get_default_state
+ (c-name "empathy_status_presets_get_default_state")
+ (return-type "McPresence")
+)
+
+(define-function empathy_status_presets_get_default_status
+ (c-name "empathy_status_presets_get_default_status")
+ (return-type "const-gchar*")
+)
+
+(define-function empathy_status_presets_set_default
+ (c-name "empathy_status_presets_set_default")
+ (return-type "none")
+ (parameters
+ '("McPresence" "state")
+ '("const-gchar*" "status")
+ )
+)
+
+(define-function empathy_status_presets_clear_default
+ (c-name "empathy_status_presets_clear_default")
+ (return-type "none")
+)
+
+
+
+;; From empathy-debug.h
+
+(define-function empathy_debug_flag_is_set
+ (c-name "empathy_debug_flag_is_set")
+ (return-type "gboolean")
+ (parameters
+ '("EmpathyDebugFlags" "flag")
+ )
+)
+
+(define-function empathy_debug
+ (c-name "empathy_debug")
+ (return-type "none")
+ (parameters
+ '("EmpathyDebugFlags" "flag")
+ '("const-gchar*" "format")
+ )
+ (varargs #t)
+)
+
+(define-function empathy_debug_set_flags
+ (c-name "empathy_debug_set_flags")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "flags_string")
+ )
+)
+
+
+
+;; From empathy-utils.h
+
+(define-function empathy_substring
+ (c-name "empathy_substring")
+ (return-type "gchar*")
+ (parameters
+ '("const-gchar*" "str")
+ '("gint" "start")
+ '("gint" "end")
+ )
+)
+
+(define-function empathy_regex_match
+ (c-name "empathy_regex_match")
+ (return-type "gint")
+ (parameters
+ '("EmpathyRegExType" "type")
+ '("const-gchar*" "msg")
+ '("GArray*" "start")
+ '("GArray*" "end")
+ )
+)
+
+(define-function empathy_strcasecmp
+ (c-name "empathy_strcasecmp")
+ (return-type "gint")
+ (parameters
+ '("const-gchar*" "s1")
+ '("const-gchar*" "s2")
+ )
+)
+
+(define-function empathy_strncasecmp
+ (c-name "empathy_strncasecmp")
+ (return-type "gint")
+ (parameters
+ '("const-gchar*" "s1")
+ '("const-gchar*" "s2")
+ '("gsize" "n")
+ )
+)
+
+(define-function empathy_xml_validate
+ (c-name "empathy_xml_validate")
+ (return-type "gboolean")
+ (parameters
+ '("xmlDoc*" "doc")
+ '("const-gchar*" "dtd_filename")
+ )
+)
+
+(define-function empathy_xml_node_get_child
+ (c-name "empathy_xml_node_get_child")
+ (return-type "xmlNodePtr")
+ (parameters
+ '("xmlNodePtr" "node")
+ '("const-gchar*" "child_name")
+ )
+)
+
+(define-function empathy_xml_node_get_child_content
+ (c-name "empathy_xml_node_get_child_content")
+ (return-type "xmlChar*")
+ (parameters
+ '("xmlNodePtr" "node")
+ '("const-gchar*" "child_name")
+ )
+)
+
+(define-function empathy_xml_node_find_child_prop_value
+ (c-name "empathy_xml_node_find_child_prop_value")
+ (return-type "xmlNodePtr")
+ (parameters
+ '("xmlNodePtr" "node")
+ '("const-gchar*" "prop_name")
+ '("const-gchar*" "prop_value")
+ )
+)
+
+(define-function empathy_account_hash
+ (c-name "empathy_account_hash")
+ (return-type "guint")
+ (parameters
+ '("gconstpointer" "key")
+ )
+)
+
+(define-function empathy_account_equal
+ (c-name "empathy_account_equal")
+ (return-type "gboolean")
+ (parameters
+ '("gconstpointer" "a")
+ '("gconstpointer" "b")
+ )
+)
+
+(define-function empathy_mission_control_new
+ (c-name "empathy_mission_control_new")
+ (is-constructor-of "EmpathyMissionControl")
+ (return-type "MissionControl*")
+)
+
+(define-function empathy_call_with_contact
+ (c-name "empathy_call_with_contact")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ )
+)
+
+(define-function empathy_call_with_contact_id
+ (c-name "empathy_call_with_contact_id")
+ (return-type "none")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "contact_id")
+ )
+)
+
+(define-function empathy_chat_with_contact
+ (c-name "empathy_chat_with_contact")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ )
+)
+
+(define-function empathy_chat_with_contact_id
+ (c-name "empathy_chat_with_contact_id")
+ (return-type "none")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "contact_id")
+ )
+)
+
+(define-function empathy_presence_get_default_message
+ (c-name "empathy_presence_get_default_message")
+ (return-type "const-gchar*")
+ (parameters
+ '("McPresence" "presence")
+ )
+)
+
+(define-function empathy_presence_to_str
+ (c-name "empathy_presence_to_str")
+ (return-type "const-gchar*")
+ (parameters
+ '("McPresence" "presence")
+ )
+)
+
+(define-function empathy_presence_from_str
+ (c-name "empathy_presence_from_str")
+ (return-type "McPresence")
+ (parameters
+ '("const-gchar*" "str")
+ )
+)
+
+(define-function empathy_file_lookup
+ (c-name "empathy_file_lookup")
+ (return-type "gchar*")
+ (parameters
+ '("const-gchar*" "filename")
+ '("const-gchar*" "subdir")
+ )
+)
+
+(define-function empathy_run_until_ready
+ (c-name "empathy_run_until_ready")
+ (return-type "none")
+ (parameters
+ '("gpointer" "object")
+ )
+)
+
+(define-function empathy_run_until_ready_full
+ (c-name "empathy_run_until_ready_full")
+ (return-type "none")
+ (parameters
+ '("gpointer" "object")
+ '("const-gchar*" "signal")
+ '("EmpathyRunUntilReadyFunc" "func")
+ '("gpointer" "user_data")
+ '("GMainLoop**" "loop")
+ )
+)
+
+(define-function empathy_channel_get_account
+ (c-name "empathy_channel_get_account")
+ (return-type "McAccount*")
+ (parameters
+ '("TpChannel*" "channel")
+ )
+)
+
+(define-function empathy_connect_to_account_status_changed
+ (c-name "empathy_connect_to_account_status_changed")
+ (return-type "gpointer")
+ (parameters
+ '("MissionControl*" "mc")
+ '("GCallback" "handler")
+ '("gpointer" "user_data")
+ '("GClosureNotify" "free_func")
+ )
+)
+
+(define-function empathy_disconnect_account_status_changed
+ (c-name "empathy_disconnect_account_status_changed")
+ (return-type "none")
+ (parameters
+ '("gpointer" "token")
+ )
+)
+
+
+
+;; From empathy-message.h
+
+(define-function empathy_message_get_type
+ (c-name "empathy_message_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_message_new
+ (c-name "empathy_message_new")
+ (is-constructor-of "EmpathyMessage")
+ (return-type "EmpathyMessage*")
+ (parameters
+ '("const-gchar*" "body")
+ )
+)
+
+(define-method get_tptype
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_get_tptype")
+ (return-type "TpChannelTextMessageType")
+)
+
+(define-method set_tptype
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_set_tptype")
+ (return-type "none")
+ (parameters
+ '("TpChannelTextMessageType" "type")
+ )
+)
+
+(define-method get_sender
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_get_sender")
+ (return-type "EmpathyContact*")
+)
+
+(define-method set_sender
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_set_sender")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ )
+)
+
+(define-method get_receiver
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_get_receiver")
+ (return-type "EmpathyContact*")
+)
+
+(define-method set_receiver
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_set_receiver")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ )
+)
+
+(define-method get_body
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_get_body")
+ (return-type "const-gchar*")
+)
+
+(define-method set_body
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_set_body")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "body")
+ )
+)
+
+(define-method get_timestamp
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_get_timestamp")
+ (return-type "time_t")
+)
+
+(define-method set_timestamp
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_set_timestamp")
+ (return-type "none")
+ (parameters
+ '("time_t" "timestamp")
+ )
+)
+
+(define-method get_date_and_time
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_get_date_and_time")
+ (return-type "GDate*")
+ (parameters
+ '("time_t*" "timestamp")
+ )
+)
+
+(define-method should_highlight
+ (of-object "EmpathyMessage")
+ (c-name "empathy_message_should_highlight")
+ (return-type "gboolean")
+)
+
+(define-function empathy_message_type_from_str
+ (c-name "empathy_message_type_from_str")
+ (return-type "TpChannelTextMessageType")
+ (parameters
+ '("const-gchar*" "type_str")
+ )
+)
+
+(define-function empathy_message_type_to_str
+ (c-name "empathy_message_type_to_str")
+ (return-type "const-gchar*")
+ (parameters
+ '("TpChannelTextMessageType" "type")
+ )
+)
+
+
+
+;; From empathy-chatroom-manager.h
+
+(define-function empathy_chatroom_manager_get_type
+ (c-name "empathy_chatroom_manager_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_chatroom_manager_new
+ (c-name "empathy_chatroom_manager_new")
+ (is-constructor-of "EmpathyChatroomManager")
+ (return-type "EmpathyChatroomManager*")
+)
+
+(define-method add
+ (of-object "EmpathyChatroomManager")
+ (c-name "empathy_chatroom_manager_add")
+ (return-type "gboolean")
+ (parameters
+ '("EmpathyChatroom*" "chatroom")
+ )
+)
+
+(define-method remove
+ (of-object "EmpathyChatroomManager")
+ (c-name "empathy_chatroom_manager_remove")
+ (return-type "none")
+ (parameters
+ '("EmpathyChatroom*" "chatroom")
+ )
+)
+
+(define-method find
+ (of-object "EmpathyChatroomManager")
+ (c-name "empathy_chatroom_manager_find")
+ (return-type "EmpathyChatroom*")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "room")
+ )
+)
+
+(define-method get_chatrooms
+ (of-object "EmpathyChatroomManager")
+ (c-name "empathy_chatroom_manager_get_chatrooms")
+ (return-type "GList*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-method get_count
+ (of-object "EmpathyChatroomManager")
+ (c-name "empathy_chatroom_manager_get_count")
+ (return-type "guint")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-method store
+ (of-object "EmpathyChatroomManager")
+ (c-name "empathy_chatroom_manager_store")
+ (return-type "none")
+)
+
+
+
+;; From empathy-chatroom.h
+
+(define-function empathy_chatroom_get_type
+ (c-name "empathy_chatroom_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_chatroom_new
+ (c-name "empathy_chatroom_new")
+ (is-constructor-of "EmpathyChatroom")
+ (return-type "EmpathyChatroom*")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "room")
+ )
+)
+
+(define-function empathy_chatroom_new_full
+ (c-name "empathy_chatroom_new_full")
+ (return-type "EmpathyChatroom*")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "room")
+ '("const-gchar*" "name")
+ '("gboolean" "auto_connect")
+ )
+)
+
+(define-method get_account
+ (of-object "EmpathyChatroom")
+ (c-name "empathy_chatroom_get_account")
+ (return-type "McAccount*")
+)
+
+(define-method set_account
+ (of-object "EmpathyChatroom")
+ (c-name "empathy_chatroom_set_account")
+ (return-type "none")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-method get_room
+ (of-object "EmpathyChatroom")
+ (c-name "empathy_chatroom_get_room")
+ (return-type "const-gchar*")
+)
+
+(define-method set_room
+ (of-object "EmpathyChatroom")
+ (c-name "empathy_chatroom_set_room")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "room")
+ )
+)
+
+(define-method get_name
+ (of-object "EmpathyChatroom")
+ (c-name "empathy_chatroom_get_name")
+ (return-type "const-gchar*")
+)
+
+(define-method set_name
+ (of-object "EmpathyChatroom")
+ (c-name "empathy_chatroom_set_name")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "name")
+ )
+)
+
+(define-method get_auto_connect
+ (of-object "EmpathyChatroom")
+ (c-name "empathy_chatroom_get_auto_connect")
+ (return-type "gboolean")
+)
+
+(define-method set_auto_connect
+ (of-object "EmpathyChatroom")
+ (c-name "empathy_chatroom_set_auto_connect")
+ (return-type "none")
+ (parameters
+ '("gboolean" "auto_connect")
+ )
+)
+
+(define-function empathy_chatroom_equal
+ (c-name "empathy_chatroom_equal")
+ (return-type "gboolean")
+ (parameters
+ '("gconstpointer" "v1")
+ '("gconstpointer" "v2")
+ )
+)
+
+
+
+;; From empathy-contact.h
+
+(define-function empathy_contact_get_type
+ (c-name "empathy_contact_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_contact_new
+ (c-name "empathy_contact_new")
+ (is-constructor-of "EmpathyContact")
+ (return-type "EmpathyContact*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-function empathy_contact_new_full
+ (c-name "empathy_contact_new_full")
+ (return-type "EmpathyContact*")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "id")
+ '("const-gchar*" "name")
+ )
+)
+
+(define-method get_id
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_get_id")
+ (return-type "const-gchar*")
+)
+
+(define-method set_id
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_set_id")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "id")
+ )
+)
+
+(define-method get_name
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_get_name")
+ (return-type "const-gchar*")
+)
+
+(define-method set_name
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_set_name")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "name")
+ )
+)
+
+(define-method get_avatar
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_get_avatar")
+ (return-type "EmpathyAvatar*")
+)
+
+(define-method set_avatar
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_set_avatar")
+ (return-type "none")
+ (parameters
+ '("EmpathyAvatar*" "avatar")
+ )
+)
+
+(define-method get_account
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_get_account")
+ (return-type "McAccount*")
+)
+
+(define-method set_account
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_set_account")
+ (return-type "none")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-method get_presence
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_get_presence")
+ (return-type "McPresence")
+)
+
+(define-method set_presence
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_set_presence")
+ (return-type "none")
+ (parameters
+ '("McPresence" "presence")
+ )
+)
+
+(define-method get_presence_message
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_get_presence_message")
+ (return-type "const-gchar*")
+)
+
+(define-method set_presence_message
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_set_presence_message")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "message")
+ )
+)
+
+(define-method get_handle
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_get_handle")
+ (return-type "guint")
+)
+
+(define-method set_handle
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_set_handle")
+ (return-type "none")
+ (parameters
+ '("guint" "handle")
+ )
+)
+
+(define-method get_capabilities
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_get_capabilities")
+ (return-type "EmpathyCapabilities")
+)
+
+(define-method set_capabilities
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_set_capabilities")
+ (return-type "none")
+ (parameters
+ '("EmpathyCapabilities" "capabilities")
+ )
+)
+
+(define-method get_ready
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_get_ready")
+ (return-type "EmpathyContactReady")
+)
+
+(define-method is_user
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_is_user")
+ (return-type "gboolean")
+)
+
+(define-method set_is_user
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_set_is_user")
+ (return-type "none")
+ (parameters
+ '("gboolean" "is_user")
+ )
+)
+
+(define-method is_online
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_is_online")
+ (return-type "gboolean")
+)
+
+(define-method get_status
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_get_status")
+ (return-type "const-gchar*")
+)
+
+(define-method can_voip
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_can_voip")
+ (return-type "gboolean")
+)
+
+(define-function empathy_contact_equal
+ (c-name "empathy_contact_equal")
+ (return-type "gboolean")
+ (parameters
+ '("gconstpointer" "v1")
+ '("gconstpointer" "v2")
+ )
+)
+
+(define-function empathy_contact_hash
+ (c-name "empathy_contact_hash")
+ (return-type "guint")
+ (parameters
+ '("gconstpointer" "key")
+ )
+)
+
+(define-method run_until_ready
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_run_until_ready")
+ (return-type "none")
+ (parameters
+ '("EmpathyContactReady" "ready")
+ '("GMainLoop**" "loop")
+ )
+)
+
+
+
+;; From empathy-contact-groups.h
+
+(define-function empathy_contact_groups_get_all
+ (c-name "empathy_contact_groups_get_all")
+ (return-type "none")
+)
+
+(define-function empathy_contact_group_get_expanded
+ (c-name "empathy_contact_group_get_expanded")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "group")
+ )
+)
+
+(define-function empathy_contact_group_set_expanded
+ (c-name "empathy_contact_group_set_expanded")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "group")
+ '("gboolean" "expanded")
+ )
+)
+
+
+
+;; From empathy-contact-list.h
+
+(define-function empathy_contact_list_get_type
+ (c-name "empathy_contact_list_get_type")
+ (return-type "GType")
+)
+
+(define-method add
+ (of-object "EmpathyContactList")
+ (c-name "empathy_contact_list_add")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ '("const-gchar*" "message")
+ )
+)
+
+(define-method remove
+ (of-object "EmpathyContactList")
+ (c-name "empathy_contact_list_remove")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ '("const-gchar*" "message")
+ )
+)
+
+(define-method get_members
+ (of-object "EmpathyContactList")
+ (c-name "empathy_contact_list_get_members")
+ (return-type "GList*")
+)
+
+(define-method get_pendings
+ (of-object "EmpathyContactList")
+ (c-name "empathy_contact_list_get_pendings")
+ (return-type "GList*")
+)
+
+(define-method get_all_groups
+ (of-object "EmpathyContactList")
+ (c-name "empathy_contact_list_get_all_groups")
+ (return-type "GList*")
+)
+
+(define-method get_groups
+ (of-object "EmpathyContactList")
+ (c-name "empathy_contact_list_get_groups")
+ (return-type "GList*")
+ (parameters
+ '("EmpathyContact*" "contact")
+ )
+)
+
+(define-method add_to_group
+ (of-object "EmpathyContactList")
+ (c-name "empathy_contact_list_add_to_group")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ '("const-gchar*" "group")
+ )
+)
+
+(define-method remove_from_group
+ (of-object "EmpathyContactList")
+ (c-name "empathy_contact_list_remove_from_group")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ '("const-gchar*" "group")
+ )
+)
+
+(define-method rename_group
+ (of-object "EmpathyContactList")
+ (c-name "empathy_contact_list_rename_group")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "old_group")
+ '("const-gchar*" "new_group")
+ )
+)
+
+(define-method remove_group
+ (of-object "EmpathyContactList")
+ (c-name "empathy_contact_list_remove_group")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "group")
+ )
+)
+
+
+
+;; From empathy-contact-manager.h
+
+(define-function empathy_contact_manager_get_type
+ (c-name "empathy_contact_manager_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_contact_manager_new
+ (c-name "empathy_contact_manager_new")
+ (is-constructor-of "EmpathyContactManager")
+ (return-type "EmpathyContactManager*")
+)
+
+(define-method get_list
+ (of-object "EmpathyContactManager")
+ (c-name "empathy_contact_manager_get_list")
+ (return-type "EmpathyTpContactList*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+
+
+;; From empathy-contact-factory.h
+
+(define-function empathy_contact_factory_get_type
+ (c-name "empathy_contact_factory_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_contact_factory_new
+ (c-name "empathy_contact_factory_new")
+ (is-constructor-of "EmpathyContactFactory")
+ (return-type "EmpathyContactFactory*")
+)
+
+(define-method get_tp_factory
+ (of-object "EmpathyContactFactory")
+ (c-name "empathy_contact_factory_get_tp_factory")
+ (return-type "EmpathyTpContactFactory*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-method get_user
+ (of-object "EmpathyContactFactory")
+ (c-name "empathy_contact_factory_get_user")
+ (return-type "EmpathyContact*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-method get_from_id
+ (of-object "EmpathyContactFactory")
+ (c-name "empathy_contact_factory_get_from_id")
+ (return-type "EmpathyContact*")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "id")
+ )
+)
+
+(define-method get_from_handle
+ (of-object "EmpathyContactFactory")
+ (c-name "empathy_contact_factory_get_from_handle")
+ (return-type "EmpathyContact*")
+ (parameters
+ '("McAccount*" "account")
+ '("guint" "handle")
+ )
+)
+
+(define-method get_from_handles
+ (of-object "EmpathyContactFactory")
+ (c-name "empathy_contact_factory_get_from_handles")
+ (return-type "GList*")
+ (parameters
+ '("McAccount*" "account")
+ '("const-GArray*" "handles")
+ )
+)
+
+(define-method set_alias
+ (of-object "EmpathyContactFactory")
+ (c-name "empathy_contact_factory_set_alias")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ '("const-gchar*" "alias")
+ )
+)
+
+(define-method set_avatar
+ (of-object "EmpathyContactFactory")
+ (c-name "empathy_contact_factory_set_avatar")
+ (return-type "none")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "data")
+ '("gsize" "size")
+ '("const-gchar*" "mime_type")
+ )
+)
+
+
+
+;; From empathy-tp-contact-factory.h
+
+(define-function empathy_tp_contact_factory_get_type
+ (c-name "empathy_tp_contact_factory_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_tp_contact_factory_new
+ (c-name "empathy_tp_contact_factory_new")
+ (is-constructor-of "EmpathyTpContactFactory")
+ (return-type "EmpathyTpContactFactory*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-method get_user
+ (of-object "EmpathyTpContactFactory")
+ (c-name "empathy_tp_contact_factory_get_user")
+ (return-type "EmpathyContact*")
+)
+
+(define-method get_from_id
+ (of-object "EmpathyTpContactFactory")
+ (c-name "empathy_tp_contact_factory_get_from_id")
+ (return-type "EmpathyContact*")
+ (parameters
+ '("const-gchar*" "id")
+ )
+)
+
+(define-method get_from_handle
+ (of-object "EmpathyTpContactFactory")
+ (c-name "empathy_tp_contact_factory_get_from_handle")
+ (return-type "EmpathyContact*")
+ (parameters
+ '("guint" "handle")
+ )
+)
+
+(define-method get_from_handles
+ (of-object "EmpathyTpContactFactory")
+ (c-name "empathy_tp_contact_factory_get_from_handles")
+ (return-type "GList*")
+ (parameters
+ '("const-GArray*" "handles")
+ )
+)
+
+(define-method set_alias
+ (of-object "EmpathyTpContactFactory")
+ (c-name "empathy_tp_contact_factory_set_alias")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ '("const-gchar*" "alias")
+ )
+)
+
+(define-method set_avatar
+ (of-object "EmpathyTpContactFactory")
+ (c-name "empathy_tp_contact_factory_set_avatar")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "data")
+ '("gsize" "size")
+ '("const-gchar*" "mime_type")
+ )
+)
+
+(define-method is_ready
+ (of-object "EmpathyTpContactFactory")
+ (c-name "empathy_tp_contact_factory_is_ready")
+ (return-type "gboolean")
+)
+
+
+
+;; From empathy-tp-group.h
+
+(define-function empathy_tp_group_get_type
+ (c-name "empathy_tp_group_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_tp_group_new
+ (c-name "empathy_tp_group_new")
+ (is-constructor-of "EmpathyTpGroup")
+ (return-type "EmpathyTpGroup*")
+ (parameters
+ '("TpChannel*" "channel")
+ )
+)
+
+(define-method close
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_close")
+ (return-type "none")
+)
+
+(define-method add_members
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_add_members")
+ (return-type "none")
+ (parameters
+ '("GList*" "contacts")
+ '("const-gchar*" "message")
+ )
+)
+
+(define-method add_member
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_add_member")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ '("const-gchar*" "message")
+ )
+)
+
+(define-method remove_members
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_remove_members")
+ (return-type "none")
+ (parameters
+ '("GList*" "contacts")
+ '("const-gchar*" "message")
+ )
+)
+
+(define-method remove_member
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_remove_member")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ '("const-gchar*" "message")
+ )
+)
+
+(define-method get_members
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_get_members")
+ (return-type "GList*")
+)
+
+(define-method get_local_pendings
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_get_local_pendings")
+ (return-type "GList*")
+)
+
+(define-method get_remote_pendings
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_get_remote_pendings")
+ (return-type "GList*")
+)
+
+(define-method get_name
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_get_name")
+ (return-type "const-gchar*")
+)
+
+(define-method get_self_contact
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_get_self_contact")
+ (return-type "EmpathyContact*")
+)
+
+(define-method is_member
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_is_member")
+ (return-type "gboolean")
+ (parameters
+ '("EmpathyContact*" "contact")
+ )
+)
+
+(define-method is_ready
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_is_ready")
+ (return-type "gboolean")
+)
+
+(define-method get_invitation
+ (of-object "EmpathyTpGroup")
+ (c-name "empathy_tp_group_get_invitation")
+ (return-type "EmpathyPendingInfo*")
+ (parameters
+ '("EmpathyContact**" "remote_contact")
+ )
+)
+
+(define-function empathy_pending_info_new
+ (c-name "empathy_pending_info_new")
+ (is-constructor-of "EmpathyPendingInfo")
+ (return-type "EmpathyPendingInfo*")
+ (parameters
+ '("EmpathyContact*" "member")
+ '("EmpathyContact*" "actor")
+ '("const-gchar*" "message")
+ )
+)
+
+(define-method free
+ (of-object "EmpathyPendingInfo")
+ (c-name "empathy_pending_info_free")
+ (return-type "none")
+)
+
+
+
+;; From empathy-tp-contact-list.h
+
+(define-function empathy_tp_contact_list_get_type
+ (c-name "empathy_tp_contact_list_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_tp_contact_list_new
+ (c-name "empathy_tp_contact_list_new")
+ (is-constructor-of "EmpathyTpContactList")
+ (return-type "EmpathyTpContactList*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-method get_account
+ (of-object "EmpathyTpContactList")
+ (c-name "empathy_tp_contact_list_get_account")
+ (return-type "McAccount*")
+)
+
+
+
+;; From empathy-tp-chat.h
+
+(define-function empathy_tp_chat_get_type
+ (c-name "empathy_tp_chat_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_tp_chat_new
+ (c-name "empathy_tp_chat_new")
+ (is-constructor-of "EmpathyTpChat")
+ (return-type "EmpathyTpChat*")
+ (parameters
+ '("TpChannel*" "channel")
+ )
+)
+
+(define-method get_id
+ (of-object "EmpathyTpChat")
+ (c-name "empathy_tp_chat_get_id")
+ (return-type "const-gchar*")
+)
+
+(define-method get_remote_contact
+ (of-object "EmpathyTpChat")
+ (c-name "empathy_tp_chat_get_remote_contact")
+ (return-type "EmpathyContact*")
+)
+
+(define-method get_account
+ (of-object "EmpathyTpChat")
+ (c-name "empathy_tp_chat_get_account")
+ (return-type "McAccount*")
+)
+
+(define-method get_channel
+ (of-object "EmpathyTpChat")
+ (c-name "empathy_tp_chat_get_channel")
+ (return-type "TpChannel*")
+)
+
+(define-method is_ready
+ (of-object "EmpathyTpChat")
+ (c-name "empathy_tp_chat_is_ready")
+ (return-type "gboolean")
+)
+
+(define-method get_members_count
+ (of-object "EmpathyTpChat")
+ (c-name "empathy_tp_chat_get_members_count")
+ (return-type "guint")
+)
+
+(define-method set_acknowledge
+ (of-object "EmpathyTpChat")
+ (c-name "empathy_tp_chat_set_acknowledge")
+ (return-type "none")
+ (parameters
+ '("gboolean" "acknowledge")
+ )
+)
+
+(define-method emit_pendings
+ (of-object "EmpathyTpChat")
+ (c-name "empathy_tp_chat_emit_pendings")
+ (return-type "none")
+)
+
+(define-method send
+ (of-object "EmpathyTpChat")
+ (c-name "empathy_tp_chat_send")
+ (return-type "none")
+ (parameters
+ '("EmpathyMessage*" "message")
+ )
+)
+
+(define-method set_state
+ (of-object "EmpathyTpChat")
+ (c-name "empathy_tp_chat_set_state")
+ (return-type "none")
+ (parameters
+ '("TpChannelChatState" "state")
+ )
+)
+
+(define-method set_property
+ (of-object "EmpathyTpChat")
+ (c-name "empathy_tp_chat_set_property")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "name")
+ '("const-GValue*" "value")
+ )
+)
+
+
+
+;; From empathy-tp-roomlist.h
+
+(define-function empathy_tp_roomlist_get_type
+ (c-name "empathy_tp_roomlist_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_tp_roomlist_new
+ (c-name "empathy_tp_roomlist_new")
+ (is-constructor-of "EmpathyTpRoomlist")
+ (return-type "EmpathyTpRoomlist*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-method is_listing
+ (of-object "EmpathyTpRoomlist")
+ (c-name "empathy_tp_roomlist_is_listing")
+ (return-type "gboolean")
+)
+
+(define-method start
+ (of-object "EmpathyTpRoomlist")
+ (c-name "empathy_tp_roomlist_start")
+ (return-type "none")
+)
+
+(define-method stop
+ (of-object "EmpathyTpRoomlist")
+ (c-name "empathy_tp_roomlist_stop")
+ (return-type "none")
+)
+
+
+
+;; From empathy-tp-call.h
+
+(define-function empathy_tp_call_get_type
+ (c-name "empathy_tp_call_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_tp_call_new
+ (c-name "empathy_tp_call_new")
+ (is-constructor-of "EmpathyTpCall")
+ (return-type "EmpathyTpCall*")
+ (parameters
+ '("TpChannel*" "channel")
+ )
+)
+
+(define-method accept_incoming_call
+ (of-object "EmpathyTpCall")
+ (c-name "empathy_tp_call_accept_incoming_call")
+ (return-type "none")
+)
+
+(define-method request_video_stream_direction
+ (of-object "EmpathyTpCall")
+ (c-name "empathy_tp_call_request_video_stream_direction")
+ (return-type "none")
+ (parameters
+ '("gboolean" "is_sending")
+ )
+)
+
+(define-method add_preview_video
+ (of-object "EmpathyTpCall")
+ (c-name "empathy_tp_call_add_preview_video")
+ (return-type "none")
+ (parameters
+ '("guint" "preview_video_socket_id")
+ )
+)
+
+(define-method remove_preview_video
+ (of-object "EmpathyTpCall")
+ (c-name "empathy_tp_call_remove_preview_video")
+ (return-type "none")
+ (parameters
+ '("guint" "preview_video_socket_id")
+ )
+)
+
+(define-method add_output_video
+ (of-object "EmpathyTpCall")
+ (c-name "empathy_tp_call_add_output_video")
+ (return-type "none")
+ (parameters
+ '("guint" "output_video_socket_id")
+ )
+)
+
+(define-method set_output_volume
+ (of-object "EmpathyTpCall")
+ (c-name "empathy_tp_call_set_output_volume")
+ (return-type "none")
+ (parameters
+ '("guint" "volume")
+ )
+)
+
+(define-method mute_output
+ (of-object "EmpathyTpCall")
+ (c-name "empathy_tp_call_mute_output")
+ (return-type "none")
+ (parameters
+ '("gboolean" "is_muted")
+ )
+)
+
+(define-method mute_input
+ (of-object "EmpathyTpCall")
+ (c-name "empathy_tp_call_mute_input")
+ (return-type "none")
+ (parameters
+ '("gboolean" "is_muted")
+ )
+)
+
+(define-method start_tone
+ (of-object "EmpathyTpCall")
+ (c-name "empathy_tp_call_start_tone")
+ (return-type "none")
+ (parameters
+ '("TpDTMFEvent" "event")
+ )
+)
+
+(define-method stop_tone
+ (of-object "EmpathyTpCall")
+ (c-name "empathy_tp_call_stop_tone")
+ (return-type "none")
+)
+
+
+
+;; From empathy-tp-tube.h
+
+(define-function empathy_tp_tube_get_type
+ (c-name "empathy_tp_tube_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_tp_tube_new
+ (c-name "empathy_tp_tube_new")
+ (is-constructor-of "EmpathyTpTube")
+ (return-type "EmpathyTpTube*")
+ (parameters
+ '("TpChannel*" "channel")
+ '("guint" "tube_id")
+ )
+)
+
+(define-function empathy_tp_tube_new_stream_tube
+ (c-name "empathy_tp_tube_new_stream_tube")
+ (return-type "EmpathyTpTube*")
+ (parameters
+ '("EmpathyContact*" "contact")
+ '("TpSocketAddressType" "type")
+ '("const-gchar*" "hostname")
+ '("guint" "port")
+ '("const-gchar*" "service")
+ )
+)
+
+(define-method accept_stream_tube
+ (of-object "EmpathyTpTube")
+ (c-name "empathy_tp_tube_accept_stream_tube")
+ (return-type "none")
+ (parameters
+ '("TpSocketAddressType" "type")
+ )
+)
+
+(define-method get_socket
+ (of-object "EmpathyTpTube")
+ (c-name "empathy_tp_tube_get_socket")
+ (return-type "none")
+ (parameters
+ '("gchar**" "hostname")
+ '("guint*" "port")
+ )
+)
+
+
+
+;; From empathy-idle.h
+
+(define-function empathy_idle_get_type
+ (c-name "empathy_idle_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_idle_new
+ (c-name "empathy_idle_new")
+ (is-constructor-of "EmpathyIdle")
+ (return-type "EmpathyIdle*")
+)
+
+(define-method get_state
+ (of-object "EmpathyIdle")
+ (c-name "empathy_idle_get_state")
+ (return-type "McPresence")
+)
+
+(define-method set_state
+ (of-object "EmpathyIdle")
+ (c-name "empathy_idle_set_state")
+ (return-type "none")
+ (parameters
+ '("McPresence" "state")
+ )
+)
+
+(define-method get_status
+ (of-object "EmpathyIdle")
+ (c-name "empathy_idle_get_status")
+ (return-type "const-gchar*")
+)
+
+(define-method set_status
+ (of-object "EmpathyIdle")
+ (c-name "empathy_idle_set_status")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "status")
+ )
+)
+
+(define-method get_flash_state
+ (of-object "EmpathyIdle")
+ (c-name "empathy_idle_get_flash_state")
+ (return-type "McPresence")
+)
+
+(define-method set_flash_state
+ (of-object "EmpathyIdle")
+ (c-name "empathy_idle_set_flash_state")
+ (return-type "none")
+ (parameters
+ '("McPresence" "state")
+ )
+)
+
+(define-method set_presence
+ (of-object "EmpathyIdle")
+ (c-name "empathy_idle_set_presence")
+ (return-type "none")
+ (parameters
+ '("McPresence" "state")
+ '("const-gchar*" "status")
+ )
+)
+
+(define-method get_auto_away
+ (of-object "EmpathyIdle")
+ (c-name "empathy_idle_get_auto_away")
+ (return-type "gboolean")
+)
+
+(define-method set_auto_away
+ (of-object "EmpathyIdle")
+ (c-name "empathy_idle_set_auto_away")
+ (return-type "none")
+ (parameters
+ '("gboolean" "auto_away")
+ )
+)
+
+(define-method get_use_nm
+ (of-object "EmpathyIdle")
+ (c-name "empathy_idle_get_use_nm")
+ (return-type "gboolean")
+)
+
+(define-method set_use_nm
+ (of-object "EmpathyIdle")
+ (c-name "empathy_idle_set_use_nm")
+ (return-type "none")
+ (parameters
+ '("gboolean" "use_nm")
+ )
+)
+
+
+
+;; From empathy-log-manager.h
+
+(define-function empathy_log_manager_get_type
+ (c-name "empathy_log_manager_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_log_manager_new
+ (c-name "empathy_log_manager_new")
+ (is-constructor-of "EmpathyLogManager")
+ (return-type "EmpathyLogManager*")
+)
+
+(define-method add_message
+ (of-object "EmpathyLogManager")
+ (c-name "empathy_log_manager_add_message")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "chat_id")
+ '("gboolean" "chatroom")
+ '("EmpathyMessage*" "message")
+ )
+)
+
+(define-method exists
+ (of-object "EmpathyLogManager")
+ (c-name "empathy_log_manager_exists")
+ (return-type "gboolean")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "chat_id")
+ '("gboolean" "chatroom")
+ )
+)
+
+(define-method get_dates
+ (of-object "EmpathyLogManager")
+ (c-name "empathy_log_manager_get_dates")
+ (return-type "GList*")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "chat_id")
+ '("gboolean" "chatroom")
+ )
+)
+
+(define-method get_messages_for_file
+ (of-object "EmpathyLogManager")
+ (c-name "empathy_log_manager_get_messages_for_file")
+ (return-type "GList*")
+ (parameters
+ '("const-gchar*" "filename")
+ )
+)
+
+(define-method get_messages_for_date
+ (of-object "EmpathyLogManager")
+ (c-name "empathy_log_manager_get_messages_for_date")
+ (return-type "GList*")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "chat_id")
+ '("gboolean" "chatroom")
+ '("const-gchar*" "date")
+ )
+)
+
+(define-method get_last_messages
+ (of-object "EmpathyLogManager")
+ (c-name "empathy_log_manager_get_last_messages")
+ (return-type "GList*")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "chat_id")
+ '("gboolean" "chatroom")
+ )
+)
+
+(define-method get_messages_for_file
+ (of-object "EmpathyLogManager")
+ (c-name "empathy_log_manager_get_messages_for_file")
+ (return-type "GList*")
+ (parameters
+ '("const-gchar*" "filename")
+ )
+)
+
+(define-method get_chats
+ (of-object "EmpathyLogManager")
+ (c-name "empathy_log_manager_get_chats")
+ (return-type "GList*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-method search_new
+ (of-object "EmpathyLogManager")
+ (c-name "empathy_log_manager_search_new")
+ (return-type "GList*")
+ (parameters
+ '("const-gchar*" "text")
+ )
+)
+
+(define-function empathy_log_manager_search_free
+ (c-name "empathy_log_manager_search_free")
+ (return-type "none")
+ (parameters
+ '("GList*" "hits")
+ )
+)
+
+(define-function empathy_log_manager_get_date_readable
+ (c-name "empathy_log_manager_get_date_readable")
+ (return-type "gchar*")
+ (parameters
+ '("const-gchar*" "date")
+ )
+)
+
+
+
+;; From empathy-irc-network-manager.h
+
+(define-function empathy_irc_network_manager_get_type
+ (c-name "empathy_irc_network_manager_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_irc_network_manager_new
+ (c-name "empathy_irc_network_manager_new")
+ (is-constructor-of "EmpathyIrcNetworkManager")
+ (return-type "EmpathyIrcNetworkManager*")
+ (parameters
+ '("const-gchar*" "global_file")
+ '("const-gchar*" "user_file")
+ )
+)
+
+(define-method add
+ (of-object "EmpathyIrcNetworkManager")
+ (c-name "empathy_irc_network_manager_add")
+ (return-type "none")
+ (parameters
+ '("EmpathyIrcNetwork*" "network")
+ )
+)
+
+(define-method remove
+ (of-object "EmpathyIrcNetworkManager")
+ (c-name "empathy_irc_network_manager_remove")
+ (return-type "none")
+ (parameters
+ '("EmpathyIrcNetwork*" "network")
+ )
+)
+
+(define-method get_networks
+ (of-object "EmpathyIrcNetworkManager")
+ (c-name "empathy_irc_network_manager_get_networks")
+ (return-type "GSList*")
+)
+
+(define-method find_network_by_address
+ (of-object "EmpathyIrcNetworkManager")
+ (c-name "empathy_irc_network_manager_find_network_by_address")
+ (return-type "EmpathyIrcNetwork*")
+ (parameters
+ '("const-gchar*" "address")
+ )
+)
+
+
+
+;; From empathy-irc-network.h
+
+(define-function empathy_irc_network_get_type
+ (c-name "empathy_irc_network_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_irc_network_new
+ (c-name "empathy_irc_network_new")
+ (is-constructor-of "EmpathyIrcNetwork")
+ (return-type "EmpathyIrcNetwork*")
+ (parameters
+ '("const-gchar*" "name")
+ )
+)
+
+(define-method get_servers
+ (of-object "EmpathyIrcNetwork")
+ (c-name "empathy_irc_network_get_servers")
+ (return-type "GSList*")
+)
+
+(define-method append_server
+ (of-object "EmpathyIrcNetwork")
+ (c-name "empathy_irc_network_append_server")
+ (return-type "none")
+ (parameters
+ '("EmpathyIrcServer*" "server")
+ )
+)
+
+(define-method remove_server
+ (of-object "EmpathyIrcNetwork")
+ (c-name "empathy_irc_network_remove_server")
+ (return-type "none")
+ (parameters
+ '("EmpathyIrcServer*" "server")
+ )
+)
+
+(define-method set_server_position
+ (of-object "EmpathyIrcNetwork")
+ (c-name "empathy_irc_network_set_server_position")
+ (return-type "none")
+ (parameters
+ '("EmpathyIrcServer*" "server")
+ '("gint" "pos")
+ )
+)
+
+
+
+;; From empathy-irc-server.h
+
+(define-function empathy_irc_server_get_type
+ (c-name "empathy_irc_server_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_irc_server_new
+ (c-name "empathy_irc_server_new")
+ (is-constructor-of "EmpathyIrcServer")
+ (return-type "EmpathyIrcServer*")
+ (parameters
+ '("const-gchar*" "address")
+ '("guint" "port")
+ '("gboolean" "ssl")
+ )
+)
+
+
+
+;; From empathy-tube-handler.h
+
+(define-function empathy_tube_handler_get_type
+ (c-name "empathy_tube_handler_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_tube_handler_new
+ (c-name "empathy_tube_handler_new")
+ (is-constructor-of "EmpathyTubeHandler")
+ (return-type "EmpathyTubeHandler*")
+ (parameters
+ '("TpTubeType" "type")
+ '("const-gchar*" "service")
+ )
+)
+
+(define-function empathy_tube_handler_build_bus_name
+ (c-name "empathy_tube_handler_build_bus_name")
+ (return-type "gchar*")
+ (parameters
+ '("TpTubeType" "type")
+ '("const-gchar*" "service")
+ )
+)
+
+(define-function empathy_tube_handler_build_object_path
+ (c-name "empathy_tube_handler_build_object_path")
+ (return-type "gchar*")
+ (parameters
+ '("TpTubeType" "type")
+ '("const-gchar*" "service")
+ )
+)
+
+
+
+;; From empathy-dispatcher.h
+
+(define-function empathy_dispatcher_get_type
+ (c-name "empathy_dispatcher_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_dispatcher_new
+ (c-name "empathy_dispatcher_new")
+ (is-constructor-of "EmpathyDispatcher")
+ (return-type "EmpathyDispatcher*")
+)
+
+(define-method channel_process
+ (of-object "EmpathyDispatcher")
+ (c-name "empathy_dispatcher_channel_process")
+ (return-type "none")
+ (parameters
+ '("TpChannel*" "channel")
+ )
+)
+
+(define-function empathy_dispatcher_tube_get_type
+ (c-name "empathy_dispatcher_tube_get_type")
+ (return-type "GType")
+)
+
+(define-method ref
+ (of-object "EmpathyDispatcherTube")
+ (c-name "empathy_dispatcher_tube_ref")
+ (return-type "EmpathyDispatcherTube*")
+)
+
+(define-method unref
+ (of-object "EmpathyDispatcherTube")
+ (c-name "empathy_dispatcher_tube_unref")
+ (return-type "none")
+)
+
+(define-method tube_process
+ (of-object "EmpathyDispatcher")
+ (c-name "empathy_dispatcher_tube_process")
+ (return-type "none")
+ (parameters
+ '("EmpathyDispatcherTube*" "tube")
+ )
+)
+
+
diff --git a/trunk/python/pyempathy/pyempathy.override b/trunk/python/pyempathy/pyempathy.override
new file mode 100644
index 000000000..0b44a265d
--- /dev/null
+++ b/trunk/python/pyempathy/pyempathy.override
@@ -0,0 +1,64 @@
+%%
+headers
+#include <Python.h>
+#include <pygobject.h>
+#include "empathy-avatar.h"
+#include "empathy-chatroom.h"
+#include "empathy-chatroom-manager.h"
+#include "empathy-contact.h"
+#include "empathy-contact-factory.h"
+#include "empathy-contact-groups.h"
+#include "empathy-contact-list.h"
+#include "empathy-contact-manager.h"
+#include "empathy-debug.h"
+#include "empathy-dispatcher.h"
+#include "empathy-enum-types.h"
+#include "empathy-idle.h"
+#include "empathy-irc-network.h"
+#include "empathy-irc-network-manager.h"
+#include "empathy-irc-server.h"
+#include "empathy-log-manager.h"
+#include "empathy-message.h"
+#include "empathy-status-presets.h"
+#include "empathy-time.h"
+#include "empathy-tp-call.h"
+#include "empathy-tp-chat.h"
+#include "empathy-tp-contact-factory.h"
+#include "empathy-tp-contact-list.h"
+#include "empathy-tp-group.h"
+#include "empathy-tp-roomlist.h"
+#include "empathy-tp-tube.h"
+#include "empathy-tube-handler.h"
+#include "empathy-utils.h"
+
+void empathy_add_constants(PyObject *module, const gchar *strip_prefix);
+void empathy_register_classes(PyObject *d);
+
+%%
+modulename empathy
+%%
+ignore-glob
+ *_get_type
+%%
+import gobject.GObject as PyGObject_Type
+%%
+override empathy_contact_list_get_members kwargs
+static PyObject *
+_wrap_empathy_contact_list_get_members(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+
+ PyObject *py_contacts = PyList_New(0);
+ GList *l, *contacts;
+
+ contacts = empathy_contact_list_get_members(EMPATHY_CONTACT_LIST(self->obj));
+
+ for (l = contacts; l; l = l->next) {
+ EmpathyContact *contact;
+ contact = l->data;
+ PyList_Append(py_contacts, pygobject_new((GObject *) contact));
+ }
+
+ return py_contacts;
+
+}
+%%
diff --git a/trunk/python/pyempathy/pyempathymodule.c b/trunk/python/pyempathy/pyempathymodule.c
new file mode 100644
index 000000000..118031366
--- /dev/null
+++ b/trunk/python/pyempathy/pyempathymodule.c
@@ -0,0 +1,24 @@
+#include <pygobject.h>
+
+void empathy_register_classes (PyObject *d);
+DL_EXPORT(void) initempathy(void);
+extern PyMethodDef empathy_functions[];
+
+DL_EXPORT(void)
+initempathy(void)
+{
+ PyObject *m, *d;
+
+ init_pygobject ();
+
+ m = Py_InitModule ("empathy", empathy_functions);
+ d = PyModule_GetDict (m);
+
+ empathy_register_classes (d);
+
+ if (PyErr_Occurred ()) {
+ PyErr_Print();
+ Py_FatalError ("can't initialise module empathy");
+ }
+}
+
diff --git a/trunk/python/pyempathygtk.patch b/trunk/python/pyempathygtk.patch
new file mode 100644
index 000000000..a0730a181
--- /dev/null
+++ b/trunk/python/pyempathygtk.patch
@@ -0,0 +1,18 @@
+--- /home/zdra/Desktop/pyempathygtk.defs 2008-04-02 11:19:27.000000000 +0200
++++ pyempathygtk/pyempathygtk.defs 2008-04-02 11:29:23.000000000 +0200
+@@ -1042,10 +1042,13 @@
+ (return-type "GType")
+ )
+
+-(define-method store_new
+- (of-object "EmpathyContactList")
++(define-function empathy_contact_list_store_new
++ (is-constructor-of "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_new")
+ (return-type "EmpathyContactListStore*")
++ (parameters
++ '("EmpathyContactList*" "list_iface")
++ )
+ )
+
+ (define-method get_list_iface
diff --git a/trunk/python/pyempathygtk/Makefile.am b/trunk/python/pyempathygtk/Makefile.am
new file mode 100644
index 000000000..39f776b27
--- /dev/null
+++ b/trunk/python/pyempathygtk/Makefile.am
@@ -0,0 +1,43 @@
+PYDEFS=`pkg-config --variable=defsdir pygtk-2.0`
+
+AM_CPPFLAGS = \
+ -I. \
+ -I$(top_srcdir)/libempathy-gtk \
+ -I$(top_srcdir) \
+ -DDATADIR=\""$(datadir)"\" \
+ $(PYTHON_BINDING_CFLAGS) \
+ $(PYTHON_INCLUDES)
+
+BUILT_SOURCES = \
+ pyempathygtk.c
+
+pyempathygtkdir = $(pyexecdir)
+pyempathygtk_LTLIBRARIES = empathygtk.la
+
+empathygtk_la_SOURCES = \
+ pyempathygtkmodule.c \
+ pyempathygtk.c
+
+empathygtk_la_LIBADD = \
+ $(PYTHON_BINDING_LIBS) \
+ $(top_builddir)/libempathy/libempathy.la \
+ $(top_builddir)/libempathy-gtk/libempathy-gtk.la
+
+empathygtk_la_LDFLAGS = \
+ -module -avoid-version
+
+pyempathygtk.c: pyempathygtk.override pyempathygtk.defs
+ pygtk-codegen-2.0 \
+ --prefix empathy \
+ --register $(PYDEFS)/gdk-types.defs \
+ --register $(PYDEFS)/gtk-types.defs \
+ --register ../pyempathy/pyempathy.defs \
+ --override pyempathygtk.override \
+ pyempathygtk.defs > $@
+
+EXTRA_DIST = \
+ pyempathygtk.override \
+ pyempathygtk.defs
+
+CLEANFILES = $(BUILT_SOURCES)
+
diff --git a/trunk/python/pyempathygtk/pyempathygtk.defs b/trunk/python/pyempathygtk/pyempathygtk.defs
new file mode 100644
index 000000000..f0ea3b096
--- /dev/null
+++ b/trunk/python/pyempathygtk/pyempathygtk.defs
@@ -0,0 +1,1833 @@
+;; -*- scheme -*-
+; object definitions ...
+(define-object AccountChooser
+ (in-module "Empathy")
+ (parent "GtkComboBox")
+ (c-name "EmpathyAccountChooser")
+ (gtype-id "EMPATHY_TYPE_ACCOUNT_CHOOSER")
+)
+
+(define-object AvatarChooser
+ (in-module "Empathy")
+ (parent "GtkButton")
+ (c-name "EmpathyAvatarChooser")
+ (gtype-id "EMPATHY_TYPE_AVATAR_CHOOSER")
+)
+
+(define-object AvatarImage
+ (in-module "Empathy")
+ (parent "GtkEventBox")
+ (c-name "EmpathyAvatarImage")
+ (gtype-id "EMPATHY_TYPE_AVATAR_IMAGE")
+)
+
+(define-object CellRendererActivatable
+ (in-module "Empathy")
+ (parent "GtkCellRendererPixbuf")
+ (c-name "EmpathyCellRendererActivatable")
+ (gtype-id "EMPATHY_TYPE_CELL_RENDERER_ACTIVATABLE")
+)
+
+(define-object CellRendererExpander
+ (in-module "Empathy")
+ (parent "GtkCellRenderer")
+ (c-name "EmpathyCellRendererExpander")
+ (gtype-id "EMPATHY_TYPE_CELL_RENDERER_EXPANDER")
+)
+
+(define-object CellRendererText
+ (in-module "Empathy")
+ (parent "GtkCellRendererText")
+ (c-name "EmpathyCellRendererText")
+ (gtype-id "EMPATHY_TYPE_CELL_RENDERER_TEXT")
+)
+
+(define-object Chat
+ (in-module "Empathy")
+ (parent "GtkBin")
+ (c-name "EmpathyChat")
+ (gtype-id "EMPATHY_TYPE_CHAT")
+)
+
+(define-object ChatView
+ (in-module "Empathy")
+ (parent "GtkTextView")
+ (c-name "EmpathyChatView")
+ (gtype-id "EMPATHY_TYPE_CHAT_VIEW")
+)
+
+(define-object Conf
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyConf")
+ (gtype-id "EMPATHY_TYPE_CONF")
+)
+
+(define-object ContactListStore
+ (in-module "Empathy")
+ (parent "GtkTreeStore")
+ (c-name "EmpathyContactListStore")
+ (gtype-id "EMPATHY_TYPE_CONTACT_LIST_STORE")
+)
+
+(define-object ContactListView
+ (in-module "Empathy")
+ (parent "GtkTreeView")
+ (c-name "EmpathyContactListView")
+ (gtype-id "EMPATHY_TYPE_CONTACT_LIST_VIEW")
+)
+
+(define-object PresenceChooser
+ (in-module "Empathy")
+ (parent "GtkToggleButton")
+ (c-name "EmpathyPresenceChooser")
+ (gtype-id "EMPATHY_TYPE_PRESENCE_CHOOSER")
+)
+
+(define-object SmileyManager
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathySmileyManager")
+ (gtype-id "EMPATHY_TYPE_SMILEY_MANAGER")
+)
+
+(define-object Theme
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyTheme")
+ (gtype-id "EMPATHY_TYPE_THEME")
+)
+
+(define-object ThemeBoxes
+ (in-module "Empathy")
+ (parent "EmpathyTheme")
+ (c-name "EmpathyThemeBoxes")
+ (gtype-id "EMPATHY_TYPE_THEME_BOXES")
+)
+
+(define-object ThemeIrc
+ (in-module "Empathy")
+ (parent "EmpathyTheme")
+ (c-name "EmpathyThemeIrc")
+ (gtype-id "EMPATHY_TYPE_THEME_IRC")
+)
+
+(define-object ThemeManager
+ (in-module "Empathy")
+ (parent "GObject")
+ (c-name "EmpathyThemeManager")
+ (gtype-id "EMPATHY_TYPE_THEME_MANAGER")
+)
+
+;; Enumerations and flags ...
+
+(define-enum ContactListStoreSort
+ (in-module "Empathy")
+ (c-name "EmpathyContactListStoreSort")
+ (gtype-id "EMPATHY_TYPE_CONTACT_LIST_STORE_SORT")
+ (values
+ '("state" "EMPATHY_CONTACT_LIST_STORE_SORT_STATE")
+ '("name" "EMPATHY_CONTACT_LIST_STORE_SORT_NAME")
+ )
+)
+
+(define-enum ContactListStoreCol
+ (in-module "Empathy")
+ (c-name "EmpathyContactListStoreCol")
+ (gtype-id "EMPATHY_TYPE_CONTACT_LIST_STORE_COL")
+ (values
+ '("icon-status" "EMPATHY_CONTACT_LIST_STORE_COL_ICON_STATUS")
+ '("pixbuf-avatar" "EMPATHY_CONTACT_LIST_STORE_COL_PIXBUF_AVATAR")
+ '("pixbuf-avatar-visible" "EMPATHY_CONTACT_LIST_STORE_COL_PIXBUF_AVATAR_VISIBLE")
+ '("name" "EMPATHY_CONTACT_LIST_STORE_COL_NAME")
+ '("status" "EMPATHY_CONTACT_LIST_STORE_COL_STATUS")
+ '("status-visible" "EMPATHY_CONTACT_LIST_STORE_COL_STATUS_VISIBLE")
+ '("contact" "EMPATHY_CONTACT_LIST_STORE_COL_CONTACT")
+ '("is-group" "EMPATHY_CONTACT_LIST_STORE_COL_IS_GROUP")
+ '("is-active" "EMPATHY_CONTACT_LIST_STORE_COL_IS_ACTIVE")
+ '("is-online" "EMPATHY_CONTACT_LIST_STORE_COL_IS_ONLINE")
+ '("is-separator" "EMPATHY_CONTACT_LIST_STORE_COL_IS_SEPARATOR")
+ '("can-voip" "EMPATHY_CONTACT_LIST_STORE_COL_CAN_VOIP")
+ '("count" "EMPATHY_CONTACT_LIST_STORE_COL_COUNT")
+ )
+)
+
+(define-flags ContactListFeatureFlags
+ (in-module "Empathy")
+ (c-name "EmpathyContactListFeatureFlags")
+ (gtype-id "EMPATHY_TYPE_CONTACT_LIST_FEATURE_FLAGS")
+ (values
+ '("none" "EMPATHY_CONTACT_LIST_FEATURE_NONE")
+ '("groups-save" "EMPATHY_CONTACT_LIST_FEATURE_GROUPS_SAVE")
+ '("groups-rename" "EMPATHY_CONTACT_LIST_FEATURE_GROUPS_RENAME")
+ '("groups-remove" "EMPATHY_CONTACT_LIST_FEATURE_GROUPS_REMOVE")
+ '("contact-remove" "EMPATHY_CONTACT_LIST_FEATURE_CONTACT_REMOVE")
+ '("contact-drop" "EMPATHY_CONTACT_LIST_FEATURE_CONTACT_DROP")
+ '("contact-drag" "EMPATHY_CONTACT_LIST_FEATURE_CONTACT_DRAG")
+ '("all" "EMPATHY_CONTACT_LIST_FEATURE_ALL")
+ )
+)
+
+(define-flags ContactWidgetFlags
+ (in-module "Empathy")
+ (c-name "EmpathyContactWidgetFlags")
+ (gtype-id "EMPATHY_TYPE_CONTACT_WIDGET_FLAGS")
+ (values
+ '("none" "EMPATHY_CONTACT_WIDGET_EDIT_NONE")
+ '("alias" "EMPATHY_CONTACT_WIDGET_EDIT_ALIAS")
+ '("avatar" "EMPATHY_CONTACT_WIDGET_EDIT_AVATAR")
+ '("account" "EMPATHY_CONTACT_WIDGET_EDIT_ACCOUNT")
+ '("id" "EMPATHY_CONTACT_WIDGET_EDIT_ID")
+ '("groups" "EMPATHY_CONTACT_WIDGET_EDIT_GROUPS")
+ )
+)
+
+(define-flags ContactFeatureFlags
+ (in-module "Empathy")
+ (c-name "EmpathyContactFeatureFlags")
+ (gtype-id "EMPATHY_TYPE_CONTACT_FEATURE_FLAGS")
+ (values
+ '("none" "EMPATHY_CONTACT_FEATURE_NONE")
+ '("chat" "EMPATHY_CONTACT_FEATURE_CHAT")
+ '("call" "EMPATHY_CONTACT_FEATURE_CALL")
+ '("log" "EMPATHY_CONTACT_FEATURE_LOG")
+ '("edit" "EMPATHY_CONTACT_FEATURE_EDIT")
+ '("info" "EMPATHY_CONTACT_FEATURE_INFO")
+ '("all" "EMPATHY_CONTACT_FEATURE_ALL")
+ )
+)
+
+
+;; From empathy-images.h
+
+
+
+;; From empathy-account-chooser.h
+
+(define-function empathy_account_chooser_get_type
+ (c-name "empathy_account_chooser_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_account_chooser_new
+ (c-name "empathy_account_chooser_new")
+ (is-constructor-of "EmpathyAccountChooser")
+ (return-type "GtkWidget*")
+)
+
+(define-method get_account
+ (of-object "EmpathyAccountChooser")
+ (c-name "empathy_account_chooser_get_account")
+ (return-type "McAccount*")
+)
+
+(define-method set_account
+ (of-object "EmpathyAccountChooser")
+ (c-name "empathy_account_chooser_set_account")
+ (return-type "gboolean")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-method get_has_all_option
+ (of-object "EmpathyAccountChooser")
+ (c-name "empathy_account_chooser_get_has_all_option")
+ (return-type "gboolean")
+)
+
+(define-method set_has_all_option
+ (of-object "EmpathyAccountChooser")
+ (c-name "empathy_account_chooser_set_has_all_option")
+ (return-type "none")
+ (parameters
+ '("gboolean" "has_all_option")
+ )
+)
+
+(define-method set_filter
+ (of-object "EmpathyAccountChooser")
+ (c-name "empathy_account_chooser_set_filter")
+ (return-type "none")
+ (parameters
+ '("EmpathyAccountChooserFilterFunc" "filter")
+ '("gpointer" "user_data")
+ )
+)
+
+(define-function empathy_account_chooser_filter_is_connected
+ (c-name "empathy_account_chooser_filter_is_connected")
+ (return-type "gboolean")
+ (parameters
+ '("McAccount*" "account")
+ '("gpointer" "user_data")
+ )
+)
+
+
+
+;; From empathy-chat.h
+
+(define-function empathy_chat_get_type
+ (c-name "empathy_chat_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_chat_new
+ (c-name "empathy_chat_new")
+ (is-constructor-of "EmpathyChat")
+ (return-type "EmpathyChat*")
+ (parameters
+ '("EmpathyTpChat*" "tp_chat")
+ )
+)
+
+(define-method get_tp_chat
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_get_tp_chat")
+ (return-type "EmpathyTpChat*")
+)
+
+(define-method set_tp_chat
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_set_tp_chat")
+ (return-type "none")
+ (parameters
+ '("EmpathyTpChat*" "tp_chat")
+ )
+)
+
+(define-method get_account
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_get_account")
+ (return-type "McAccount*")
+)
+
+(define-method get_id
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_get_id")
+ (return-type "const-gchar*")
+)
+
+(define-method get_name
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_get_name")
+ (return-type "const-gchar*")
+)
+
+(define-method get_subject
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_get_subject")
+ (return-type "const-gchar*")
+)
+
+(define-method get_remote_contact
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_get_remote_contact")
+ (return-type "EmpathyContact*")
+)
+
+(define-method get_members_count
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_get_members_count")
+ (return-type "guint")
+)
+
+(define-method get_contact_menu
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_get_contact_menu")
+ (return-type "GtkWidget*")
+)
+
+(define-method clear
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_clear")
+ (return-type "none")
+)
+
+(define-method scroll_down
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_scroll_down")
+ (return-type "none")
+)
+
+(define-method cut
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_cut")
+ (return-type "none")
+)
+
+(define-method copy
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_copy")
+ (return-type "none")
+)
+
+(define-method paste
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_paste")
+ (return-type "none")
+)
+
+(define-method correct_word
+ (of-object "EmpathyChat")
+ (c-name "empathy_chat_correct_word")
+ (return-type "none")
+ (parameters
+ '("GtkTextIter*" "start")
+ '("GtkTextIter*" "end")
+ '("const-gchar*" "new_word")
+ )
+)
+
+
+
+;; From empathy-irc-network-dialog.h
+
+(define-method dialog_show
+ (of-object "EmpathyIrcNetwork")
+ (c-name "empathy_irc_network_dialog_show")
+ (return-type "GtkWidget*")
+ (parameters
+ '("GtkWidget*" "parent")
+ )
+)
+
+
+
+;; From empathy-spell-dialog.h
+
+(define-function empathy_spell_dialog_show
+ (c-name "empathy_spell_dialog_show")
+ (return-type "none")
+ (parameters
+ '("EmpathyChat*" "chat")
+ '("GtkTextIter*" "start")
+ '("GtkTextIter*" "end")
+ '("const-gchar*" "word")
+ )
+)
+
+
+
+;; From empathy-accounts-dialog.h
+
+(define-function empathy_accounts_dialog_show
+ (c-name "empathy_accounts_dialog_show")
+ (return-type "GtkWidget*")
+ (parameters
+ '("GtkWindow*" "parent")
+ )
+)
+
+
+
+;; From empathy-chat-view.h
+
+(define-function empathy_chat_view_get_type
+ (c-name "empathy_chat_view_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_chat_view_new
+ (c-name "empathy_chat_view_new")
+ (is-constructor-of "EmpathyChatView")
+ (return-type "EmpathyChatView*")
+)
+
+(define-method append_message
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_append_message")
+ (return-type "none")
+ (parameters
+ '("EmpathyMessage*" "msg")
+ )
+)
+
+(define-method append_event
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_append_event")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "str")
+ )
+)
+
+(define-method append_button
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_append_button")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "message")
+ '("GtkWidget*" "button1")
+ '("GtkWidget*" "button2")
+ )
+)
+
+(define-method scroll
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_scroll")
+ (return-type "none")
+ (parameters
+ '("gboolean" "allow_scrolling")
+ )
+)
+
+(define-method scroll_down
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_scroll_down")
+ (return-type "none")
+)
+
+(define-method get_selection_bounds
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_get_selection_bounds")
+ (return-type "gboolean")
+ (parameters
+ '("GtkTextIter*" "start")
+ '("GtkTextIter*" "end")
+ )
+)
+
+(define-method clear
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_clear")
+ (return-type "none")
+)
+
+(define-method find_previous
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_find_previous")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "search_criteria")
+ '("gboolean" "new_search")
+ )
+)
+
+(define-method find_next
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_find_next")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "search_criteria")
+ '("gboolean" "new_search")
+ )
+)
+
+(define-method find_abilities
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_find_abilities")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "search_criteria")
+ '("gboolean*" "can_do_previous")
+ '("gboolean*" "can_do_next")
+ )
+)
+
+(define-method highlight
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_highlight")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "text")
+ )
+)
+
+(define-method copy_clipboard
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_copy_clipboard")
+ (return-type "none")
+)
+
+(define-method get_theme
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_get_theme")
+ (return-type "EmpathyTheme*")
+)
+
+(define-method set_theme
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_set_theme")
+ (return-type "none")
+ (parameters
+ '("EmpathyTheme*" "theme")
+ )
+)
+
+(define-method set_margin
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_set_margin")
+ (return-type "none")
+ (parameters
+ '("gint" "margin")
+ )
+)
+
+(define-function empathy_chat_view_get_smiley_menu
+ (c-name "empathy_chat_view_get_smiley_menu")
+ (return-type "GtkWidget*")
+ (parameters
+ '("GCallback" "callback")
+ '("gpointer" "user_data")
+ )
+)
+
+(define-method get_last_timestamp
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_get_last_timestamp")
+ (return-type "time_t")
+)
+
+(define-method set_last_timestamp
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_set_last_timestamp")
+ (return-type "none")
+ (parameters
+ '("time_t" "timestamp")
+ )
+)
+
+(define-method get_last_contact
+ (of-object "EmpathyChatView")
+ (c-name "empathy_chat_view_get_last_contact")
+ (return-type "EmpathyContact*")
+)
+
+(define-function empathy_chat_view_get_avatar_pixbuf_with_cache
+ (c-name "empathy_chat_view_get_avatar_pixbuf_with_cache")
+ (return-type "GdkPixbuf*")
+ (parameters
+ '("EmpathyContact*" "contact")
+ )
+)
+
+
+
+;; From empathy-log-window.h
+
+(define-function empathy_log_window_show
+ (c-name "empathy_log_window_show")
+ (return-type "GtkWidget*")
+ (parameters
+ '("McAccount*" "account")
+ '("const-gchar*" "chat_id")
+ '("gboolean" "chatroom")
+ '("GtkWindow*" "parent")
+ )
+)
+
+
+
+;; From empathy-theme-boxes.h
+
+(define-function empathy_theme_boxes_get_type
+ (c-name "empathy_theme_boxes_get_type")
+ (return-type "GType")
+)
+
+
+
+;; From empathy-account-widget.h
+
+(define-function empathy_account_widget_handle_params
+ (c-name "empathy_account_widget_handle_params")
+ (return-type "none")
+ (parameters
+ '("McAccount*" "account")
+ '("GladeXML*" "glade")
+ '("const-gchar*" "first_widget_name")
+ )
+ (varargs #t)
+)
+
+(define-function empathy_account_widget_add_forget_button
+ (c-name "empathy_account_widget_add_forget_button")
+ (return-type "none")
+ (parameters
+ '("McAccount*" "account")
+ '("GladeXML*" "glade")
+ '("const-gchar*" "button")
+ '("const-gchar*" "entry")
+ )
+)
+
+(define-function empathy_account_widget_generic_new
+ (c-name "empathy_account_widget_generic_new")
+ (is-constructor-of "EmpathyAccountWidgetGeneric")
+ (return-type "GtkWidget*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-function empathy_account_widget_salut_new
+ (c-name "empathy_account_widget_salut_new")
+ (is-constructor-of "EmpathyAccountWidgetSalut")
+ (return-type "GtkWidget*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-function empathy_account_widget_msn_new
+ (c-name "empathy_account_widget_msn_new")
+ (is-constructor-of "EmpathyAccountWidgetMsn")
+ (return-type "GtkWidget*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-function empathy_account_widget_jabber_new
+ (c-name "empathy_account_widget_jabber_new")
+ (is-constructor-of "EmpathyAccountWidgetJabber")
+ (return-type "GtkWidget*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-function empathy_account_widget_icq_new
+ (c-name "empathy_account_widget_icq_new")
+ (is-constructor-of "EmpathyAccountWidgetIcq")
+ (return-type "GtkWidget*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-function empathy_account_widget_aim_new
+ (c-name "empathy_account_widget_aim_new")
+ (is-constructor-of "EmpathyAccountWidgetAim")
+ (return-type "GtkWidget*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-function empathy_account_widget_yahoo_new
+ (c-name "empathy_account_widget_yahoo_new")
+ (is-constructor-of "EmpathyAccountWidgetYahoo")
+ (return-type "GtkWidget*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-function empathy_account_widget_groupwise_new
+ (c-name "empathy_account_widget_groupwise_new")
+ (is-constructor-of "EmpathyAccountWidgetGroupwise")
+ (return-type "GtkWidget*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+
+
+;; From empathy-conf.h
+
+(define-function empathy_conf_get_type
+ (c-name "empathy_conf_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_conf_get
+ (c-name "empathy_conf_get")
+ (return-type "EmpathyConf*")
+)
+
+(define-function empathy_conf_shutdown
+ (c-name "empathy_conf_shutdown")
+ (return-type "none")
+)
+
+(define-method notify_add
+ (of-object "EmpathyConf")
+ (c-name "empathy_conf_notify_add")
+ (return-type "guint")
+ (parameters
+ '("const-gchar*" "key")
+ '("EmpathyConfNotifyFunc" "func")
+ '("gpointer" "data")
+ )
+)
+
+(define-method notify_remove
+ (of-object "EmpathyConf")
+ (c-name "empathy_conf_notify_remove")
+ (return-type "gboolean")
+ (parameters
+ '("guint" "id")
+ )
+)
+
+(define-method set_int
+ (of-object "EmpathyConf")
+ (c-name "empathy_conf_set_int")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "key")
+ '("gint" "value")
+ )
+)
+
+(define-method get_int
+ (of-object "EmpathyConf")
+ (c-name "empathy_conf_get_int")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "key")
+ '("gint*" "value")
+ )
+)
+
+(define-method set_bool
+ (of-object "EmpathyConf")
+ (c-name "empathy_conf_set_bool")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "key")
+ '("gboolean" "value")
+ )
+)
+
+(define-method get_bool
+ (of-object "EmpathyConf")
+ (c-name "empathy_conf_get_bool")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "key")
+ '("gboolean*" "value")
+ )
+)
+
+(define-method set_string
+ (of-object "EmpathyConf")
+ (c-name "empathy_conf_set_string")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "key")
+ '("const-gchar*" "value")
+ )
+)
+
+(define-method get_string
+ (of-object "EmpathyConf")
+ (c-name "empathy_conf_get_string")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "key")
+ '("gchar**" "value")
+ )
+)
+
+(define-method set_string_list
+ (of-object "EmpathyConf")
+ (c-name "empathy_conf_set_string_list")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "key")
+ '("GSList*" "value")
+ )
+)
+
+(define-method get_string_list
+ (of-object "EmpathyConf")
+ (c-name "empathy_conf_get_string_list")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "key")
+ '("GSList**" "value")
+ )
+)
+
+
+
+;; From empathy-theme.h
+
+(define-function empathy_theme_get_type
+ (c-name "empathy_theme_get_type")
+ (return-type "GType")
+)
+
+(define-method update_view
+ (of-object "EmpathyTheme")
+ (c-name "empathy_theme_update_view")
+ (return-type "none")
+ (parameters
+ '("EmpathyChatView*" "view")
+ )
+)
+
+(define-method append_message
+ (of-object "EmpathyTheme")
+ (c-name "empathy_theme_append_message")
+ (return-type "none")
+ (parameters
+ '("EmpathyChatView*" "view")
+ '("EmpathyMessage*" "msg")
+ )
+)
+
+(define-method append_text
+ (of-object "EmpathyTheme")
+ (c-name "empathy_theme_append_text")
+ (return-type "none")
+ (parameters
+ '("EmpathyChatView*" "view")
+ '("const-gchar*" "body")
+ '("const-gchar*" "tag")
+ '("const-gchar*" "link_tag")
+ )
+)
+
+(define-method append_spacing
+ (of-object "EmpathyTheme")
+ (c-name "empathy_theme_append_spacing")
+ (return-type "none")
+ (parameters
+ '("EmpathyChatView*" "view")
+ )
+)
+
+(define-method append_event
+ (of-object "EmpathyTheme")
+ (c-name "empathy_theme_append_event")
+ (return-type "none")
+ (parameters
+ '("EmpathyChatView*" "view")
+ '("const-gchar*" "str")
+ )
+)
+
+(define-method append_timestamp
+ (of-object "EmpathyTheme")
+ (c-name "empathy_theme_append_timestamp")
+ (return-type "none")
+ (parameters
+ '("EmpathyChatView*" "view")
+ '("EmpathyMessage*" "message")
+ '("gboolean" "show_date")
+ '("gboolean" "show_time")
+ )
+)
+
+(define-method maybe_append_date_and_time
+ (of-object "EmpathyTheme")
+ (c-name "empathy_theme_maybe_append_date_and_time")
+ (return-type "none")
+ (parameters
+ '("EmpathyChatView*" "view")
+ '("EmpathyMessage*" "message")
+ )
+)
+
+(define-method get_show_avatars
+ (of-object "EmpathyTheme")
+ (c-name "empathy_theme_get_show_avatars")
+ (return-type "gboolean")
+)
+
+(define-method set_show_avatars
+ (of-object "EmpathyTheme")
+ (c-name "empathy_theme_set_show_avatars")
+ (return-type "none")
+ (parameters
+ '("gboolean" "show")
+ )
+)
+
+
+
+;; From empathy-account-widget-irc.h
+
+(define-function empathy_account_widget_irc_new
+ (c-name "empathy_account_widget_irc_new")
+ (is-constructor-of "EmpathyAccountWidgetIrc")
+ (return-type "GtkWidget*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+
+
+;; From empathy-account-widget-sip.h
+
+(define-function empathy_account_widget_sip_new
+ (c-name "empathy_account_widget_sip_new")
+ (is-constructor-of "EmpathyAccountWidgetSip")
+ (return-type "GtkWidget*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+
+
+;; From empathy-contact-dialogs.h
+
+(define-function empathy_subscription_dialog_show
+ (c-name "empathy_subscription_dialog_show")
+ (return-type "none")
+ (parameters
+ '("EmpathyContact*" "contact")
+ '("GtkWindow*" "parent")
+ )
+)
+
+(define-method information_dialog_show
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_information_dialog_show")
+ (return-type "none")
+ (parameters
+ '("GtkWindow*" "parent")
+ '("gboolean" "edit")
+ '("gboolean" "is_user")
+ )
+)
+
+(define-function empathy_new_contact_dialog_show
+ (c-name "empathy_new_contact_dialog_show")
+ (return-type "none")
+ (parameters
+ '("GtkWindow*" "parent")
+ )
+)
+
+
+
+;; From empathy-new-message-dialog.h
+
+(define-function empathy_new_message_dialog_show
+ (c-name "empathy_new_message_dialog_show")
+ (return-type "GtkWidget*")
+ (parameters
+ '("GtkWindow*" "parent")
+ )
+)
+
+
+
+;; From empathy-theme-irc.h
+
+(define-function empathy_theme_irc_get_type
+ (c-name "empathy_theme_irc_get_type")
+ (return-type "GType")
+)
+
+
+
+;; From empathy-avatar-chooser.h
+
+(define-function empathy_avatar_chooser_get_type
+ (c-name "empathy_avatar_chooser_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_avatar_chooser_new
+ (c-name "empathy_avatar_chooser_new")
+ (is-constructor-of "EmpathyAvatarChooser")
+ (return-type "GtkWidget*")
+)
+
+(define-method set
+ (of-object "EmpathyAvatarChooser")
+ (c-name "empathy_avatar_chooser_set")
+ (return-type "none")
+ (parameters
+ '("EmpathyAvatar*" "avatar")
+ )
+)
+
+(define-method get_image_data
+ (of-object "EmpathyAvatarChooser")
+ (c-name "empathy_avatar_chooser_get_image_data")
+ (return-type "none")
+ (parameters
+ '("const-gchar**" "data")
+ '("gsize*" "data_size")
+ '("const-gchar**" "mime_type")
+ )
+)
+
+
+
+;; From empathy-contact-list-store.h
+
+(define-function empathy_contact_list_store_get_type
+ (c-name "empathy_contact_list_store_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_contact_list_store_new
+ (is-constructor-of "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_new")
+ (return-type "EmpathyContactListStore*")
+ (parameters
+ '("EmpathyContactList*" "list_iface")
+ )
+)
+
+(define-method get_list_iface
+ (of-object "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_get_list_iface")
+ (return-type "EmpathyContactList*")
+)
+
+(define-method get_show_offline
+ (of-object "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_get_show_offline")
+ (return-type "gboolean")
+)
+
+(define-method set_show_offline
+ (of-object "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_set_show_offline")
+ (return-type "none")
+ (parameters
+ '("gboolean" "show_offline")
+ )
+)
+
+(define-method get_show_avatars
+ (of-object "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_get_show_avatars")
+ (return-type "gboolean")
+)
+
+(define-method set_show_avatars
+ (of-object "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_set_show_avatars")
+ (return-type "none")
+ (parameters
+ '("gboolean" "show_avatars")
+ )
+)
+
+(define-method get_show_groups
+ (of-object "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_get_show_groups")
+ (return-type "gboolean")
+)
+
+(define-method set_show_groups
+ (of-object "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_set_show_groups")
+ (return-type "none")
+ (parameters
+ '("gboolean" "show_groups")
+ )
+)
+
+(define-method get_is_compact
+ (of-object "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_get_is_compact")
+ (return-type "gboolean")
+)
+
+(define-method set_is_compact
+ (of-object "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_set_is_compact")
+ (return-type "none")
+ (parameters
+ '("gboolean" "is_compact")
+ )
+)
+
+(define-method get_sort_criterium
+ (of-object "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_get_sort_criterium")
+ (return-type "EmpathyContactListStoreSort")
+)
+
+(define-method set_sort_criterium
+ (of-object "EmpathyContactListStore")
+ (c-name "empathy_contact_list_store_set_sort_criterium")
+ (return-type "none")
+ (parameters
+ '("EmpathyContactListStoreSort" "sort_criterium")
+ )
+)
+
+(define-function empathy_contact_list_store_row_separator_func
+ (c-name "empathy_contact_list_store_row_separator_func")
+ (return-type "gboolean")
+ (parameters
+ '("GtkTreeModel*" "model")
+ '("GtkTreeIter*" "iter")
+ '("gpointer" "data")
+ )
+)
+
+(define-function empathy_contact_list_store_get_parent_group
+ (c-name "empathy_contact_list_store_get_parent_group")
+ (return-type "gchar*")
+ (parameters
+ '("GtkTreeModel*" "model")
+ '("GtkTreePath*" "path")
+ '("gboolean*" "path_is_group")
+ )
+)
+
+(define-function empathy_contact_list_store_search_equal_func
+ (c-name "empathy_contact_list_store_search_equal_func")
+ (return-type "gboolean")
+ (parameters
+ '("GtkTreeModel*" "model")
+ '("gint" "column")
+ '("const-gchar*" "key")
+ '("GtkTreeIter*" "iter")
+ '("gpointer" "search_data")
+ )
+)
+
+
+
+;; From empathy-presence-chooser.h
+
+(define-function empathy_presence_chooser_get_type
+ (c-name "empathy_presence_chooser_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_presence_chooser_new
+ (c-name "empathy_presence_chooser_new")
+ (is-constructor-of "EmpathyPresenceChooser")
+ (return-type "GtkWidget*")
+)
+
+(define-function empathy_presence_chooser_create_menu
+ (c-name "empathy_presence_chooser_create_menu")
+ (return-type "GtkWidget*")
+)
+
+
+
+;; From empathy-theme-manager.h
+
+(define-function empathy_theme_manager_get_type
+ (c-name "empathy_theme_manager_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_theme_manager_get
+ (c-name "empathy_theme_manager_get")
+ (return-type "EmpathyThemeManager*")
+)
+
+(define-function empathy_theme_manager_get_themes
+ (c-name "empathy_theme_manager_get_themes")
+ (return-type "const-gchar**")
+)
+
+(define-method apply
+ (of-object "EmpathyThemeManager")
+ (c-name "empathy_theme_manager_apply")
+ (return-type "none")
+ (parameters
+ '("EmpathyChatView*" "view")
+ '("const-gchar*" "theme")
+ )
+)
+
+(define-method apply_saved
+ (of-object "EmpathyThemeManager")
+ (c-name "empathy_theme_manager_apply_saved")
+ (return-type "none")
+ (parameters
+ '("EmpathyChatView*" "view")
+ )
+)
+
+
+
+;; From empathy-avatar-image.h
+
+(define-function empathy_avatar_image_get_type
+ (c-name "empathy_avatar_image_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_avatar_image_new
+ (c-name "empathy_avatar_image_new")
+ (is-constructor-of "EmpathyAvatarImage")
+ (return-type "GtkWidget*")
+)
+
+(define-method set
+ (of-object "EmpathyAvatarImage")
+ (c-name "empathy_avatar_image_set")
+ (return-type "none")
+ (parameters
+ '("EmpathyAvatar*" "avatar")
+ )
+)
+
+
+
+;; From empathy-contact-list-view.h
+
+(define-function empathy_contact_list_view_get_type
+ (c-name "empathy_contact_list_view_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_contact_list_view_new
+ (c-name "empathy_contact_list_view_new")
+ (is-constructor-of "EmpathyContactListView")
+ (return-type "EmpathyContactListView*")
+ (parameters
+ '("EmpathyContactListStore*" "store")
+ '("EmpathyContactListFeatureFlags" "list_features")
+ '("EmpathyContactFeatureFlags" "contact_features")
+ )
+)
+
+(define-method get_selected
+ (of-object "EmpathyContactListView")
+ (c-name "empathy_contact_list_view_get_selected")
+ (return-type "EmpathyContact*")
+)
+
+(define-method get_selected_group
+ (of-object "EmpathyContactListView")
+ (c-name "empathy_contact_list_view_get_selected_group")
+ (return-type "gchar*")
+)
+
+(define-method get_contact_menu
+ (of-object "EmpathyContactListView")
+ (c-name "empathy_contact_list_view_get_contact_menu")
+ (return-type "GtkWidget*")
+)
+
+(define-method get_group_menu
+ (of-object "EmpathyContactListView")
+ (c-name "empathy_contact_list_view_get_group_menu")
+ (return-type "GtkWidget*")
+)
+
+
+
+;; From empathy-ui-utils.h
+
+(define-function empathy_glade_get_file_simple
+ (c-name "empathy_glade_get_file_simple")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "filename")
+ '("const-gchar*" "root")
+ '("const-gchar*" "domain")
+ '("const-gchar*" "first_required_widget")
+ )
+ (varargs #t)
+)
+
+(define-function empathy_glade_get_file
+ (c-name "empathy_glade_get_file")
+ (return-type "GladeXML*")
+ (parameters
+ '("const-gchar*" "filename")
+ '("const-gchar*" "root")
+ '("const-gchar*" "domain")
+ '("const-gchar*" "first_required_widget")
+ )
+ (varargs #t)
+)
+
+(define-function empathy_glade_connect
+ (c-name "empathy_glade_connect")
+ (return-type "none")
+ (parameters
+ '("GladeXML*" "gui")
+ '("gpointer" "user_data")
+ '("gchar*" "first_widget")
+ )
+ (varargs #t)
+)
+
+(define-function empathy_glade_setup_size_group
+ (c-name "empathy_glade_setup_size_group")
+ (return-type "none")
+ (parameters
+ '("GladeXML*" "gui")
+ '("GtkSizeGroupMode" "mode")
+ '("gchar*" "first_widget")
+ )
+ (varargs #t)
+)
+
+(define-function empathy_icon_name_from_account
+ (c-name "empathy_icon_name_from_account")
+ (return-type "const-gchar*")
+ (parameters
+ '("McAccount*" "account")
+ )
+)
+
+(define-function empathy_icon_name_for_presence
+ (c-name "empathy_icon_name_for_presence")
+ (return-type "const-gchar*")
+ (parameters
+ '("McPresence" "presence")
+ )
+)
+
+(define-function empathy_icon_name_for_contact
+ (c-name "empathy_icon_name_for_contact")
+ (return-type "const-gchar*")
+ (parameters
+ '("EmpathyContact*" "contact")
+ )
+)
+
+(define-function empathy_pixbuf_from_data
+ (c-name "empathy_pixbuf_from_data")
+ (return-type "GdkPixbuf*")
+ (parameters
+ '("gchar*" "data")
+ '("gsize" "data_size")
+ )
+)
+
+(define-function empathy_pixbuf_from_avatar_scaled
+ (c-name "empathy_pixbuf_from_avatar_scaled")
+ (return-type "GdkPixbuf*")
+ (parameters
+ '("EmpathyAvatar*" "avatar")
+ '("gint" "width")
+ '("gint" "height")
+ )
+)
+
+(define-function empathy_pixbuf_avatar_from_contact_scaled
+ (c-name "empathy_pixbuf_avatar_from_contact_scaled")
+ (return-type "GdkPixbuf*")
+ (parameters
+ '("EmpathyContact*" "contact")
+ '("gint" "width")
+ '("gint" "height")
+ )
+)
+
+(define-function empathy_pixbuf_scale_down_if_necessary
+ (c-name "empathy_pixbuf_scale_down_if_necessary")
+ (return-type "GdkPixbuf*")
+ (parameters
+ '("GdkPixbuf*" "pixbuf")
+ '("gint" "max_size")
+ )
+)
+
+(define-function empathy_pixbuf_from_icon_name
+ (c-name "empathy_pixbuf_from_icon_name")
+ (return-type "GdkPixbuf*")
+ (parameters
+ '("const-gchar*" "icon_name")
+ '("GtkIconSize" "icon_size")
+ )
+)
+
+(define-function empathy_text_iter_forward_search
+ (c-name "empathy_text_iter_forward_search")
+ (return-type "gboolean")
+ (parameters
+ '("const-GtkTextIter*" "iter")
+ '("const-gchar*" "str")
+ '("GtkTextIter*" "match_start")
+ '("GtkTextIter*" "match_end")
+ '("const-GtkTextIter*" "limit")
+ )
+)
+
+(define-function empathy_text_iter_backward_search
+ (c-name "empathy_text_iter_backward_search")
+ (return-type "gboolean")
+ (parameters
+ '("const-GtkTextIter*" "iter")
+ '("const-gchar*" "str")
+ '("GtkTextIter*" "match_start")
+ '("GtkTextIter*" "match_end")
+ '("const-GtkTextIter*" "limit")
+ )
+)
+
+(define-function empathy_window_get_is_visible
+ (c-name "empathy_window_get_is_visible")
+ (return-type "gboolean")
+ (parameters
+ '("GtkWindow*" "window")
+ )
+)
+
+(define-function empathy_window_present
+ (c-name "empathy_window_present")
+ (return-type "none")
+ (parameters
+ '("GtkWindow*" "window")
+ '("gboolean" "steal_focus")
+ )
+)
+
+(define-function empathy_window_iconify
+ (c-name "empathy_window_iconify")
+ (return-type "none")
+ (parameters
+ '("GtkWindow*" "window")
+ '("GtkStatusIcon*" "status_icon")
+ )
+)
+
+(define-function empathy_get_toplevel_window
+ (c-name "empathy_get_toplevel_window")
+ (return-type "GtkWindow*")
+ (parameters
+ '("GtkWidget*" "widget")
+ )
+)
+
+(define-function empathy_url_show
+ (c-name "empathy_url_show")
+ (return-type "none")
+ (parameters
+ '("const-char*" "url")
+ )
+)
+
+(define-function empathy_toggle_button_set_state_quietly
+ (c-name "empathy_toggle_button_set_state_quietly")
+ (return-type "none")
+ (parameters
+ '("GtkWidget*" "widget")
+ '("GCallback" "callback")
+ '("gpointer" "user_data")
+ '("gboolean" "active")
+ )
+)
+
+(define-function empathy_link_button_new
+ (c-name "empathy_link_button_new")
+ (is-constructor-of "EmpathyLinkButton")
+ (return-type "GtkWidget*")
+ (parameters
+ '("const-gchar*" "url")
+ '("const-gchar*" "title")
+ )
+)
+
+(define-function empathy_text_buffer_tag_set
+ (c-name "empathy_text_buffer_tag_set")
+ (return-type "GtkTextTag*")
+ (parameters
+ '("GtkTextBuffer*" "buffer")
+ '("const-gchar*" "tag_name")
+ '("const-gchar*" "first_property_name")
+ )
+ (varargs #t)
+)
+
+
+
+;; From empathy-cell-renderer-activatable.h
+
+(define-function empathy_cell_renderer_activatable_get_type
+ (c-name "empathy_cell_renderer_activatable_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_cell_renderer_activatable_new
+ (c-name "empathy_cell_renderer_activatable_new")
+ (is-constructor-of "EmpathyCellRendererActivatable")
+ (return-type "GtkCellRenderer*")
+)
+
+
+
+;; From empathy-contact-widget.h
+
+(define-method widget_new
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_widget_new")
+ (return-type "GtkWidget*")
+ (parameters
+ '("EmpathyContactWidgetFlags" "flags")
+ )
+)
+
+(define-function empathy_contact_widget_get_contact
+ (c-name "empathy_contact_widget_get_contact")
+ (return-type "EmpathyContact*")
+ (parameters
+ '("GtkWidget*" "widget")
+ )
+)
+
+(define-function empathy_contact_widget_set_contact
+ (c-name "empathy_contact_widget_set_contact")
+ (return-type "none")
+ (parameters
+ '("GtkWidget*" "widget")
+ '("EmpathyContact*" "contact")
+ )
+)
+
+(define-function empathy_contact_widget_set_account_filter
+ (c-name "empathy_contact_widget_set_account_filter")
+ (return-type "none")
+ (parameters
+ '("GtkWidget*" "widget")
+ '("EmpathyAccountChooserFilterFunc" "filter")
+ '("gpointer" "user_data")
+ )
+)
+
+
+
+;; From empathy-profile-chooser.h
+
+(define-function empathy_profile_chooser_new
+ (c-name "empathy_profile_chooser_new")
+ (is-constructor-of "EmpathyProfileChooser")
+ (return-type "GtkWidget*")
+)
+
+(define-function empathy_profile_chooser_get_selected
+ (c-name "empathy_profile_chooser_get_selected")
+ (return-type "McProfile*")
+ (parameters
+ '("GtkWidget*" "widget")
+ )
+)
+
+(define-function empathy_profile_chooser_n_profiles
+ (c-name "empathy_profile_chooser_n_profiles")
+ (return-type "gint")
+ (parameters
+ '("GtkWidget*" "widget")
+ )
+)
+
+
+
+;; From empathy-cell-renderer-expander.h
+
+(define-function empathy_cell_renderer_expander_get_type
+ (c-name "empathy_cell_renderer_expander_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_cell_renderer_expander_new
+ (c-name "empathy_cell_renderer_expander_new")
+ (is-constructor-of "EmpathyCellRendererExpander")
+ (return-type "GtkCellRenderer*")
+)
+
+
+
+;; From empathy-geometry.h
+
+(define-function empathy_geometry_save
+ (c-name "empathy_geometry_save")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "name")
+ '("gint" "x")
+ '("gint" "y")
+ '("gint" "w")
+ '("gint" "h")
+ )
+)
+
+(define-function empathy_geometry_load
+ (c-name "empathy_geometry_load")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "name")
+ '("gint*" "x")
+ '("gint*" "y")
+ '("gint*" "w")
+ '("gint*" "h")
+ )
+)
+
+
+
+;; From empathy-smiley-manager.h
+
+(define-function empathy_smiley_manager_get_type
+ (c-name "empathy_smiley_manager_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_smiley_manager_new
+ (c-name "empathy_smiley_manager_new")
+ (is-constructor-of "EmpathySmileyManager")
+ (return-type "EmpathySmileyManager*")
+)
+
+(define-method load
+ (of-object "EmpathySmileyManager")
+ (c-name "empathy_smiley_manager_load")
+ (return-type "none")
+)
+
+(define-method add
+ (of-object "EmpathySmileyManager")
+ (c-name "empathy_smiley_manager_add")
+ (return-type "none")
+ (parameters
+ '("const-gchar*" "icon_name")
+ '("const-gchar*" "first_str")
+ )
+ (varargs #t)
+)
+
+(define-method add_from_pixbuf
+ (of-object "EmpathySmileyManager")
+ (c-name "empathy_smiley_manager_add_from_pixbuf")
+ (return-type "none")
+ (parameters
+ '("GdkPixbuf*" "smiley")
+ '("const-gchar*" "first_str")
+ )
+ (varargs #t)
+)
+
+(define-method get_all
+ (of-object "EmpathySmileyManager")
+ (c-name "empathy_smiley_manager_get_all")
+ (return-type "GSList*")
+)
+
+(define-method parse
+ (of-object "EmpathySmileyManager")
+ (c-name "empathy_smiley_manager_parse")
+ (return-type "GSList*")
+ (parameters
+ '("const-gchar*" "text")
+ )
+)
+
+(define-method free
+ (of-object "EmpathySmiley")
+ (c-name "empathy_smiley_free")
+ (return-type "none")
+)
+
+
+
+;; From empathy-cell-renderer-text.h
+
+(define-function empathy_cell_renderer_text_get_type
+ (c-name "empathy_cell_renderer_text_get_type")
+ (return-type "GType")
+)
+
+(define-function empathy_cell_renderer_text_new
+ (c-name "empathy_cell_renderer_text_new")
+ (is-constructor-of "EmpathyCellRendererText")
+ (return-type "GtkCellRenderer*")
+)
+
+
+
+;; From empathy-spell.h
+
+(define-function empathy_spell_supported
+ (c-name "empathy_spell_supported")
+ (return-type "gboolean")
+)
+
+(define-function empathy_spell_get_language_name
+ (c-name "empathy_spell_get_language_name")
+ (return-type "const-gchar*")
+ (parameters
+ '("const-gchar*" "code")
+ )
+)
+
+(define-function empathy_spell_get_language_codes
+ (c-name "empathy_spell_get_language_codes")
+ (return-type "GList*")
+)
+
+(define-function empathy_spell_free_language_codes
+ (c-name "empathy_spell_free_language_codes")
+ (return-type "none")
+ (parameters
+ '("GList*" "codes")
+ )
+)
+
+(define-function empathy_spell_check
+ (c-name "empathy_spell_check")
+ (return-type "gboolean")
+ (parameters
+ '("const-gchar*" "word")
+ )
+)
+
+(define-function empathy_spell_get_suggestions
+ (c-name "empathy_spell_get_suggestions")
+ (return-type "GList*")
+ (parameters
+ '("const-gchar*" "word")
+ )
+)
+
+(define-function empathy_spell_free_suggestions
+ (c-name "empathy_spell_free_suggestions")
+ (return-type "none")
+ (parameters
+ '("GList*" "suggestions")
+ )
+)
+
+
+
+;; From empathy-contact-menu.h
+
+(define-method menu_new
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_menu_new")
+ (return-type "GtkWidget*")
+ (parameters
+ '("EmpathyContactFeatureFlags" "features")
+ )
+)
+
+(define-method chat_menu_item_new
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_chat_menu_item_new")
+ (return-type "GtkWidget*")
+)
+
+(define-method call_menu_item_new
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_call_menu_item_new")
+ (return-type "GtkWidget*")
+)
+
+(define-method log_menu_item_new
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_log_menu_item_new")
+ (return-type "GtkWidget*")
+)
+
+(define-method info_menu_item_new
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_info_menu_item_new")
+ (return-type "GtkWidget*")
+)
+
+(define-method edit_menu_item_new
+ (of-object "EmpathyContact")
+ (c-name "empathy_contact_edit_menu_item_new")
+ (return-type "GtkWidget*")
+)
+
+
diff --git a/trunk/python/pyempathygtk/pyempathygtk.override b/trunk/python/pyempathygtk/pyempathygtk.override
new file mode 100644
index 000000000..262942888
--- /dev/null
+++ b/trunk/python/pyempathygtk/pyempathygtk.override
@@ -0,0 +1,74 @@
+%%
+headers
+#include <Python.h>
+#include <pygobject.h>
+#include "empathy-account-chooser.h"
+#include "empathy-accounts-dialog.h"
+#include "empathy-account-widget.h"
+#include "empathy-account-widget-irc.h"
+#include "empathy-avatar-chooser.h"
+#include "empathy-avatar-image.h"
+#include "empathy-cell-renderer-activatable.h"
+#include "empathy-cell-renderer-expander.h"
+#include "empathy-cell-renderer-text.h"
+#include "empathy-chat.h"
+#include "empathy-chat-view.h"
+#include "empathy-conf.h"
+#include "empathy-contact-dialogs.h"
+#include "empathy-contact-list-store.h"
+#include "empathy-contact-list-view.h"
+#include "empathy-contact-widget.h"
+#include "empathy-geometry.h"
+#include "empathy-gtk-enum-types.h"
+#include "empathy-images.h"
+#include "empathy-irc-network-dialog.h"
+#include "empathy-log-window.h"
+#include "empathy-new-message-dialog.h"
+#include "empathy-presence-chooser.h"
+#include "empathy-profile-chooser.h"
+#include "empathy-smiley-manager.h"
+#include "empathy-spell-dialog.h"
+#include "empathy-spell.h"
+#include "empathy-theme-boxes.h"
+#include "empathy-theme.h"
+#include "empathy-theme-irc.h"
+#include "empathy-theme-manager.h"
+#include "empathy-ui-utils.h"
+
+void empathy_add_constants(PyObject *module, const gchar *strip_prefix);
+void empathy_register_classes(PyObject *d);
+%%
+modulename empathygtk
+%%
+import gobject.GObject as PyGObject_Type
+import gtk.Widget as PyGtkWidget_Type
+import gtk.Window as PyGtkWindow_Type
+import gtk.CellRenderer as PyGtkCellRenderer_Type
+import gtk.CellRendererText as PyGtkCellRendererText_Type
+import gtk.TextView as PyGtkTextView_Type
+import gtk.TreeView as PyGtkTreeView_Type
+import gtk.TreeStore as PyGtkTreeStore_Type
+import gtk.ToggleButton as PyGtkToggleButton_Type
+import gtk.ComboBox as PyGtkComboBox_Type
+import gtk.StatusIcon as PyGtkStatusIcon_Type
+import gtk.Button as PyGtkButton_Type
+import gtk.EventBox as PyGtkEventBox_Type
+import gtk.CellRendererPixbuf as PyGtkCellRendererPixbuf_Type
+import gtk.gdk.Pixbuf as PyGdkPixbuf_Type
+import gtk.Bin as PyGtkBin_Type
+import empathy.Contact as PyEmpathyContact_Type
+import empathy.ContactList as PyEmpathyContactList_Type
+import empathy.TpChat as PyEmpathyTpChat_Type
+import empathy.Message as PyEmpathyMessage_Type
+import empathy.TpCall as PyEmpathyTpCall_Type
+%%
+ignore-glob
+ *_get_type
+%%
+ignore
+ empathy_chat_correct_word
+ empathy_chat_view_set_margin
+ empathy_chat_get_view
+ empathy_spell_dialog_show
+ empathy_window_iconify
+%%
diff --git a/trunk/python/pyempathygtk/pyempathygtkmodule.c b/trunk/python/pyempathygtk/pyempathygtkmodule.c
new file mode 100644
index 000000000..4f751f08d
--- /dev/null
+++ b/trunk/python/pyempathygtk/pyempathygtkmodule.c
@@ -0,0 +1,23 @@
+#include <pygobject.h>
+
+void empathy_register_classes (PyObject *d);
+DL_EXPORT(void) initempathygtk(void);
+extern PyMethodDef empathy_functions[];
+
+DL_EXPORT(void) initempathygtk(void)
+{
+ PyObject *m, *d;
+
+ init_pygobject ();
+
+ m = Py_InitModule ("empathygtk", empathy_functions);
+ d = PyModule_GetDict (m);
+
+ empathy_register_classes (d);
+
+ if (PyErr_Occurred ()) {
+ PyErr_Print();
+ Py_FatalError ("can't initialise module empathygtk");
+ }
+}
+
diff --git a/trunk/python/update-binding.sh b/trunk/python/update-binding.sh
new file mode 100755
index 000000000..d07c4d6e0
--- /dev/null
+++ b/trunk/python/update-binding.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+#Manually update headers in pyempathy.override and pyempathygtk.override.
+
+# Update the list of headers from Makefile.am
+cd ../libempathy
+python /usr/share/pygtk/2.0/codegen/h2def.py \
+ empathy-avatar.h \
+ empathy-time.h \
+ empathy-status-presets.h \
+ empathy-debug.h \
+ empathy-utils.h \
+ empathy-message.h \
+ empathy-chatroom-manager.h \
+ empathy-chatroom.h \
+ empathy-contact.h \
+ empathy-contact-groups.h \
+ empathy-contact-list.h \
+ empathy-contact-manager.h \
+ empathy-contact-factory.h \
+ empathy-tp-contact-factory.h \
+ empathy-tp-group.h \
+ empathy-tp-contact-list.h \
+ empathy-tp-chat.h \
+ empathy-tp-roomlist.h \
+ empathy-tp-call.h \
+ empathy-tp-tube.h \
+ empathy-idle.h \
+ empathy-log-manager.h \
+ empathy-irc-network-manager.h \
+ empathy-irc-network.h \
+ empathy-irc-server.h \
+ empathy-tube-handler.h \
+ empathy-dispatcher.h \
+ > ../python/pyempathy/pyempathy.defs
+
+# Update the list of headers from Makefile.am
+cd ../libempathy-gtk
+python /usr/share/pygtk/2.0/codegen/h2def.py \
+ empathy-images.h \
+ empathy-account-chooser.h \
+ empathy-chat.h \
+ empathy-irc-network-dialog.h \
+ empathy-spell-dialog.h \
+ empathy-accounts-dialog.h \
+ empathy-chat-view.h \
+ empathy-log-window.h \
+ empathy-theme-boxes.h \
+ empathy-account-widget.h \
+ empathy-conf.h \
+ empathy-theme.h \
+ empathy-account-widget-irc.h \
+ empathy-account-widget-sip.h \
+ empathy-contact-dialogs.h \
+ empathy-new-message-dialog.h \
+ empathy-theme-irc.h \
+ empathy-avatar-chooser.h \
+ empathy-contact-list-store.h \
+ empathy-presence-chooser.h \
+ empathy-theme-manager.h \
+ empathy-avatar-image.h \
+ empathy-contact-list-view.h \
+ empathy-ui-utils.h \
+ empathy-cell-renderer-activatable.h \
+ empathy-contact-widget.h \
+ empathy-profile-chooser.h \
+ empathy-cell-renderer-expander.h \
+ empathy-geometry.h \
+ empathy-smiley-manager.h \
+ empathy-cell-renderer-text.h \
+ empathy-spell.h \
+ empathy-contact-menu.h \
+ > ../python/pyempathygtk/pyempathygtk.defs
+
+# Keep original version
+cd ../python
+cp pyempathy/pyempathy.defs /tmp
+cp pyempathygtk/pyempathygtk.defs /tmp
+
+# Apply patches
+patch -p0 < pyempathy.patch
+patch -p0 < pyempathygtk.patch
+
+# Make modification then run that:
+#diff -up /tmp/pyempathy.defs pyempathy/pyempathy.defs > pyempathy.patch
+#diff -up /tmp/pyempathygtk.defs pyempathygtk/pyempathygtk.defs > pyempathygtk.patch
+
diff --git a/trunk/release.py b/trunk/release.py
new file mode 100755
index 000000000..ce0ef96a9
--- /dev/null
+++ b/trunk/release.py
@@ -0,0 +1,299 @@
+#!/usr/bin/env python
+
+import os
+import re
+import urllib
+import csv
+import datetime
+from string import Template
+from optparse import OptionParser
+
+username = 'xclaesse'
+upload_server = 'master.gnome.org'
+template = '''\
+$name $version is now available for download from:
+$download
+
+$md5sums
+
+What is it?
+===========
+$about
+
+You can visit the project web site:
+$website
+
+What's New?
+===========
+$news
+
+$footer'''
+
+class Bug:
+ number = ''
+ author = ''
+
+class Project:
+ def __init__(self):
+ f = open('config.h', 'r')
+ s = f.read()
+ f.close()
+
+ key = {}
+ key['package'] = '#define PACKAGE_NAME "'
+ key['version'] = '#define PACKAGE_VERSION "'
+ key['bugreport'] = '#define PACKAGE_BUGREPORT "'
+
+ for line in s.splitlines(1):
+ if line.startswith(key['package']):
+ p1 = len(key['package'])
+ p2 = line.rfind('"')
+ self.package_name = line[p1:p2]
+ elif line.startswith(key['version']):
+ p1 = len(key['version'])
+ p2 = line.rfind('"')
+ self.package_version = line[p1:p2]
+ elif line.startswith(key['bugreport']):
+ p2 = line.rfind('"')
+ p1 = line.rfind('=') + 1
+ self.package_module = line[p1:p2]
+
+ first = self.package_version.find('.')
+ second = self.package_version.find('.', first + 1)
+ if first == -1 or second == -1 or first == second:
+ version_dir = self.package_version
+ else:
+ version_dir = self.package_version[:second]
+ self.package_dl_url = 'http://download.gnome.org/sources/%s/%s/' % (self.package_name.lower(),
+ version_dir)
+ def exec_cmd(self,cmd):
+ return os.popen(cmd).read()
+
+ def get_news(self):
+ f = open ('NEWS', 'r')
+ s = f.read()
+ f.close()
+ start = s.find ('NEW in '+ self.package_version)
+ if start != -1:
+ start = s.find ('\n', start) + 1
+ start = s.find ('\n', start) + 1
+ end = s.find ('NEW in', start) - 1
+ return s[start:end].strip()
+
+ def get_md5sums(self):
+ md5sums = ''
+
+ cmd = 'md5sum %s-%s.tar.gz' % (self.package_name.lower(), self.package_version)
+ md5sums += self.exec_cmd(cmd)
+
+ cmd = 'md5sum %s-%s.tar.bz2' % (self.package_name.lower(), self.package_version)
+ md5sums += self.exec_cmd(cmd).strip()
+
+ return md5sums
+
+ def get_bugzilla_info(self):
+ query = 'http://bugzilla.gnome.org/browse.cgi?product=%s' % (self.package_module)
+ f = urllib.urlopen(query)
+ s = f.read()
+ f.close()
+
+ s1 = '<p><i>'
+ i = s.find(s1)
+ start = i + len(s1)
+ s2 = '</i></p>'
+ end = s.find(s2, i + 1)
+ description = s[start:end]
+
+ s1 = "GNOME SVN"
+ i = s.find(s1)
+ s1 = "href"
+ i = s.find(s1, i)
+ start = i + 6
+ s2 = '">'
+ end = s.find(s2, start)
+ project_url = s[start:end]
+
+ return (description, project_url)
+
+ def get_release_notes(self):
+ name = self.package_name
+ version = self.package_version
+ download = self.package_dl_url
+ md5sums = self.get_md5sums()
+ (about, website) = self.get_bugzilla_info()
+ news = self.get_news()
+ footer = '%s\n%s team' % (datetime.date.today().strftime('%d %B %Y'),\
+ self.package_name)
+
+ t = Template(template)
+ return t.substitute(locals())
+
+ def get_last_tag(self):
+ tags_str = self.exec_cmd('git-tag')
+ tags = tags_str.splitlines()
+
+ return tags[len(tags)-1]
+
+ def parse_commit(self, ref, author, date, message):
+ p1 = message.rfind('(')
+ p2 = message.rfind (')')
+ if len(message) - p2 <= 2:
+ author = message[p1+1:p2]
+ message = message[:p1]
+
+ msg = message.lower()
+ if msg.find('translation') != -1 and\
+ msg.find('updated') != -1:
+ self.translations += ' - ' + message + ' (' + author + ').\n'
+ elif message.find('#') != -1:
+ p1 = message.find('#')
+ while p1 != -1:
+ bug = Bug()
+ p2 = message.find(' ', p1)
+ bug.number = message[p1+1:p2]
+ bug.author = author
+ self.bug_commits.append(bug)
+ p1 = message.find('#', p2)
+ else:
+ self.commits += ' - ' + message + ' (' + author + ').\n'
+
+ def query_bug_commits(self):
+ bugs = ''
+ for bug in self.bug_commits:
+ bugs += bug.number + ','
+
+ # Bugzilla query to use
+ query = 'http://bugzilla.gnome.org/buglist.cgi?ctype=csv' \
+ '&bug_status=RESOLVED,CLOSED,VERIFIED' \
+ '&resolution=FIXED' \
+ '&bug_id=' + bugs.replace(',', '%2c')
+
+ f = urllib.urlopen(query)
+ s = f.read()
+ f.close()
+
+ col_bug_id = -1
+ col_description = -1
+
+ reader = csv.reader(s.splitlines(1))
+ header = reader.next()
+ i = 0
+
+ for col in header:
+ if col == 'bug_id':
+ col_bug_id = i
+ if col == 'short_short_desc':
+ col_description = i
+ i = i + 1
+
+ for row in reader:
+ bug_number = row[col_bug_id]
+ description = row[col_description]
+
+ for bug in self.bug_commits:
+ if bug.number == bug_number:
+ self.bugs += ' - Fixed #%s, %s (%s)\n' % (bug.number, description, bug.author)
+ break
+
+ def get_commits(self):
+ self.commits = ''
+ self.translations = ''
+ self.bugs = ''
+ self.bug_commits = []
+ last_tag = self.get_last_tag()
+ ref = None
+
+ changes = self.exec_cmd ("git-log " + last_tag + "..")
+ for line in changes.splitlines(1):
+ if line.startswith('commit'):
+ if ref != None:
+ self.parse_commit (ref, author, date, message)
+ p1 = line.find(' ')
+ ref = line[p1:].strip()
+ author = ''
+ date = ''
+ message = ''
+ elif line.startswith('Author:'):
+ p1 = line.find(' ')
+ p2 = line.find('<')
+ author = line[p1:p2].strip()
+ elif line.startswith('Date:'):
+ p1 = line.find(' ')
+ date = line[p1:].strip()
+ elif line.startswith(' git-svn-id:'):
+ continue
+ elif line.startswith('Merge:'):
+ continue
+ else:
+ msg = line.strip()
+ if msg == '':
+ continue
+ if message != '':
+ message += '\n'
+ message += msg
+
+ self.query_bug_commits ()
+
+ def make_tag(self):
+ new_tag = self.package_name.upper() + '_' +\
+ self.package_version.replace('.', '_')
+
+ url1 = self.exec_cmd('git-config svn-remote.svn.url').strip()
+ url2 = url1[:url1.rfind('/')] + '/tags/' + new_tag
+ self.exec_cmd('svn copy %s %s -m "Tagged for release %s."' % (url1, url2, self.package_version))
+
+ self.exec_cmd('git-tag -m "Tagged for release %s." %s' % ( self.package_version, new_tag))
+
+ def generate_news(self):
+ self.get_commits()
+ news = 'NEW in '+ self.package_version + '\n==============\n'
+ news += self.commits + '\nBugs fixed:\n' + self.bugs + '\nTranslations:\n' + self.translations + '\n'
+
+ return news
+
+ def write_news(self):
+ news = self.generate_news()
+
+ f = open ('/tmp/NEWS', 'w')
+ s = f.write(news)
+ f.close()
+
+ self.exec_cmd('cat NEWS >> /tmp/NEWS')
+ self.exec_cmd('mv /tmp/NEWS .')
+
+ def upload_tarball(self):
+ tarball = '%s-%s.tar.gz' % (self.package_name.lower(), self.package_version)
+
+ cmd = 'scp %s %s@%s:' % (tarball, username, upload_server)
+ self.exec_cmd(cmd)
+
+ cmd = 'ssh %s@%s install-module -u %s' % (username, upload_server, tarball)
+ self.exec_cmd(cmd)
+
+ def release(self):
+ self.make_tag()
+ self.upload_tarball()
+ print self.get_release_notes()
+
+if __name__ == '__main__':
+ p = Project()
+ parser = OptionParser()
+ parser.add_option("-n", "--print-news", action="store_true",\
+ dest="print_news", help="Generate and print news")
+ parser.add_option("-p", "--print-notes", action="store_true",\
+ dest="print_notes", help="Generate and print the release notes")
+ parser.add_option("-w", "--write-news", action="store_true",\
+ dest="write_news", help="Generate and write news into the NEWS file")
+ parser.add_option("-r", "--release", action="store_true",\
+ dest="release", help="Release the tarball")
+
+ (options, args) = parser.parse_args ()
+ if (options.print_news):
+ print p.generate_news ()
+ if (options.print_notes):
+ print p.get_release_notes ()
+ if (options.write_news):
+ p.write_news ()
+ if (options.release):
+ p.release ()
+
diff --git a/trunk/rules/check.mak b/trunk/rules/check.mak
new file mode 100644
index 000000000..bbb9819f2
--- /dev/null
+++ b/trunk/rules/check.mak
@@ -0,0 +1,120 @@
+LOOPS = 10
+CLEANFILES += valgrind.*.log
+
+# run any given test by running make test.check
+# if the test fails, run it again at at least debug level 2
+%.check: %
+ @$(TESTS_ENVIRONMENT) \
+ $* || \
+ $(TESTS_ENVIRONMENT) \
+ $*
+
+# run any given test in a loop
+%.torture: %
+ @for i in `seq 1 $(LOOPS)`; do \
+ $(TESTS_ENVIRONMENT) \
+ $*; done
+
+# run any given test in an infinite loop
+%.forever: %
+ @while true; do \
+ $(TESTS_ENVIRONMENT) \
+ $* || break; done
+
+# valgrind any given test by running make test.valgrind
+%.valgrind: %
+ $(TESTS_ENVIRONMENT) \
+ CK_DEFAULT_TIMEOUT=360 \
+ G_SLICE=always-malloc \
+ G_DEBUG=gc-friendly \
+ libtool --mode=execute \
+ $(VALGRIND_PATH) -q \
+ $(foreach s,$(SUPPRESSIONS),--suppressions=$(s)) \
+ --tool=memcheck --leak-check=full --trace-children=yes \
+ --leak-resolution=high --num-callers=20 \
+ ./$* 2>&1 | tee "valgrind.$*.log"
+ @if grep "==" "valgrind.$*.log" > /dev/null 2>&1; then \
+ exit 1; \
+ fi
+
+# valgrind any given test and generate suppressions for it
+%.valgrind.gen-suppressions: %
+ $(TESTS_ENVIRONMENT) \
+ CK_DEFAULT_TIMEOUT=360 \
+ G_SLICE=always-malloc \
+ G_DEBUG=gc-friendly \
+ libtool --mode=execute \
+ $(VALGRIND_PATH) -q \
+ $(foreach s,$(SUPPRESSIONS),--suppressions=$(s)) \
+ --tool=memcheck --leak-check=full --trace-children=yes \
+ --leak-resolution=high --num-callers=20 \
+ --gen-suppressions=all \
+ ./$* 2>&1 | tee suppressions.log
+
+# valgrind any given test until failure by running make test.valgrind-forever
+%.valgrind-forever: %
+ @while $(MAKE) $*.valgrind; do \
+ true; done
+
+# gdb any given test by running make test.gdb
+%.gdb: %
+ $(TESTS_ENVIRONMENT) \
+ CK_FORK=no \
+ libtool --mode=execute \
+ gdb $*
+
+# torture tests
+torture: $(TESTS)
+ @echo "Torturing tests ..."
+ for i in `seq 1 $(LOOPS)`; do \
+ $(MAKE) check || \
+ (echo "Failure after $$i runs"; exit 1) || \
+ exit 1; \
+ done
+ @banner="All $(LOOPS) loops passed"; \
+ dashes=`echo "$$banner" | sed s/./=/g`; \
+ echo $$dashes; echo $$banner; echo $$dashes
+
+# forever tests
+forever: $(TESTS)
+ @echo "Forever tests ..."
+ while true; do \
+ $(MAKE) check || \
+ (echo "Failure"; exit 1) || \
+ exit 1; \
+ done
+
+# valgrind all tests
+valgrind: $(TESTS)
+ @echo "Valgrinding tests ..."
+ @failed=0; \
+ for t in $(filter-out $(VALGRIND_TESTS_DISABLE),$(TESTS)); do \
+ $(MAKE) $$t.valgrind; \
+ if test "$$?" -ne 0; then \
+ echo "Valgrind error for test $$t"; \
+ failed=`expr $$failed + 1`; \
+ whicht="$$whicht $$t"; \
+ fi; \
+ done; \
+ if test "$$failed" -ne 0; then \
+ echo "$$failed tests had leaks or errors under valgrind:"; \
+ echo "$$whicht"; \
+ false; \
+ fi
+
+help:
+ @echo "make check -- run all checks"
+ @echo "make torture -- run all checks $(LOOPS) times"
+ @echo "make (dir)/(test).check -- run the given check once"
+ @echo "make (dir)/(test).forever -- run the given check forever"
+ @echo "make (dir)/(test).torture -- run the given check $(LOOPS) times"
+ @echo
+ @echo "make (dir)/(test).gdb -- start up gdb for the given test"
+ @echo
+ @echo "make valgrind -- valgrind all tests"
+ @echo "make (dir)/(test).valgrind -- valgrind the given test"
+ @echo "make (dir)/(test).valgrind-forever -- valgrind the given test forever"
+ @echo "make (dir)/(test).valgrind.gen-suppressions -- generate suppressions"
+ @echo " and save to suppressions.log"
+ @echo "make inspect -- inspect all plugin features"
+
diff --git a/trunk/src/.gitignore b/trunk/src/.gitignore
new file mode 100644
index 000000000..e972a26f8
--- /dev/null
+++ b/trunk/src/.gitignore
@@ -0,0 +1,9 @@
+empathy
+empathy-accounts
+empathy-logs
+empathy-chat-chandler
+empathy-call-chandler
+empathy-tubes-chandler
+org.gnome.Empathy.Chat.service
+org.gnome.Empathy.Call.service
+org.gnome.Empathy.Tubes.service
diff --git a/trunk/src/Makefile.am b/trunk/src/Makefile.am
new file mode 100644
index 000000000..dc87087ec
--- /dev/null
+++ b/trunk/src/Makefile.am
@@ -0,0 +1,58 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -DPREFIX="\"$(prefix)"\" \
+ -DSYSCONFDIR=\""$(sysconfdir)"\" \
+ -DDATADIR=\""$(datadir)"\" \
+ -DPKGDATADIR=\""$(pkgdatadir)"\" \
+ -DLIBDIR=\""$(libdir)"\" \
+ -DLOCALEDIR=\""$(datadir)/locale"\" \
+ $(EMPATHY_CFLAGS) \
+ $(WARN_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/libempathy-gtk/libempathy-gtk.la \
+ $(top_builddir)/libempathy/libempathy.la \
+ $(top_builddir)/extensions/libemp-extensions.la \
+ $(EMPATHY_LIBS)
+
+bin_PROGRAMS = \
+ empathy \
+ empathy-accounts \
+ empathy-logs
+
+empathy_SOURCES = \
+ empathy.c \
+ bacon-message-connection.c bacon-message-connection.h \
+ empathy-chat-window.c empathy-chat-window.h \
+ empathy-new-chatroom-dialog.c empathy-new-chatroom-dialog.h \
+ empathy-status-icon.c empathy-status-icon.h \
+ empathy-about-dialog.c empathy-about-dialog.h \
+ empathy-chatrooms-window.c empathy-chatrooms-window.h \
+ empathy-main-window.c empathy-main-window.h \
+ empathy-preferences.c empathy-preferences.h \
+ empathy-call-window.c empathy-call-window.h \
+ ephy-spinner.c ephy-spinner.h
+
+empathy_accounts_SOURCES = empathy-accounts.c
+empathy_logs_SOURCES = empathy-logs.c
+
+gladedir = $(datadir)/empathy
+glade_DATA = \
+ empathy-call-window.glade \
+ empathy-main-window.glade \
+ empathy-preferences.glade \
+ empathy-chatrooms-window.glade \
+ empathy-chat-window.glade \
+ empathy-new-chatroom-dialog.glade \
+ empathy-status-icon.glade
+
+dist_man_MANS = \
+ empathy.1 \
+ empathy-accounts.1
+
+EXTRA_DIST = \
+ $(autostart_DATA) \
+ $(glade_DATA)
+
+CLEANFILES = $(BUILT_SOURCES)
+
diff --git a/trunk/src/bacon-message-connection.c b/trunk/src/bacon-message-connection.c
new file mode 100644
index 000000000..c8000de24
--- /dev/null
+++ b/trunk/src/bacon-message-connection.c
@@ -0,0 +1,396 @@
+/*
+ * Copyright (C) 2003 Bastien Nocera <hadess@hadess.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <errno.h>
+
+#include "bacon-message-connection.h"
+
+#ifndef UNIX_PATH_MAX
+#define UNIX_PATH_MAX 108
+#endif
+
+struct BaconMessageConnection {
+ /* A server accepts connections */
+ gboolean is_server;
+
+ /* The socket path itself */
+ char *path;
+
+ /* File descriptor of the socket */
+ int fd;
+ /* Channel to watch */
+ GIOChannel *chan;
+ /* Event id returned by g_io_add_watch() */
+ int conn_id;
+
+ /* Connections accepted by this connection */
+ GSList *accepted_connections;
+
+ /* callback */
+ void (*func) (const char *message, gpointer user_data);
+ gpointer data;
+};
+
+static gboolean
+test_is_socket (const char *path)
+{
+ struct stat s;
+
+ if (stat (path, &s) == -1)
+ return FALSE;
+
+ if (S_ISSOCK (s.st_mode))
+ return TRUE;
+
+ return FALSE;
+}
+
+static gboolean
+is_owned_by_user_and_socket (const char *path)
+{
+ struct stat s;
+
+ if (stat (path, &s) == -1)
+ return FALSE;
+
+ if (s.st_uid != geteuid ())
+ return FALSE;
+
+ if ((s.st_mode & S_IFSOCK) != S_IFSOCK)
+ return FALSE;
+
+ return TRUE;
+}
+
+static gboolean server_cb (GIOChannel *source,
+ GIOCondition condition, gpointer data);
+
+static gboolean
+setup_connection (BaconMessageConnection *conn)
+{
+ g_return_val_if_fail (conn->chan == NULL, FALSE);
+
+ conn->chan = g_io_channel_unix_new (conn->fd);
+ if (!conn->chan) {
+ return FALSE;
+ }
+ g_io_channel_set_line_term (conn->chan, "\n", 1);
+ conn->conn_id = g_io_add_watch (conn->chan, G_IO_IN, server_cb, conn);
+
+ return TRUE;
+}
+
+static void
+accept_new_connection (BaconMessageConnection *server_conn)
+{
+ BaconMessageConnection *conn;
+ int alen;
+
+ g_return_if_fail (server_conn->is_server);
+
+ conn = g_new0 (BaconMessageConnection, 1);
+ conn->is_server = FALSE;
+ conn->func = server_conn->func;
+ conn->data = server_conn->data;
+
+ conn->fd = accept (server_conn->fd, NULL, (guint *)&alen);
+
+ server_conn->accepted_connections =
+ g_slist_prepend (server_conn->accepted_connections, conn);
+
+ setup_connection (conn);
+}
+
+static gboolean
+server_cb (GIOChannel *source, GIOCondition condition, gpointer data)
+{
+ BaconMessageConnection *conn = (BaconMessageConnection *)data;
+ char *message, *subs, buf;
+ int cd, rc, offset;
+ gboolean finished;
+
+ offset = 0;
+ if (conn->is_server && conn->fd == g_io_channel_unix_get_fd (source)) {
+ accept_new_connection (conn);
+ return TRUE;
+ }
+ message = g_malloc (1);
+ cd = conn->fd;
+ rc = read (cd, &buf, 1);
+ while (rc > 0 && buf != '\n')
+ {
+ message = g_realloc (message, rc + offset + 1);
+ message[offset] = buf;
+ offset = offset + rc;
+ rc = read (cd, &buf, 1);
+ }
+ if (rc <= 0) {
+ g_io_channel_shutdown (conn->chan, FALSE, NULL);
+ g_io_channel_unref (conn->chan);
+ conn->chan = NULL;
+ close (conn->fd);
+ conn->fd = -1;
+ g_free (message);
+ conn->conn_id = 0;
+
+ return FALSE;
+ }
+ message[offset] = '\0';
+
+ subs = message;
+ finished = FALSE;
+
+ while (finished == FALSE && *subs != '\0')
+ {
+ if (conn->func != NULL)
+ (*conn->func) (subs, conn->data);
+
+ subs += strlen (subs) + 1;
+ if (subs - message >= offset)
+ finished = TRUE;
+ }
+
+ g_free (message);
+
+ return TRUE;
+}
+
+static char *
+find_file_with_pattern (const char *dir, const char *pattern)
+{
+ GDir *filedir;
+ char *found_filename;
+ const char *filename;
+ GPatternSpec *pat;
+
+ filedir = g_dir_open (dir, 0, NULL);
+ if (filedir == NULL)
+ return NULL;
+
+ pat = g_pattern_spec_new (pattern);
+ if (pat == NULL)
+ {
+ g_dir_close (filedir);
+ return NULL;
+ }
+
+ found_filename = NULL;
+
+ while ((filename = g_dir_read_name (filedir)))
+ {
+ if (g_pattern_match_string (pat, filename))
+ {
+ char *tmp = g_build_filename (dir, filename, NULL);
+ if (is_owned_by_user_and_socket (tmp))
+ found_filename = g_strdup (filename);
+ g_free (tmp);
+ }
+
+ if (found_filename != NULL)
+ break;
+ }
+
+ g_pattern_spec_free (pat);
+ g_dir_close (filedir);
+
+ return found_filename;
+}
+
+static char *
+socket_filename (const char *prefix)
+{
+ char *pattern, *newfile, *path, *filename;
+ const char *tmpdir;
+
+ pattern = g_strdup_printf ("%s.%s.*", prefix, g_get_user_name ());
+ tmpdir = g_get_tmp_dir ();
+ filename = find_file_with_pattern (tmpdir, pattern);
+ if (filename == NULL)
+ {
+ newfile = g_strdup_printf ("%s.%s.%u", prefix,
+ g_get_user_name (), g_random_int ());
+ path = g_build_filename (tmpdir, newfile, NULL);
+ g_free (newfile);
+ } else {
+ path = g_build_filename (tmpdir, filename, NULL);
+ g_free (filename);
+ }
+
+ g_free (pattern);
+ return path;
+}
+
+static gboolean
+try_server (BaconMessageConnection *conn)
+{
+ struct sockaddr_un uaddr;
+
+ uaddr.sun_family = AF_UNIX;
+ strncpy (uaddr.sun_path, conn->path,
+ MIN (strlen(conn->path)+1, UNIX_PATH_MAX));
+ conn->fd = socket (PF_UNIX, SOCK_STREAM, 0);
+ if (bind (conn->fd, (struct sockaddr *) &uaddr, sizeof (uaddr)) == -1)
+ {
+ conn->fd = -1;
+ return FALSE;
+ }
+ listen (conn->fd, 5);
+
+ if (!setup_connection (conn))
+ return FALSE;
+ return TRUE;
+}
+
+static gboolean
+try_client (BaconMessageConnection *conn)
+{
+ struct sockaddr_un uaddr;
+
+ uaddr.sun_family = AF_UNIX;
+ strncpy (uaddr.sun_path, conn->path,
+ MIN(strlen(conn->path)+1, UNIX_PATH_MAX));
+ conn->fd = socket (PF_UNIX, SOCK_STREAM, 0);
+ if (connect (conn->fd, (struct sockaddr *) &uaddr,
+ sizeof (uaddr)) == -1)
+ {
+ conn->fd = -1;
+ return FALSE;
+ }
+
+ return setup_connection (conn);
+}
+
+BaconMessageConnection *
+bacon_message_connection_new (const char *prefix)
+{
+ BaconMessageConnection *conn;
+
+ g_return_val_if_fail (prefix != NULL, NULL);
+
+ conn = g_new0 (BaconMessageConnection, 1);
+ conn->path = socket_filename (prefix);
+
+ if (test_is_socket (conn->path) == FALSE)
+ {
+ if (!try_server (conn))
+ {
+ bacon_message_connection_free (conn);
+ return NULL;
+ }
+
+ conn->is_server = TRUE;
+ return conn;
+ }
+
+ if (try_client (conn) == FALSE)
+ {
+ unlink (conn->path);
+ try_server (conn);
+ if (conn->fd == -1)
+ {
+ bacon_message_connection_free (conn);
+ return NULL;
+ }
+
+ conn->is_server = TRUE;
+ return conn;
+ }
+
+ conn->is_server = FALSE;
+ return conn;
+}
+
+void
+bacon_message_connection_free (BaconMessageConnection *conn)
+{
+ GSList *child_conn;
+
+ g_return_if_fail (conn != NULL);
+ /* Only servers can accept other connections */
+ g_return_if_fail (conn->is_server != FALSE ||
+ conn->accepted_connections == NULL);
+
+ child_conn = conn->accepted_connections;
+ while (child_conn != NULL) {
+ bacon_message_connection_free (child_conn->data);
+ child_conn = g_slist_next (child_conn);
+ }
+ g_slist_free (conn->accepted_connections);
+
+ if (conn->conn_id) {
+ g_source_remove (conn->conn_id);
+ conn->conn_id = 0;
+ }
+ if (conn->chan) {
+ g_io_channel_shutdown (conn->chan, FALSE, NULL);
+ g_io_channel_unref (conn->chan);
+ }
+
+ if (conn->is_server != FALSE) {
+ unlink (conn->path);
+ }
+ if (conn->fd != -1) {
+ close (conn->fd);
+ }
+
+ g_free (conn->path);
+ g_free (conn);
+}
+
+void
+bacon_message_connection_set_callback (BaconMessageConnection *conn,
+ BaconMessageReceivedFunc func,
+ gpointer user_data)
+{
+ g_return_if_fail (conn != NULL);
+
+ conn->func = func;
+ conn->data = user_data;
+}
+
+void
+bacon_message_connection_send (BaconMessageConnection *conn,
+ const char *message)
+{
+ g_return_if_fail (conn != NULL);
+ g_return_if_fail (message != NULL);
+
+ g_io_channel_write_chars (conn->chan, message, strlen (message),
+ NULL, NULL);
+ g_io_channel_write_chars (conn->chan, "\n", 1, NULL, NULL);
+ g_io_channel_flush (conn->chan, NULL);
+}
+
+gboolean
+bacon_message_connection_get_is_server (BaconMessageConnection *conn)
+{
+ g_return_val_if_fail (conn != NULL, FALSE);
+
+ return conn->is_server;
+}
+
diff --git a/trunk/src/bacon-message-connection.h b/trunk/src/bacon-message-connection.h
new file mode 100644
index 000000000..aac7a2d11
--- /dev/null
+++ b/trunk/src/bacon-message-connection.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2003 Bastien Nocera <hadess@hadess.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#ifndef BACON_MESSAGE_CONNECTION_H
+#define BACON_MESSAGE_CONNECTION_H
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef void (*BaconMessageReceivedFunc) (const char *message,
+ gpointer user_data);
+
+typedef struct BaconMessageConnection BaconMessageConnection;
+
+BaconMessageConnection *bacon_message_connection_new (const char *prefix);
+void bacon_message_connection_free (BaconMessageConnection *conn);
+void bacon_message_connection_set_callback (BaconMessageConnection *conn,
+ BaconMessageReceivedFunc func,
+ gpointer user_data);
+void bacon_message_connection_send (BaconMessageConnection *conn,
+ const char *message);
+gboolean bacon_message_connection_get_is_server (BaconMessageConnection *conn);
+
+G_END_DECLS
+
+#endif /* BACON_MESSAGE_CONNECTION_H */
diff --git a/trunk/src/empathy-about-dialog.c b/trunk/src/empathy-about-dialog.c
new file mode 100644
index 000000000..d8d9dfa95
--- /dev/null
+++ b/trunk/src/empathy-about-dialog.c
@@ -0,0 +1,114 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <glib/gi18n.h>
+#include <gtk/gtkaboutdialog.h>
+#include <gtk/gtksizegroup.h>
+#include <glade/glade.h>
+
+#include <libempathy-gtk/empathy-ui-utils.h>
+
+#include "empathy-about-dialog.h"
+
+#define WEB_SITE "http://live.gnome.org/Empathy"
+
+static void about_dialog_activate_link_cb (GtkAboutDialog *about,
+ const gchar *link,
+ gpointer data);
+
+static const char *authors[] = {
+ "Mikael Hallendal",
+ "Richard Hult",
+ "Martyn Russell",
+ "Geert-Jan Van den Bogaerde",
+ "Kevin Dougherty",
+ "Eitan Isaacson",
+ "Xavier Claessens",
+ NULL
+};
+
+static const char *documenters[] = {
+ NULL
+};
+
+static const char *artists[] = {
+ "Andreas Nilsson <nisses.mail@home.se>",
+ "Vinicius Depizzol <vdepizzol@gmail.com>",
+ NULL
+};
+
+static const char *license[] = {
+ N_("Empathy is free software; you can redistribute it and/or modify "
+ "it under the terms of the GNU General Public License as published by "
+ "the Free Software Foundation; either version 2 of the License, or "
+ "(at your option) any later version."),
+ N_("Empathy is distributed in the hope that it will be useful, "
+ "but WITHOUT ANY WARRANTY; without even the implied warranty of "
+ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the "
+ "GNU General Public License for more details."),
+ N_("You should have received a copy of the GNU General Public License "
+ "along with Empathy; if not, write to the Free Software Foundation, Inc., "
+ "51 Franklin Street, Fifth Floor, Boston, MA 02110-130159 USA")
+};
+
+static void
+about_dialog_activate_link_cb (GtkAboutDialog *about,
+ const gchar *link,
+ gpointer data)
+{
+ empathy_url_show (link);
+}
+
+void
+empathy_about_dialog_new (GtkWindow *parent)
+{
+ gchar *license_trans;
+
+ gtk_about_dialog_set_url_hook (about_dialog_activate_link_cb, NULL, NULL);
+
+ license_trans = g_strconcat (_(license[0]), "\n\n",
+ _(license[1]), "\n\n",
+ _(license[2]), "\n\n",
+ NULL);
+
+ gtk_show_about_dialog (parent,
+ "artists", artists,
+ "authors", authors,
+ "comments", _("An Instant Messaging client for GNOME"),
+ "license", license_trans,
+ "wrap-license", TRUE,
+ "copyright", "Imendio AB 2002-2007\nCollabora Ltd 2007",
+ "documenters", documenters,
+ "logo-icon-name", "empathy",
+ "translator-credits", _("translator-credits"),
+ "version", PACKAGE_VERSION,
+ "website", WEB_SITE,
+ NULL);
+
+ g_free (license_trans);
+}
+
+
diff --git a/trunk/src/empathy-about-dialog.h b/trunk/src/empathy-about-dialog.h
new file mode 100644
index 000000000..e7eac5ff9
--- /dev/null
+++ b/trunk/src/empathy-about-dialog.h
@@ -0,0 +1,36 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_ABOUT_DIALOG_H__
+#define __EMPATHY_ABOUT_DIALOG_H__
+
+#include <gtk/gtkwindow.h>
+
+G_BEGIN_DECLS
+
+void empathy_about_dialog_new (GtkWindow *parent);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_ABOUT_DIALOG_H__ */
diff --git a/trunk/src/empathy-accounts.1 b/trunk/src/empathy-accounts.1
new file mode 100644
index 000000000..b615e875e
--- /dev/null
+++ b/trunk/src/empathy-accounts.1
@@ -0,0 +1,12 @@
+.TH EMPATHY-ACCOUNTS "1" "October 2007" "Telepathy project" "User Commands"
+.SH NAME
+empathy\-accounts \- configure Telepathy instant messaging accounts
+.SH SYNOPSIS
+empathy\-accounts
+.SH DESCRIPTION
+empathy-accounts displays a graphical (Gtk+) dialog where the instant messaging
+accounts used by Empathy (via Telepathy Mission Control) can be configured.
+.SH OPTIONS
+There are no command-line options.
+.SH SEE ALSO
+\fIhttp://telepathy.freedesktop.org/\fR, \fIhttp://live.gnome.org/Empathy\fR
diff --git a/trunk/src/empathy-accounts.c b/trunk/src/empathy-accounts.c
new file mode 100644
index 000000000..65ede78ac
--- /dev/null
+++ b/trunk/src/empathy-accounts.c
@@ -0,0 +1,66 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include <libempathy/empathy-debug.h>
+#include <libempathy-gtk/empathy-accounts-dialog.h>
+
+static void
+destroy_cb (GtkWidget *dialog,
+ gpointer user_data)
+{
+ gtk_main_quit ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ GtkWidget *dialog;
+
+ gtk_init (&argc, &argv);
+
+ if (g_getenv ("EMPATHY_TIMING") != NULL) {
+ g_log_set_default_handler (tp_debug_timestamped_log_handler, NULL);
+ }
+ empathy_debug_set_flags (g_getenv ("EMPATHY_DEBUG"));
+ tp_debug_divert_messages (g_getenv ("EMPATHY_LOGFILE"));
+
+ gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
+ PKGDATADIR G_DIR_SEPARATOR_S "icons");
+ dialog = empathy_accounts_dialog_show (NULL);
+
+ g_signal_connect (dialog, "destroy",
+ G_CALLBACK (destroy_cb),
+ NULL);
+
+ gtk_main ();
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/trunk/src/empathy-call-window.c b/trunk/src/empathy-call-window.c
new file mode 100644
index 000000000..2d52fcf7c
--- /dev/null
+++ b/trunk/src/empathy-call-window.c
@@ -0,0 +1,564 @@
+/* -*- 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>
+ */
+
+#include <string.h>
+
+#include <glade/glade.h>
+#include <glib/gi18n.h>
+
+#include <telepathy-glib/enums.h>
+
+#include <libempathy/empathy-contact.h>
+#include <libempathy/empathy-tp-call.h>
+#include <libempathy/empathy-utils.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
+
+#include "empathy-call-window.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+typedef struct
+{
+ EmpathyTpCall *call;
+ GTimeVal start_time;
+ guint timeout_event_id;
+ gboolean is_drawing;
+ guint status;
+
+ GtkWidget *window;
+ GtkWidget *main_hbox;
+ GtkWidget *controls_vbox;
+ GtkWidget *volume_hbox;
+ GtkWidget *status_label;
+ GtkWidget *input_volume_button;
+ GtkWidget *output_volume_button;
+ GtkWidget *preview_video_socket;
+ GtkWidget *output_video_socket;
+ GtkWidget *video_button;
+ GtkWidget *hang_up_button;
+ GtkWidget *confirmation_dialog;
+ GtkWidget *keypad_expander;
+} EmpathyCallWindow;
+
+static gboolean
+call_window_update_timer (gpointer data)
+{
+ EmpathyCallWindow *window = data;
+ GTimeVal current;
+ gchar *str;
+ glong now, then;
+ glong time, seconds, minutes, hours;
+
+ g_get_current_time (&current);
+
+ now = current.tv_sec;
+ then = (window->start_time).tv_sec;
+
+ time = now - then;
+
+ seconds = time % 60;
+ time /= 60;
+ minutes = time % 60;
+ time /= 60;
+ hours = time % 60;
+
+ if (hours > 0)
+ str = g_strdup_printf ("Connected - %02ld : %02ld : %02ld", hours,
+ minutes, seconds);
+ else
+ str = g_strdup_printf ("Connected - %02ld : %02ld", minutes, seconds);
+
+ gtk_label_set_text (GTK_LABEL (window->status_label), str);
+
+ g_free (str);
+
+ return TRUE;
+}
+
+static void
+call_window_stop_timeout (EmpathyCallWindow *window)
+{
+ DEBUG ("Timer stopped");
+
+ if (window->timeout_event_id)
+ {
+ g_source_remove (window->timeout_event_id);
+ window->timeout_event_id = 0;
+ }
+}
+
+static void
+call_window_set_output_video_is_drawing (EmpathyCallWindow *window,
+ gboolean is_drawing)
+{
+ DEBUG ("Setting output video is drawing - %d", is_drawing);
+
+ if (is_drawing && !window->is_drawing)
+ {
+ gtk_window_set_resizable (GTK_WINDOW (window->window), TRUE);
+ gtk_box_pack_end (GTK_BOX (window->main_hbox),
+ window->output_video_socket, TRUE, TRUE, 0);
+ empathy_tp_call_add_output_video (window->call,
+ gtk_socket_get_id (GTK_SOCKET (window->output_video_socket)));
+ }
+ if (!is_drawing && window->is_drawing)
+ {
+ gtk_window_set_resizable (GTK_WINDOW (window->window), FALSE);
+ empathy_tp_call_add_output_video (window->call, 0);
+ gtk_container_remove (GTK_CONTAINER (window->main_hbox),
+ window->output_video_socket);
+ }
+
+ window->is_drawing = is_drawing;
+}
+
+static void
+call_window_finalize (EmpathyCallWindow *window)
+{
+ gtk_label_set_text (GTK_LABEL (window->status_label), _("Closed"));
+ gtk_widget_set_sensitive (window->hang_up_button, FALSE);
+ gtk_widget_set_sensitive (window->video_button, FALSE);
+ gtk_widget_set_sensitive (window->output_volume_button, FALSE);
+ gtk_widget_set_sensitive (window->input_volume_button, FALSE);
+ gtk_widget_set_sensitive (window->keypad_expander, FALSE);
+
+ if (window->call)
+ {
+ call_window_stop_timeout (window);
+ call_window_set_output_video_is_drawing (window, FALSE);
+ empathy_tp_call_remove_preview_video (window->call,
+ gtk_socket_get_id (GTK_SOCKET (window->preview_video_socket)));
+ g_object_unref (window->call);
+ window->call = NULL;
+ }
+
+ if (window->confirmation_dialog)
+ gtk_widget_destroy (window->confirmation_dialog);
+}
+
+static void
+call_window_socket_realized_cb (GtkWidget *widget,
+ EmpathyCallWindow *window)
+{
+ if (widget == window->preview_video_socket)
+ {
+ DEBUG ("Preview socket realized");
+ empathy_tp_call_add_preview_video (window->call,
+ gtk_socket_get_id (GTK_SOCKET (window->preview_video_socket)));
+ }
+ else
+ DEBUG ("Output socket realized");
+}
+
+static void
+call_window_video_button_toggled_cb (GtkWidget *button,
+ EmpathyCallWindow *window)
+{
+ gboolean is_sending;
+ guint status;
+
+ is_sending = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button));
+
+ DEBUG ("Send video toggled - %d", is_sending);
+
+ g_object_get (window->call, "status", &status, NULL);
+ if (status == EMPATHY_TP_CALL_STATUS_ACCEPTED)
+ empathy_tp_call_request_video_stream_direction (window->call, is_sending);
+}
+
+static void
+call_window_hang_up_button_clicked_cb (GtkWidget *widget,
+ EmpathyCallWindow *window)
+{
+ DEBUG ("Call clicked, end call");
+ call_window_finalize (window);
+}
+
+static void
+call_window_output_volume_changed_cb (GtkScaleButton *button,
+ gdouble value,
+ EmpathyCallWindow *window)
+{
+ if (!window->call)
+ return;
+
+ if (value <= 0)
+ empathy_tp_call_mute_output (window->call, TRUE);
+ else
+ {
+ empathy_tp_call_mute_output (window->call, FALSE);
+ empathy_tp_call_set_output_volume (window->call, value * 100);
+ }
+}
+
+static void
+call_window_input_volume_changed_cb (GtkScaleButton *button,
+ gdouble value,
+ EmpathyCallWindow *window)
+{
+ if (!window->call)
+ return;
+
+ if (value <= 0)
+ empathy_tp_call_mute_input (window->call, TRUE);
+ else
+ {
+ empathy_tp_call_mute_input (window->call, FALSE);
+ /* FIXME: Not implemented?
+ empathy_tp_call_set_input_volume (window->call, value * 100);*/
+ }
+}
+
+static gboolean
+call_window_delete_event_cb (GtkWidget *widget,
+ GdkEvent *event,
+ EmpathyCallWindow *window)
+{
+ GtkWidget *dialog;
+ gint result;
+ guint status = EMPATHY_TP_CALL_STATUS_CLOSED;
+
+ DEBUG ("Delete event occurred");
+
+ if (window->call)
+ g_object_get (window->call, "status", &status, NULL);
+
+ if (status == EMPATHY_TP_CALL_STATUS_ACCEPTED)
+ {
+ dialog = gtk_message_dialog_new (GTK_WINDOW (window->window),
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_WARNING, GTK_BUTTONS_CANCEL, _("End this call?"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
+ _("Closing this window will end the call in progress."));
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("_End Call"), GTK_RESPONSE_OK);
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+
+ result = gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+
+ if (result != GTK_RESPONSE_OK)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+call_window_destroy_cb (GtkWidget *widget,
+ EmpathyCallWindow *window)
+{
+ call_window_finalize (window);
+ g_object_unref (window->output_video_socket);
+ g_object_unref (window->preview_video_socket);
+ g_slice_free (EmpathyCallWindow, window);
+}
+
+static void
+call_window_confirmation_dialog_response_cb (GtkDialog *dialog,
+ gint response,
+ EmpathyCallWindow *window)
+{
+ if (response == GTK_RESPONSE_OK && window->call)
+ empathy_tp_call_accept_incoming_call (window->call);
+ else
+ call_window_finalize (window);
+
+ gtk_widget_destroy (window->confirmation_dialog);
+ window->confirmation_dialog = NULL;
+}
+
+static void
+call_window_show_confirmation_dialog (EmpathyCallWindow *window)
+{
+ EmpathyContact *contact;
+ GtkWidget *button;
+ GtkWidget *image;
+
+ if (window->confirmation_dialog)
+ return;
+
+ g_object_get (window->call, "contact", &contact, NULL);
+
+ window->confirmation_dialog = gtk_message_dialog_new (GTK_WINDOW (window->window),
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, _("Incoming call"));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (window->confirmation_dialog),
+ _("%s is calling you, do you want to answer?"),
+ empathy_contact_get_name (contact));
+ gtk_dialog_set_default_response (GTK_DIALOG (window->confirmation_dialog),
+ GTK_RESPONSE_OK);
+
+ button = gtk_dialog_add_button (GTK_DIALOG (window->confirmation_dialog),
+ _("_Reject"), GTK_RESPONSE_CANCEL);
+ image = gtk_image_new_from_icon_name (GTK_STOCK_CANCEL, GTK_ICON_SIZE_BUTTON);
+ gtk_button_set_image (GTK_BUTTON (button), image);
+
+ button = gtk_dialog_add_button (GTK_DIALOG (window->confirmation_dialog),
+ _("_Answer"), GTK_RESPONSE_OK);
+ image = gtk_image_new_from_icon_name (GTK_STOCK_APPLY, GTK_ICON_SIZE_BUTTON);
+ gtk_button_set_image (GTK_BUTTON (button), image);
+
+ g_signal_connect (window->confirmation_dialog, "response",
+ G_CALLBACK (call_window_confirmation_dialog_response_cb),
+ window);
+
+ gtk_widget_show (window->confirmation_dialog);
+ g_object_unref (contact);
+}
+
+static void
+call_window_update (EmpathyCallWindow *window)
+{
+ EmpathyContact *contact;
+ guint stream_state;
+ EmpathyTpCallStream *audio_stream;
+ EmpathyTpCallStream *video_stream;
+ gboolean is_incoming;
+ gchar *title;
+
+ g_object_get (window->call,
+ "status", &window->status,
+ "audio-stream", &audio_stream,
+ "video-stream", &video_stream,
+ "contact", &contact,
+ "is-incoming", &is_incoming,
+ NULL);
+
+ if (video_stream->state > audio_stream->state)
+ stream_state = video_stream->state;
+ else
+ stream_state = audio_stream->state;
+
+ DEBUG ("Status changed - status: %d, stream state: %d, "
+ "is-incoming: %d video-stream direction: %d",
+ window->status, stream_state, is_incoming, video_stream->direction);
+
+ /* Depending on the status we have to set:
+ * - window's title
+ * - status's label
+ * - sensibility of all buttons
+ * */
+ if (window->status == EMPATHY_TP_CALL_STATUS_READYING)
+ {
+ gtk_window_set_title (GTK_WINDOW (window->window), _("Empathy Call"));
+ gtk_label_set_text (GTK_LABEL (window->status_label), _("Readying"));
+ gtk_widget_set_sensitive (window->video_button, FALSE);
+ gtk_widget_set_sensitive (window->output_volume_button, FALSE);
+ gtk_widget_set_sensitive (window->input_volume_button, FALSE);
+ gtk_widget_set_sensitive (window->hang_up_button, FALSE);
+ gtk_widget_set_sensitive (window->keypad_expander, FALSE);
+ }
+ else if (window->status == EMPATHY_TP_CALL_STATUS_PENDING)
+ {
+ title = g_strdup_printf (_("%s - Empathy Call"),
+ empathy_contact_get_name (contact));
+
+ gtk_window_set_title (GTK_WINDOW (window->window), title);
+ gtk_label_set_text (GTK_LABEL (window->status_label), _("Ringing"));
+ gtk_widget_set_sensitive (window->hang_up_button, TRUE);
+ if (is_incoming)
+ call_window_show_confirmation_dialog (window);
+ }
+ else if (window->status == EMPATHY_TP_CALL_STATUS_ACCEPTED)
+ {
+ gboolean receiving_video;
+ gboolean sending_video;
+
+ if (stream_state == TP_MEDIA_STREAM_STATE_DISCONNECTED)
+ gtk_label_set_text (GTK_LABEL (window->status_label), _("Disconnected"));
+ if (stream_state == TP_MEDIA_STREAM_STATE_CONNECTING)
+ gtk_label_set_text (GTK_LABEL (window->status_label), _("Connecting"));
+ else if (stream_state == TP_MEDIA_STREAM_STATE_CONNECTED &&
+ window->timeout_event_id == 0)
+ {
+ /* The call started, launch the timer */
+ g_get_current_time (&(window->start_time));
+ window->timeout_event_id = g_timeout_add_seconds (1,
+ call_window_update_timer, window);
+ call_window_update_timer (window);
+ }
+
+ receiving_video = video_stream->direction & TP_MEDIA_STREAM_DIRECTION_RECEIVE;
+ sending_video = video_stream->direction & TP_MEDIA_STREAM_DIRECTION_SEND;
+ call_window_set_output_video_is_drawing (window, receiving_video);
+ g_signal_handlers_block_by_func (window->video_button,
+ call_window_video_button_toggled_cb, window);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (window->video_button),
+ sending_video);
+ g_signal_handlers_unblock_by_func (window->video_button,
+ call_window_video_button_toggled_cb, window);
+
+ gtk_widget_set_sensitive (window->video_button, TRUE);
+ gtk_widget_set_sensitive (window->output_volume_button, TRUE);
+ gtk_widget_set_sensitive (window->input_volume_button, TRUE);
+ gtk_widget_set_sensitive (window->hang_up_button, TRUE);
+ gtk_widget_set_sensitive (window->keypad_expander, TRUE);
+ }
+ else if (window->status == EMPATHY_TP_CALL_STATUS_CLOSED)
+ call_window_finalize (window);
+
+ if (contact)
+ g_object_unref (contact);
+}
+
+static gboolean
+call_window_dtmf_button_release_event_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ EmpathyCallWindow *window)
+{
+ empathy_tp_call_stop_tone (window->call);
+ return FALSE;
+}
+
+static gboolean
+call_window_dtmf_button_press_event_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ EmpathyCallWindow *window)
+{
+ TpDTMFEvent dtmf_event;
+
+ dtmf_event = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (widget), "code"));
+ empathy_tp_call_start_tone (window->call, dtmf_event);
+ return FALSE;
+}
+
+static void
+call_window_dtmf_connect (GladeXML *glade,
+ EmpathyCallWindow *window,
+ const gchar *name,
+ TpDTMFEvent event)
+{
+ GtkWidget *widget;
+
+ widget = glade_xml_get_widget (glade, name);
+ g_object_set_data (G_OBJECT (widget), "code", GUINT_TO_POINTER (event));
+ g_signal_connect (widget, "button-press-event",
+ G_CALLBACK (call_window_dtmf_button_press_event_cb), window);
+ g_signal_connect (widget, "button-release-event",
+ G_CALLBACK (call_window_dtmf_button_release_event_cb), window);
+ /* FIXME: Connect "key-[press/release]-event" to*/
+}
+
+GtkWidget *
+empathy_call_window_new (EmpathyTpCall *call)
+{
+ EmpathyCallWindow *window;
+ GladeXML *glade;
+ gchar *filename;
+ const gchar *icons[] = {"audio-input-microphone", NULL};
+
+ g_return_val_if_fail (EMPATHY_IS_TP_CALL (call), NULL);
+
+ window = g_slice_new0 (EmpathyCallWindow);
+ window->call = g_object_ref (call);
+
+ filename = empathy_file_lookup ("empathy-call-window.glade", "src");
+ glade = empathy_glade_get_file (filename,
+ "window",
+ NULL,
+ "window", &window->window,
+ "main_hbox", &window->main_hbox,
+ "controls_vbox", &window->controls_vbox,
+ "volume_hbox", &window->volume_hbox,
+ "status_label", &window->status_label,
+ "video_button", &window->video_button,
+ "hang_up_button", &window->hang_up_button,
+ "keypad_expander", &window->keypad_expander,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ window,
+ "window", "destroy", call_window_destroy_cb,
+ "window", "delete_event", call_window_delete_event_cb,
+ "hang_up_button", "clicked", call_window_hang_up_button_clicked_cb,
+ "video_button", "toggled", call_window_video_button_toggled_cb,
+ NULL);
+
+ /* Setup DTMF buttons */
+ call_window_dtmf_connect (glade, window, "button_0", TP_DTMF_EVENT_DIGIT_0);
+ call_window_dtmf_connect (glade, window, "button_1", TP_DTMF_EVENT_DIGIT_1);
+ call_window_dtmf_connect (glade, window, "button_2", TP_DTMF_EVENT_DIGIT_2);
+ call_window_dtmf_connect (glade, window, "button_3", TP_DTMF_EVENT_DIGIT_3);
+ call_window_dtmf_connect (glade, window, "button_4", TP_DTMF_EVENT_DIGIT_4);
+ call_window_dtmf_connect (glade, window, "button_5", TP_DTMF_EVENT_DIGIT_5);
+ call_window_dtmf_connect (glade, window, "button_6", TP_DTMF_EVENT_DIGIT_6);
+ call_window_dtmf_connect (glade, window, "button_7", TP_DTMF_EVENT_DIGIT_7);
+ call_window_dtmf_connect (glade, window, "button_8", TP_DTMF_EVENT_DIGIT_8);
+ call_window_dtmf_connect (glade, window, "button_9", TP_DTMF_EVENT_DIGIT_9);
+ call_window_dtmf_connect (glade, window, "button_asterisk", TP_DTMF_EVENT_ASTERISK);
+ call_window_dtmf_connect (glade, window, "button_hash", TP_DTMF_EVENT_HASH);
+
+ g_object_unref (glade);
+
+ /* Output volume button */
+ window->output_volume_button = gtk_volume_button_new ();
+ gtk_scale_button_set_value (GTK_SCALE_BUTTON (window->output_volume_button), 1);
+ gtk_box_pack_start (GTK_BOX (window->volume_hbox),
+ window->output_volume_button, FALSE, FALSE, 0);
+ gtk_widget_show (window->output_volume_button);
+ g_signal_connect (window->output_volume_button, "value-changed",
+ G_CALLBACK (call_window_output_volume_changed_cb), window);
+
+ /* Input volume button */
+ window->input_volume_button = gtk_volume_button_new ();
+ gtk_scale_button_set_icons (GTK_SCALE_BUTTON (window->input_volume_button),
+ icons);
+ gtk_scale_button_set_value (GTK_SCALE_BUTTON (window->input_volume_button), 1);
+ gtk_box_pack_start (GTK_BOX (window->volume_hbox),
+ window->input_volume_button, FALSE, FALSE, 0);
+ gtk_widget_show (window->input_volume_button);
+ g_signal_connect (window->input_volume_button, "value-changed",
+ G_CALLBACK (call_window_input_volume_changed_cb), window);
+
+ /* Output video socket */
+ window->output_video_socket = g_object_ref (gtk_socket_new ());
+ gtk_widget_set_size_request (window->output_video_socket, 400, 300);
+ g_signal_connect (GTK_OBJECT (window->output_video_socket), "realize",
+ G_CALLBACK (call_window_socket_realized_cb), window);
+ gtk_widget_show (window->output_video_socket);
+
+ /* Preview video socket */
+ window->preview_video_socket = g_object_ref (gtk_socket_new ());
+ gtk_widget_set_size_request (window->preview_video_socket, 176, 144);
+ g_signal_connect (GTK_OBJECT (window->preview_video_socket), "realize",
+ G_CALLBACK (call_window_socket_realized_cb), window);
+ gtk_widget_show (window->preview_video_socket);
+
+ /* FIXME: We shouldn't do this if there is no video input */
+ gtk_box_pack_start (GTK_BOX (window->controls_vbox),
+ window->preview_video_socket, FALSE, FALSE, 0);
+ gtk_box_reorder_child (GTK_BOX (window->controls_vbox),
+ window->preview_video_socket, 0);
+
+ g_signal_connect_swapped (G_OBJECT (window->call), "notify",
+ G_CALLBACK (call_window_update),
+ window);
+
+ call_window_update (window);
+ gtk_widget_show (window->window);
+
+ return window->window;
+}
+
diff --git a/trunk/src/empathy-call-window.glade b/trunk/src/empathy-call-window.glade
new file mode 100644
index 000000000..684aed3ce
--- /dev/null
+++ b/trunk/src/empathy-call-window.glade
@@ -0,0 +1,334 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--Generated with glade3 3.4.2 on Thu May 1 23:37:49 2008 -->
+<glade-interface>
+ <widget class="GtkWindow" id="window">
+ <child>
+ <widget class="GtkHBox" id="main_hbox">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="border_width">5</property>
+ <property name="spacing">5</property>
+ <child>
+ <widget class="GtkVBox" id="controls_vbox">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkCheckButton" id="video_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <property name="label" translatable="yes">Send Video</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkHBox" id="volume_hbox">
+ <property name="visible">True</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Volume&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkExpander" id="keypad_expander">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <child>
+ <widget class="GtkTable" id="keypad_table">
+ <property name="visible">True</property>
+ <property name="n_rows">4</property>
+ <property name="n_columns">3</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <widget class="GtkButton" id="button_1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">1</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_2">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">2</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">3</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_4">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">4</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_5">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">5</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_6">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">6</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_7">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">7</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_8">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">8</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_9">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">9</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_asterisk">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">*</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_0">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">0</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_hash">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">#</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Keypad&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="status_label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="hang_up_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="response_id">1</property>
+ <child>
+ <widget class="GtkHBox" id="hbox1">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkImage" id="image1">
+ <property name="visible">True</property>
+ <property name="stock">gtk-cancel</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label2">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Hang Up</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/src/empathy-call-window.h b/trunk/src/empathy-call-window.h
new file mode 100644
index 000000000..eef1c9a99
--- /dev/null
+++ b/trunk/src/empathy-call-window.h
@@ -0,0 +1,37 @@
+/* -*- 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_CALL_WINDOW_H__
+#define __EMPATHY_CALL_WINDOW_H__
+
+#include <gtk/gtk.h>
+
+#include <libempathy/empathy-tp-call.h>
+
+G_BEGIN_DECLS
+
+GtkWidget *empathy_call_window_new (EmpathyTpCall *call);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CALL_WINDOW_H__ */
diff --git a/trunk/src/empathy-chat-window.c b/trunk/src/empathy-chat-window.c
new file mode 100644
index 000000000..a43e524cd
--- /dev/null
+++ b/trunk/src/empathy-chat-window.c
@@ -0,0 +1,1508 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Geert-Jan Van den Bogaerde <geertjan@gnome.org>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+#include <glade/glade.h>
+#include <glib/gi18n.h>
+
+#include <telepathy-glib/util.h>
+#include <libmissioncontrol/mission-control.h>
+
+#include <libempathy/empathy-contact-factory.h>
+#include <libempathy/empathy-contact.h>
+#include <libempathy/empathy-message.h>
+#include <libempathy/empathy-utils.h>
+
+#include <libempathy-gtk/empathy-images.h>
+#include <libempathy-gtk/empathy-conf.h>
+#include <libempathy-gtk/empathy-contact-dialogs.h>
+#include <libempathy-gtk/empathy-log-window.h>
+#include <libempathy-gtk/empathy-geometry.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
+
+#include "empathy-chat-window.h"
+#include "empathy-about-dialog.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_CHAT
+#include <libempathy/empathy-debug.h>
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyChatWindow)
+typedef struct {
+ EmpathyChat *current_chat;
+ GList *chats;
+ GList *chats_new_msg;
+ GList *chats_composing;
+ gboolean page_added;
+ gboolean dnd_same_window;
+ guint save_geometry_id;
+ GtkWidget *dialog;
+ GtkWidget *notebook;
+
+ /* Menu items. */
+ GtkWidget *menu_conv_clear;
+ GtkWidget *menu_conv_insert_smiley;
+ GtkWidget *menu_conv_contact;
+ GtkWidget *menu_conv_close;
+
+ GtkWidget *menu_edit_cut;
+ GtkWidget *menu_edit_copy;
+ GtkWidget *menu_edit_paste;
+
+ GtkWidget *menu_tabs_next;
+ GtkWidget *menu_tabs_prev;
+ GtkWidget *menu_tabs_left;
+ GtkWidget *menu_tabs_right;
+ GtkWidget *menu_tabs_detach;
+
+ GtkWidget *menu_help_contents;
+ GtkWidget *menu_help_about;
+} EmpathyChatWindowPriv;
+
+static GList *chat_windows = NULL;
+
+static const guint tab_accel_keys[] = {
+ GDK_1, GDK_2, GDK_3, GDK_4, GDK_5,
+ GDK_6, GDK_7, GDK_8, GDK_9, GDK_0
+};
+
+typedef enum {
+ DND_DRAG_TYPE_CONTACT_ID,
+ DND_DRAG_TYPE_TAB
+} DndDragType;
+
+static const GtkTargetEntry drag_types_dest[] = {
+ { "text/contact-id", 0, DND_DRAG_TYPE_CONTACT_ID },
+ { "GTK_NOTEBOOK_TAB", GTK_TARGET_SAME_APP, DND_DRAG_TYPE_TAB },
+};
+
+G_DEFINE_TYPE (EmpathyChatWindow, empathy_chat_window, G_TYPE_OBJECT);
+
+static void
+chat_window_accel_cb (GtkAccelGroup *accelgroup,
+ GObject *object,
+ guint key,
+ GdkModifierType mod,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ gint num = -1;
+ gint i;
+
+ priv = GET_PRIV (window);
+
+ for (i = 0; i < G_N_ELEMENTS (tab_accel_keys); i++) {
+ if (tab_accel_keys[i] == key) {
+ num = i;
+ break;
+ }
+ }
+
+ if (num != -1) {
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), num);
+ }
+}
+
+static EmpathyChatWindow *
+chat_window_find_chat (EmpathyChat *chat)
+{
+ EmpathyChatWindowPriv *priv;
+ GList *l, *ll;
+
+ for (l = chat_windows; l; l = l->next) {
+ priv = GET_PRIV (l->data);
+ ll = g_list_find (priv->chats, chat);
+ if (ll) {
+ return l->data;
+ }
+ }
+
+ return NULL;
+}
+
+static void
+chat_window_close_clicked_cb (GtkWidget *button,
+ EmpathyChat *chat)
+{
+ EmpathyChatWindow *window;
+
+ window = chat_window_find_chat (chat);
+ empathy_chat_window_remove_chat (window, chat);
+}
+
+static void
+chat_window_close_button_style_set_cb (GtkWidget *button,
+ GtkStyle *previous_style,
+ gpointer user_data)
+{
+ gint h, w;
+
+ gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (button),
+ GTK_ICON_SIZE_MENU, &w, &h);
+
+ gtk_widget_set_size_request (button, w, h);
+}
+
+static GtkWidget *
+chat_window_create_label (EmpathyChatWindow *window,
+ EmpathyChat *chat)
+{
+ EmpathyChatWindowPriv *priv;
+ GtkWidget *hbox;
+ GtkWidget *name_label;
+ GtkWidget *status_image;
+ GtkWidget *close_button;
+ GtkWidget *close_image;
+ GtkWidget *event_box;
+ GtkWidget *event_box_hbox;
+ PangoAttrList *attr_list;
+ PangoAttribute *attr;
+
+ priv = GET_PRIV (window);
+
+ /* The spacing between the button and the label. */
+ hbox = gtk_hbox_new (FALSE, 0);
+
+ event_box = gtk_event_box_new ();
+ gtk_event_box_set_visible_window (GTK_EVENT_BOX (event_box), FALSE);
+
+ name_label = gtk_label_new (NULL);
+ gtk_label_set_ellipsize (GTK_LABEL (name_label), PANGO_ELLIPSIZE_END);
+
+ attr_list = pango_attr_list_new ();
+ attr = pango_attr_scale_new (1/1.2);
+ attr->start_index = 0;
+ attr->end_index = -1;
+ pango_attr_list_insert (attr_list, attr);
+ gtk_label_set_attributes (GTK_LABEL (name_label), attr_list);
+ pango_attr_list_unref (attr_list);
+
+ gtk_misc_set_padding (GTK_MISC (name_label), 2, 0);
+ gtk_misc_set_alignment (GTK_MISC (name_label), 0.0, 0.5);
+ g_object_set_data (G_OBJECT (chat), "chat-window-tab-label", name_label);
+
+ status_image = gtk_image_new ();
+
+ /* Spacing between the icon and label. */
+ event_box_hbox = gtk_hbox_new (FALSE, 0);
+
+ gtk_box_pack_start (GTK_BOX (event_box_hbox), status_image, FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (event_box_hbox), name_label, TRUE, TRUE, 0);
+
+ g_object_set_data (G_OBJECT (chat), "chat-window-tab-image", status_image);
+ g_object_set_data (G_OBJECT (chat), "chat-window-tab-tooltip-widget", event_box);
+
+ close_button = gtk_button_new ();
+ gtk_button_set_relief (GTK_BUTTON (close_button), GTK_RELIEF_NONE);
+
+ /* We don't want focus/keynav for the button to avoid clutter, and
+ * Ctrl-W works anyway.
+ */
+ GTK_WIDGET_UNSET_FLAGS (close_button, GTK_CAN_FOCUS);
+ GTK_WIDGET_UNSET_FLAGS (close_button, GTK_CAN_DEFAULT);
+
+ /* Set the name to make the special rc style match. */
+ gtk_widget_set_name (close_button, "empathy-close-button");
+
+ close_image = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);
+
+ gtk_container_add (GTK_CONTAINER (close_button), close_image);
+
+ gtk_container_add (GTK_CONTAINER (event_box), event_box_hbox);
+ gtk_box_pack_start (GTK_BOX (hbox), event_box, TRUE, TRUE, 0);
+ gtk_box_pack_end (GTK_BOX (hbox), close_button, FALSE, FALSE, 0);
+
+ /* React to theme changes and also used to setup the initial size
+ * correctly.
+ */
+ g_signal_connect (close_button,
+ "style-set",
+ G_CALLBACK (chat_window_close_button_style_set_cb),
+ chat);
+
+ g_signal_connect (close_button,
+ "clicked",
+ G_CALLBACK (chat_window_close_clicked_cb),
+ chat);
+
+ gtk_widget_show_all (hbox);
+
+ return hbox;
+}
+
+static const gchar *
+chat_window_get_chat_name (EmpathyChat *chat)
+{
+ EmpathyContact *remote_contact = NULL;
+ const gchar *name = NULL;
+
+ name = empathy_chat_get_name (chat);
+ if (!name) {
+ remote_contact = empathy_chat_get_remote_contact (chat);
+ if (remote_contact) {
+ name = empathy_contact_get_name (remote_contact);
+ }
+ }
+
+ return name ? name : _("Conversation");
+}
+
+static void
+chat_window_update (EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv = GET_PRIV (window);
+ gboolean first_page;
+ gboolean last_page;
+ gboolean is_connected;
+ gint num_pages;
+ gint page_num;
+ const gchar *name;
+ guint n_chats;
+
+ /* Get information */
+ page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook));
+ num_pages = gtk_notebook_get_n_pages (GTK_NOTEBOOK (priv->notebook));
+ first_page = (page_num == 0);
+ last_page = (page_num == (num_pages - 1));
+ is_connected = empathy_chat_get_tp_chat (priv->current_chat) != NULL;
+ name = chat_window_get_chat_name (priv->current_chat);
+ n_chats = g_list_length (priv->chats);
+
+ DEBUG ("Update window");
+
+ /* Update menu */
+ gtk_widget_set_sensitive (priv->menu_tabs_next, !last_page);
+ gtk_widget_set_sensitive (priv->menu_tabs_prev, !first_page);
+ gtk_widget_set_sensitive (priv->menu_tabs_detach, num_pages > 1);
+ gtk_widget_set_sensitive (priv->menu_tabs_left, !first_page);
+ gtk_widget_set_sensitive (priv->menu_tabs_right, !last_page);
+ gtk_widget_set_sensitive (priv->menu_conv_insert_smiley, is_connected);
+
+ /* Update window title */
+ if (n_chats == 1) {
+ gtk_window_set_title (GTK_WINDOW (priv->dialog), name);
+ } else {
+ gchar *title;
+
+ title = g_strdup_printf (_("Conversations (%d)"), n_chats);
+ gtk_window_set_title (GTK_WINDOW (priv->dialog), title);
+ g_free (title);
+ }
+
+ /* Update window icon */
+ if (priv->chats_new_msg) {
+ gtk_window_set_icon_name (GTK_WINDOW (priv->dialog),
+ EMPATHY_IMAGE_MESSAGE);
+ } else {
+ gtk_window_set_icon_name (GTK_WINDOW (priv->dialog), NULL);
+ }
+}
+
+static void
+chat_window_update_chat_tab (EmpathyChat *chat)
+{
+ EmpathyChatWindow *window;
+ EmpathyChatWindowPriv *priv;
+ EmpathyContact *remote_contact;
+ const gchar *name;
+ const gchar *subject;
+ GtkWidget *widget;
+ GString *tooltip;
+ gchar *str;
+ const gchar *icon_name;
+
+ window = chat_window_find_chat (chat);
+ if (!window) {
+ return;
+ }
+ priv = GET_PRIV (window);
+
+ /* Get information */
+ name = chat_window_get_chat_name (chat);
+ subject = empathy_chat_get_subject (chat);
+ remote_contact = empathy_chat_get_remote_contact (chat);
+
+ DEBUG ("Updating chat tab, name=%s, subject=%s, remote_contact=%p",
+ name, subject, remote_contact);
+
+ /* Update tab image */
+ if (g_list_find (priv->chats_new_msg, chat)) {
+ icon_name = EMPATHY_IMAGE_MESSAGE;
+ }
+ else if (g_list_find (priv->chats_composing, chat)) {
+ icon_name = EMPATHY_IMAGE_TYPING;
+ }
+ else if (remote_contact) {
+ icon_name = empathy_icon_name_for_contact (remote_contact);
+ } else {
+ icon_name = EMPATHY_IMAGE_GROUP_MESSAGE;
+ }
+ widget = g_object_get_data (G_OBJECT (chat), "chat-window-tab-image");
+ gtk_image_set_from_icon_name (GTK_IMAGE (widget), icon_name, GTK_ICON_SIZE_MENU);
+
+ /* Update tab tooltip */
+ tooltip = g_string_new (NULL);
+ if (remote_contact) {
+ g_string_append_printf (tooltip, "%s\n%s",
+ empathy_contact_get_id (remote_contact),
+ empathy_contact_get_status (remote_contact));
+ }
+ else {
+ g_string_append (tooltip, name);
+ }
+ if (subject) {
+ g_string_append_printf (tooltip, "\n%s %s", _("Topic:"), subject);
+ }
+ if (g_list_find (priv->chats_composing, chat)) {
+ g_string_append_printf (tooltip, "\n%s", _("Typing a message."));
+ }
+ str = g_string_free (tooltip, FALSE);
+ widget = g_object_get_data (G_OBJECT (chat), "chat-window-tab-tooltip-widget");
+ gtk_widget_set_tooltip_text (widget, str);
+ g_free (str);
+
+ /* Update tab label */
+ widget = g_object_get_data (G_OBJECT (chat), "chat-window-tab-label");
+ gtk_label_set_text (GTK_LABEL (widget), name);
+
+ /* Update the window if it's the current chat */
+ if (priv->current_chat == chat) {
+ chat_window_update (window);
+ }
+}
+
+static void
+chat_window_chat_notify_cb (EmpathyChat *chat)
+{
+ EmpathyContact *old_remote_contact;
+ EmpathyContact *remote_contact = NULL;
+
+ old_remote_contact = g_object_get_data (G_OBJECT (chat), "chat-window-remote-contact");
+ remote_contact = empathy_chat_get_remote_contact (chat);
+
+ if (old_remote_contact != remote_contact) {
+ /* The remote-contact associated with the chat changed, we need
+ * to keep track of any change of that contact and update the
+ * window each time. */
+ if (remote_contact) {
+ g_signal_connect_swapped (remote_contact, "notify",
+ G_CALLBACK (chat_window_update_chat_tab),
+ chat);
+ }
+ if (old_remote_contact) {
+ g_signal_handlers_disconnect_by_func (old_remote_contact,
+ chat_window_update_chat_tab,
+ chat);
+ }
+
+ g_object_set_data (G_OBJECT (chat), "chat-window-remote-contact",
+ remote_contact);
+ }
+
+ chat_window_update_chat_tab (chat);
+}
+
+static void
+chat_window_insert_smiley_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ EmpathyChat *chat;
+ GtkTextBuffer *buffer;
+ GtkTextIter iter;
+ const gchar *smiley;
+
+ priv = GET_PRIV (window);
+
+ chat = priv->current_chat;
+
+ smiley = g_object_get_data (G_OBJECT (menuitem), "smiley_text");
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (chat->input_text_view));
+ gtk_text_buffer_get_end_iter (buffer, &iter);
+ gtk_text_buffer_insert (buffer, &iter,
+ smiley, -1);
+}
+
+static void
+chat_window_conv_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv = GET_PRIV (window);
+ GtkWidget *submenu = NULL;
+
+ submenu = empathy_chat_get_contact_menu (priv->current_chat);
+ if (submenu) {
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (priv->menu_conv_contact),
+ submenu);
+ gtk_widget_show (priv->menu_conv_contact);
+ gtk_widget_show (submenu);
+ } else {
+ gtk_widget_hide (priv->menu_conv_contact);
+ }
+}
+
+static void
+chat_window_clear_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv = GET_PRIV (window);
+
+ empathy_chat_clear (priv->current_chat);
+}
+
+static const gchar *
+chat_get_window_id_for_geometry (EmpathyChat *chat)
+{
+ const gchar *res = NULL;
+ gboolean separate_windows;
+
+ empathy_conf_get_bool (empathy_conf_get (),
+ EMPATHY_PREFS_UI_SEPARATE_CHAT_WINDOWS,
+ &separate_windows);
+
+ if (separate_windows) {
+ res = empathy_chat_get_id (chat);
+ }
+
+ return res ? res : "chat-window";
+}
+
+static gboolean
+chat_window_save_geometry_timeout_cb (EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ gint x, y, w, h;
+
+ priv = GET_PRIV (window);
+
+ gtk_window_get_size (GTK_WINDOW (priv->dialog), &w, &h);
+ gtk_window_get_position (GTK_WINDOW (priv->dialog), &x, &y);
+
+ empathy_geometry_save (chat_get_window_id_for_geometry (priv->current_chat),
+ x, y, w, h);
+
+ priv->save_geometry_id = 0;
+
+ return FALSE;
+}
+
+static gboolean
+chat_window_configure_event_cb (GtkWidget *widget,
+ GdkEventConfigure *event,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+
+ priv = GET_PRIV (window);
+
+ if (priv->save_geometry_id != 0) {
+ g_source_remove (priv->save_geometry_id);
+ }
+
+ priv->save_geometry_id =
+ g_timeout_add_seconds (1,
+ (GSourceFunc) chat_window_save_geometry_timeout_cb,
+ window);
+
+ return FALSE;
+}
+
+static void
+chat_window_close_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+
+ priv = GET_PRIV (window);
+
+ g_return_if_fail (priv->current_chat != NULL);
+
+ empathy_chat_window_remove_chat (window, priv->current_chat);
+}
+
+static void
+chat_window_edit_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ GtkClipboard *clipboard;
+ GtkTextBuffer *buffer;
+ gboolean text_available;
+
+ priv = GET_PRIV (window);
+
+ g_return_if_fail (priv->current_chat != NULL);
+
+ if (!empathy_chat_get_tp_chat (priv->current_chat)) {
+ gtk_widget_set_sensitive (priv->menu_edit_copy, FALSE);
+ gtk_widget_set_sensitive (priv->menu_edit_cut, FALSE);
+ gtk_widget_set_sensitive (priv->menu_edit_paste, FALSE);
+ return;
+ }
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (priv->current_chat->input_text_view));
+ if (gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL)) {
+ gtk_widget_set_sensitive (priv->menu_edit_copy, TRUE);
+ gtk_widget_set_sensitive (priv->menu_edit_cut, TRUE);
+ } else {
+ gboolean selection;
+
+ selection = empathy_chat_view_get_selection_bounds (priv->current_chat->view,
+ NULL, NULL);
+
+ gtk_widget_set_sensitive (priv->menu_edit_cut, FALSE);
+ gtk_widget_set_sensitive (priv->menu_edit_copy, selection);
+ }
+
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+ text_available = gtk_clipboard_wait_is_text_available (clipboard);
+ gtk_widget_set_sensitive (priv->menu_edit_paste, text_available);
+}
+
+static void
+chat_window_cut_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_WINDOW (window));
+
+ priv = GET_PRIV (window);
+
+ empathy_chat_cut (priv->current_chat);
+}
+
+static void
+chat_window_copy_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_WINDOW (window));
+
+ priv = GET_PRIV (window);
+
+ empathy_chat_copy (priv->current_chat);
+}
+
+static void
+chat_window_paste_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_WINDOW (window));
+
+ priv = GET_PRIV (window);
+
+ empathy_chat_paste (priv->current_chat);
+}
+
+static void
+chat_window_tabs_left_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ EmpathyChat *chat;
+ gint index;
+
+ priv = GET_PRIV (window);
+
+ chat = priv->current_chat;
+ index = gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook));
+ if (index <= 0) {
+ return;
+ }
+
+ gtk_notebook_reorder_child (GTK_NOTEBOOK (priv->notebook),
+ GTK_WIDGET (chat),
+ index - 1);
+}
+
+static void
+chat_window_tabs_right_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ EmpathyChat *chat;
+ gint index;
+
+ priv = GET_PRIV (window);
+
+ chat = priv->current_chat;
+ index = gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook));
+
+ gtk_notebook_reorder_child (GTK_NOTEBOOK (priv->notebook),
+ GTK_WIDGET (chat),
+ index + 1);
+}
+
+static void
+chat_window_detach_activate_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ EmpathyChatWindow *new_window;
+ EmpathyChat *chat;
+
+ priv = GET_PRIV (window);
+
+ chat = priv->current_chat;
+ new_window = empathy_chat_window_new ();
+
+ empathy_chat_window_move_chat (window, new_window, chat);
+
+ priv = GET_PRIV (new_window);
+ gtk_widget_show (priv->dialog);
+}
+
+static void
+chat_window_help_contents_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ empathy_url_show ("ghelp:empathy?chat");
+}
+
+static void
+chat_window_help_about_cb (GtkWidget *menuitem,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv = GET_PRIV (window);
+
+ empathy_about_dialog_new (GTK_WINDOW (priv->dialog));
+}
+
+static gboolean
+chat_window_delete_event_cb (GtkWidget *dialog,
+ GdkEvent *event,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv = GET_PRIV (window);
+
+ DEBUG ("Delete event received");
+
+ g_object_ref (window);
+ while (priv->chats) {
+ empathy_chat_window_remove_chat (window, priv->chats->data);
+ }
+ g_object_unref (window);
+
+ return TRUE;
+}
+
+static void
+chat_window_composing_cb (EmpathyChat *chat,
+ gboolean is_composing,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+
+ priv = GET_PRIV (window);
+
+ if (is_composing && !g_list_find (priv->chats_composing, chat)) {
+ priv->chats_composing = g_list_prepend (priv->chats_composing, chat);
+ } else {
+ priv->chats_composing = g_list_remove (priv->chats_composing, chat);
+ }
+
+ chat_window_update_chat_tab (chat);
+}
+
+static void
+chat_window_set_urgency_hint (EmpathyChatWindow *window,
+ gboolean urgent)
+{
+ EmpathyChatWindowPriv *priv;
+
+ priv = GET_PRIV (window);
+
+ DEBUG ("Turning %s urgency hint", urgent ? "on" : "off");
+ gtk_window_set_urgency_hint (GTK_WINDOW (priv->dialog), urgent);
+}
+
+static void
+chat_window_new_message_cb (EmpathyChat *chat,
+ EmpathyMessage *message,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ gboolean has_focus;
+ gboolean needs_urgency;
+
+ priv = GET_PRIV (window);
+
+ has_focus = empathy_chat_window_has_focus (window);
+
+ if (has_focus && priv->current_chat == chat) {
+ return;
+ }
+
+ if (empathy_chat_get_members_count (chat) > 2) {
+ needs_urgency = empathy_message_should_highlight (message);
+ } else {
+ needs_urgency = TRUE;
+ }
+
+ if (needs_urgency && !has_focus) {
+ chat_window_set_urgency_hint (window, TRUE);
+ }
+
+ if (!g_list_find (priv->chats_new_msg, chat)) {
+ priv->chats_new_msg = g_list_prepend (priv->chats_new_msg, chat);
+ chat_window_update_chat_tab (chat);
+ }
+}
+
+static GtkNotebook *
+chat_window_detach_hook (GtkNotebook *source,
+ GtkWidget *page,
+ gint x,
+ gint y,
+ gpointer user_data)
+{
+ EmpathyChatWindowPriv *priv;
+ EmpathyChatWindow *window, *new_window;
+ EmpathyChat *chat;
+
+ chat = EMPATHY_CHAT (page);
+ window = chat_window_find_chat (chat);
+
+ new_window = empathy_chat_window_new ();
+ priv = GET_PRIV (new_window);
+
+ DEBUG ("Detach hook called");
+
+ empathy_chat_window_move_chat (window, new_window, chat);
+
+ gtk_window_move (GTK_WINDOW (priv->dialog), x, y);
+ gtk_widget_show (priv->dialog);
+
+ return NULL;
+}
+
+static void
+chat_window_page_switched_cb (GtkNotebook *notebook,
+ GtkNotebookPage *page,
+ gint page_num,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ EmpathyChat *chat;
+ GtkWidget *child;
+
+ DEBUG ("Page switched");
+
+ priv = GET_PRIV (window);
+
+ child = gtk_notebook_get_nth_page (notebook, page_num);
+ chat = EMPATHY_CHAT (child);
+
+ if (priv->page_added) {
+ priv->page_added = FALSE;
+ empathy_chat_scroll_down (chat);
+ }
+ else if (priv->current_chat == chat) {
+ return;
+ }
+
+ priv->current_chat = chat;
+ priv->chats_new_msg = g_list_remove (priv->chats_new_msg, chat);
+
+ chat_window_update_chat_tab (chat);
+}
+
+static void
+chat_window_page_added_cb (GtkNotebook *notebook,
+ GtkWidget *child,
+ guint page_num,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ EmpathyChat *chat;
+
+ priv = GET_PRIV (window);
+
+ /* If we just received DND to the same window, we don't want
+ * to do anything here like removing the tab and then readding
+ * it, so we return here and in "page-added".
+ */
+ if (priv->dnd_same_window) {
+ DEBUG ("Page added (back to the same window)");
+ priv->dnd_same_window = FALSE;
+ return;
+ }
+
+ DEBUG ("Page added");
+
+ /* Get chat object */
+ chat = EMPATHY_CHAT (child);
+
+ /* Connect chat signals for this window */
+ g_signal_connect (chat, "composing",
+ G_CALLBACK (chat_window_composing_cb),
+ window);
+ g_signal_connect (chat, "new-message",
+ G_CALLBACK (chat_window_new_message_cb),
+ window);
+
+ /* Set flag so we know to perform some special operations on
+ * switch page due to the new page being added.
+ */
+ priv->page_added = TRUE;
+
+ /* Get list of chats up to date */
+ priv->chats = g_list_append (priv->chats, chat);
+
+ chat_window_update_chat_tab (chat);
+}
+
+static void
+chat_window_page_removed_cb (GtkNotebook *notebook,
+ GtkWidget *child,
+ guint page_num,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ EmpathyChat *chat;
+
+ priv = GET_PRIV (window);
+
+ /* If we just received DND to the same window, we don't want
+ * to do anything here like removing the tab and then readding
+ * it, so we return here and in "page-added".
+ */
+ if (priv->dnd_same_window) {
+ DEBUG ("Page removed (and will be readded to same window)");
+ return;
+ }
+
+ DEBUG ("Page removed");
+
+ /* Get chat object */
+ chat = EMPATHY_CHAT (child);
+
+ /* Disconnect all signal handlers for this chat and this window */
+ g_signal_handlers_disconnect_by_func (chat,
+ G_CALLBACK (chat_window_composing_cb),
+ window);
+ g_signal_handlers_disconnect_by_func (chat,
+ G_CALLBACK (chat_window_new_message_cb),
+ window);
+
+ /* Keep list of chats up to date */
+ priv->chats = g_list_remove (priv->chats, chat);
+ priv->chats_new_msg = g_list_remove (priv->chats_new_msg, chat);
+ priv->chats_composing = g_list_remove (priv->chats_composing, chat);
+
+ if (priv->chats == NULL) {
+ g_object_unref (window);
+ } else {
+ chat_window_update (window);
+ }
+}
+
+static gboolean
+chat_window_focus_in_event_cb (GtkWidget *widget,
+ GdkEvent *event,
+ EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+
+ DEBUG ("Focus in event, updating title");
+
+ priv = GET_PRIV (window);
+
+ priv->chats_new_msg = g_list_remove (priv->chats_new_msg, priv->current_chat);
+
+ chat_window_set_urgency_hint (window, FALSE);
+
+ /* Update the title, since we now mark all unread messages as read. */
+ chat_window_update_chat_tab (priv->current_chat);
+
+ return FALSE;
+}
+
+static void
+chat_window_drag_data_received (GtkWidget *widget,
+ GdkDragContext *context,
+ int x,
+ int y,
+ GtkSelectionData *selection,
+ guint info,
+ guint time,
+ EmpathyChatWindow *window)
+{
+ if (info == DND_DRAG_TYPE_CONTACT_ID) {
+ EmpathyChat *chat;
+ EmpathyChatWindow *old_window;
+ McAccount *account;
+ const gchar *id;
+ gchar **strv;
+
+ id = (const gchar*) selection->data;
+
+ DEBUG ("DND contact from roster with id:'%s'", id);
+
+ strv = g_strsplit (id, "/", 2);
+ account = mc_account_lookup (strv[0]);
+ chat = empathy_chat_window_find_chat (account, strv[1]);
+
+ if (!chat) {
+ empathy_chat_with_contact_id (account, strv[2]);
+ g_object_unref (account);
+ g_strfreev (strv);
+ return;
+ }
+ g_object_unref (account);
+ g_strfreev (strv);
+
+ old_window = chat_window_find_chat (chat);
+ if (old_window) {
+ if (old_window == window) {
+ gtk_drag_finish (context, TRUE, FALSE, time);
+ return;
+ }
+
+ empathy_chat_window_move_chat (old_window, window, chat);
+ } else {
+ empathy_chat_window_add_chat (window, chat);
+ }
+
+ /* Added to take care of any outstanding chat events */
+ empathy_chat_window_present_chat (chat);
+
+ /* We should return TRUE to remove the data when doing
+ * GDK_ACTION_MOVE, but we don't here otherwise it has
+ * weird consequences, and we handle that internally
+ * anyway with add_chat() and remove_chat().
+ */
+ gtk_drag_finish (context, TRUE, FALSE, time);
+ }
+ else if (info == DND_DRAG_TYPE_TAB) {
+ EmpathyChat **chat;
+ EmpathyChatWindow *old_window = NULL;
+
+ DEBUG ("DND tab");
+
+ chat = (void*) selection->data;
+ old_window = chat_window_find_chat (*chat);
+
+ if (old_window) {
+ EmpathyChatWindowPriv *priv;
+
+ priv = GET_PRIV (window);
+
+ if (old_window == window) {
+ DEBUG ("DND tab (within same window)");
+ priv->dnd_same_window = TRUE;
+ gtk_drag_finish (context, TRUE, FALSE, time);
+ return;
+ }
+
+ priv->dnd_same_window = FALSE;
+ }
+
+ /* We should return TRUE to remove the data when doing
+ * GDK_ACTION_MOVE, but we don't here otherwise it has
+ * weird consequences, and we handle that internally
+ * anyway with add_chat() and remove_chat().
+ */
+ gtk_drag_finish (context, TRUE, FALSE, time);
+ } else {
+ DEBUG ("DND from unknown source");
+ gtk_drag_finish (context, FALSE, FALSE, time);
+ }
+}
+
+static void
+chat_window_finalize (GObject *object)
+{
+ EmpathyChatWindow *window;
+ EmpathyChatWindowPriv *priv;
+
+ window = EMPATHY_CHAT_WINDOW (object);
+ priv = GET_PRIV (window);
+
+ DEBUG ("Finalized: %p", object);
+
+ if (priv->save_geometry_id != 0) {
+ g_source_remove (priv->save_geometry_id);
+ }
+
+ chat_windows = g_list_remove (chat_windows, window);
+ gtk_widget_destroy (priv->dialog);
+
+ G_OBJECT_CLASS (empathy_chat_window_parent_class)->finalize (object);
+}
+
+static void
+empathy_chat_window_class_init (EmpathyChatWindowClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = chat_window_finalize;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyChatWindowPriv));
+
+ /* Set up a style for the close button with no focus padding. */
+ gtk_rc_parse_string (
+ "style \"empathy-close-button-style\"\n"
+ "{\n"
+ " GtkWidget::focus-padding = 0\n"
+ " xthickness = 0\n"
+ " ythickness = 0\n"
+ "}\n"
+ "widget \"*.empathy-close-button\" style \"empathy-close-button-style\"");
+
+ gtk_notebook_set_window_creation_hook (chat_window_detach_hook, NULL, NULL);
+}
+
+static void
+empathy_chat_window_init (EmpathyChatWindow *window)
+{
+ GladeXML *glade;
+ GtkAccelGroup *accel_group;
+ GClosure *closure;
+ GtkWidget *menu_conv;
+ GtkWidget *menu;
+ gint i;
+ GtkWidget *chat_vbox;
+ gchar *filename;
+ EmpathyChatWindowPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (window,
+ EMPATHY_TYPE_CHAT_WINDOW, EmpathyChatWindowPriv);
+
+ window->priv = priv;
+ filename = empathy_file_lookup ("empathy-chat-window.glade", "src");
+ glade = empathy_glade_get_file (filename,
+ "chat_window",
+ NULL,
+ "chat_window", &priv->dialog,
+ "chat_vbox", &chat_vbox,
+ "menu_conv", &menu_conv,
+ "menu_conv_clear", &priv->menu_conv_clear,
+ "menu_conv_insert_smiley", &priv->menu_conv_insert_smiley,
+ "menu_conv_contact", &priv->menu_conv_contact,
+ "menu_conv_close", &priv->menu_conv_close,
+ "menu_edit_cut", &priv->menu_edit_cut,
+ "menu_edit_copy", &priv->menu_edit_copy,
+ "menu_edit_paste", &priv->menu_edit_paste,
+ "menu_tabs_next", &priv->menu_tabs_next,
+ "menu_tabs_prev", &priv->menu_tabs_prev,
+ "menu_tabs_left", &priv->menu_tabs_left,
+ "menu_tabs_right", &priv->menu_tabs_right,
+ "menu_tabs_detach", &priv->menu_tabs_detach,
+ "menu_help_contents", &priv->menu_help_contents,
+ "menu_help_about", &priv->menu_help_about,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ window,
+ "chat_window", "configure-event", chat_window_configure_event_cb,
+ "menu_conv", "activate", chat_window_conv_activate_cb,
+ "menu_conv_clear", "activate", chat_window_clear_activate_cb,
+ "menu_conv_close", "activate", chat_window_close_activate_cb,
+ "menu_edit", "activate", chat_window_edit_activate_cb,
+ "menu_edit_cut", "activate", chat_window_cut_activate_cb,
+ "menu_edit_copy", "activate", chat_window_copy_activate_cb,
+ "menu_edit_paste", "activate", chat_window_paste_activate_cb,
+ "menu_tabs_left", "activate", chat_window_tabs_left_activate_cb,
+ "menu_tabs_right", "activate", chat_window_tabs_right_activate_cb,
+ "menu_tabs_detach", "activate", chat_window_detach_activate_cb,
+ "menu_help_contents", "activate", chat_window_help_contents_cb,
+ "menu_help_about", "activate", chat_window_help_about_cb,
+ NULL);
+
+ g_object_unref (glade);
+
+ priv->notebook = gtk_notebook_new ();
+ gtk_notebook_set_group (GTK_NOTEBOOK (priv->notebook), "EmpathyChatWindow");
+ gtk_box_pack_start (GTK_BOX (chat_vbox), priv->notebook, TRUE, TRUE, 0);
+ gtk_widget_show (priv->notebook);
+
+ /* Set up accels */
+ accel_group = gtk_accel_group_new ();
+ gtk_window_add_accel_group (GTK_WINDOW (priv->dialog), accel_group);
+
+ for (i = 0; i < G_N_ELEMENTS (tab_accel_keys); i++) {
+ closure = g_cclosure_new (G_CALLBACK (chat_window_accel_cb),
+ window,
+ NULL);
+ gtk_accel_group_connect (accel_group,
+ tab_accel_keys[i],
+ GDK_MOD1_MASK,
+ 0,
+ closure);
+ }
+
+ g_object_unref (accel_group);
+
+ /* Set up smiley menu */
+ menu = empathy_chat_view_get_smiley_menu (
+ G_CALLBACK (chat_window_insert_smiley_activate_cb),
+ window);
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (priv->menu_conv_insert_smiley), menu);
+
+ /* Set up signals we can't do with glade since we may need to
+ * block/unblock them at some later stage.
+ */
+
+ g_signal_connect (priv->dialog,
+ "delete_event",
+ G_CALLBACK (chat_window_delete_event_cb),
+ window);
+
+ g_signal_connect_swapped (priv->menu_tabs_prev,
+ "activate",
+ G_CALLBACK (gtk_notebook_prev_page),
+ priv->notebook);
+ g_signal_connect_swapped (priv->menu_tabs_next,
+ "activate",
+ G_CALLBACK (gtk_notebook_next_page),
+ priv->notebook);
+
+ g_signal_connect (priv->dialog,
+ "focus_in_event",
+ G_CALLBACK (chat_window_focus_in_event_cb),
+ window);
+ g_signal_connect_after (priv->notebook,
+ "switch_page",
+ G_CALLBACK (chat_window_page_switched_cb),
+ window);
+ g_signal_connect (priv->notebook,
+ "page_added",
+ G_CALLBACK (chat_window_page_added_cb),
+ window);
+ g_signal_connect (priv->notebook,
+ "page_removed",
+ G_CALLBACK (chat_window_page_removed_cb),
+ window);
+
+ /* Set up drag and drop */
+ gtk_drag_dest_set (GTK_WIDGET (priv->notebook),
+ GTK_DEST_DEFAULT_ALL,
+ drag_types_dest,
+ G_N_ELEMENTS (drag_types_dest),
+ GDK_ACTION_MOVE);
+
+ g_signal_connect (priv->notebook,
+ "drag-data-received",
+ G_CALLBACK (chat_window_drag_data_received),
+ window);
+
+ chat_windows = g_list_prepend (chat_windows, window);
+
+ /* Set up private details */
+ priv->chats = NULL;
+ priv->chats_new_msg = NULL;
+ priv->chats_composing = NULL;
+ priv->current_chat = NULL;
+}
+
+EmpathyChatWindow *
+empathy_chat_window_new (void)
+{
+ return EMPATHY_CHAT_WINDOW (g_object_new (EMPATHY_TYPE_CHAT_WINDOW, NULL));
+}
+
+/* Returns the window to open a new tab in if there is only one window
+ * visble, otherwise, returns NULL indicating that a new window should
+ * be added.
+ */
+EmpathyChatWindow *
+empathy_chat_window_get_default (void)
+{
+ GList *l;
+ gboolean separate_windows = TRUE;
+
+ empathy_conf_get_bool (empathy_conf_get (),
+ EMPATHY_PREFS_UI_SEPARATE_CHAT_WINDOWS,
+ &separate_windows);
+
+ if (separate_windows) {
+ /* Always create a new window */
+ return NULL;
+ }
+
+ for (l = chat_windows; l; l = l->next) {
+ EmpathyChatWindow *chat_window;
+ GtkWidget *dialog;
+
+ chat_window = l->data;
+
+ dialog = empathy_chat_window_get_dialog (chat_window);
+ if (empathy_window_get_is_visible (GTK_WINDOW (GTK_WINDOW (dialog)))) {
+ /* Found a visible window on this desktop */
+ return chat_window;
+ }
+ }
+
+ return NULL;
+}
+
+GtkWidget *
+empathy_chat_window_get_dialog (EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+
+ g_return_val_if_fail (window != NULL, NULL);
+
+ priv = GET_PRIV (window);
+
+ return priv->dialog;
+}
+
+void
+empathy_chat_window_add_chat (EmpathyChatWindow *window,
+ EmpathyChat *chat)
+{
+ EmpathyChatWindowPriv *priv;
+ GtkWidget *label;
+ GtkWidget *child;
+ gint x, y, w, h;
+
+ g_return_if_fail (window != NULL);
+ g_return_if_fail (EMPATHY_IS_CHAT (chat));
+
+ priv = GET_PRIV (window);
+
+ /* Reference the chat object */
+ g_object_ref (chat);
+
+ empathy_geometry_load (chat_get_window_id_for_geometry (chat), &x, &y, &w, &h);
+
+ if (x >= 0 && y >= 0) {
+ /* Let the window manager position it if we don't have
+ * good x, y coordinates.
+ */
+ gtk_window_move (GTK_WINDOW (priv->dialog), x, y);
+ }
+
+ if (w > 0 && h > 0) {
+ /* Use the defaults from the glade file if we don't have
+ * good w, h geometry.
+ */
+ gtk_window_resize (GTK_WINDOW (priv->dialog), w, h);
+ }
+
+ child = GTK_WIDGET (chat);
+ label = chat_window_create_label (window, chat);
+ gtk_widget_show (child);
+
+ g_signal_connect (chat, "notify::name",
+ G_CALLBACK (chat_window_chat_notify_cb),
+ NULL);
+ g_signal_connect (chat, "notify::subject",
+ G_CALLBACK (chat_window_chat_notify_cb),
+ NULL);
+ g_signal_connect (chat, "notify::remote-contact",
+ G_CALLBACK (chat_window_chat_notify_cb),
+ NULL);
+ chat_window_chat_notify_cb (chat);
+
+ gtk_notebook_append_page (GTK_NOTEBOOK (priv->notebook), child, label);
+ gtk_notebook_set_tab_reorderable (GTK_NOTEBOOK (priv->notebook), child, TRUE);
+ gtk_notebook_set_tab_detachable (GTK_NOTEBOOK (priv->notebook), child, TRUE);
+ gtk_notebook_set_tab_label_packing (GTK_NOTEBOOK (priv->notebook), child,
+ TRUE, TRUE, GTK_PACK_START);
+
+ DEBUG ("Chat added (%d references)", G_OBJECT (chat)->ref_count);
+}
+
+void
+empathy_chat_window_remove_chat (EmpathyChatWindow *window,
+ EmpathyChat *chat)
+{
+ EmpathyChatWindowPriv *priv;
+ gint position;
+ EmpathyContact *remote_contact;
+
+ g_return_if_fail (window != NULL);
+ g_return_if_fail (EMPATHY_IS_CHAT (chat));
+
+ priv = GET_PRIV (window);
+
+ g_signal_handlers_disconnect_by_func (chat,
+ chat_window_chat_notify_cb,
+ NULL);
+ remote_contact = g_object_get_data (G_OBJECT (chat),
+ "chat-window-remote-contact");
+ if (remote_contact) {
+ g_signal_handlers_disconnect_by_func (remote_contact,
+ chat_window_update_chat_tab,
+ chat);
+ }
+
+ position = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook),
+ GTK_WIDGET (chat));
+ gtk_notebook_remove_page (GTK_NOTEBOOK (priv->notebook), position);
+
+ DEBUG ("Chat removed (%d references)", G_OBJECT (chat)->ref_count - 1);
+
+ g_object_unref (chat);
+}
+
+void
+empathy_chat_window_move_chat (EmpathyChatWindow *old_window,
+ EmpathyChatWindow *new_window,
+ EmpathyChat *chat)
+{
+ GtkWidget *widget;
+
+ g_return_if_fail (EMPATHY_IS_CHAT_WINDOW (old_window));
+ g_return_if_fail (EMPATHY_IS_CHAT_WINDOW (new_window));
+ g_return_if_fail (EMPATHY_IS_CHAT (chat));
+
+ widget = GTK_WIDGET (chat);
+
+ DEBUG ("Chat moving with widget:%p (%d references)", widget,
+ G_OBJECT (widget)->ref_count);
+
+ /* We reference here to make sure we don't loose the widget
+ * and the EmpathyChat object during the move.
+ */
+ g_object_ref (chat);
+ g_object_ref (widget);
+
+ empathy_chat_window_remove_chat (old_window, chat);
+ empathy_chat_window_add_chat (new_window, chat);
+
+ g_object_unref (widget);
+ g_object_unref (chat);
+}
+
+void
+empathy_chat_window_switch_to_chat (EmpathyChatWindow *window,
+ EmpathyChat *chat)
+{
+ EmpathyChatWindowPriv *priv;
+ gint page_num;
+
+ g_return_if_fail (window != NULL);
+ g_return_if_fail (EMPATHY_IS_CHAT (chat));
+
+ priv = GET_PRIV (window);
+
+ page_num = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook),
+ GTK_WIDGET (chat));
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook),
+ page_num);
+}
+
+gboolean
+empathy_chat_window_has_focus (EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv;
+ gboolean has_focus;
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT_WINDOW (window), FALSE);
+
+ priv = GET_PRIV (window);
+
+ g_object_get (priv->dialog, "has-toplevel-focus", &has_focus, NULL);
+
+ return has_focus;
+}
+
+EmpathyChat *
+empathy_chat_window_find_chat (McAccount *account,
+ const gchar *id)
+{
+ GList *l;
+
+ g_return_val_if_fail (MC_IS_ACCOUNT (account), NULL);
+ g_return_val_if_fail (!G_STR_EMPTY (id), NULL);
+
+ for (l = chat_windows; l; l = l->next) {
+ EmpathyChatWindowPriv *priv;
+ EmpathyChatWindow *window;
+ GList *ll;
+
+ window = l->data;
+ priv = GET_PRIV (window);
+
+ for (ll = priv->chats; ll; ll = ll->next) {
+ EmpathyChat *chat;
+
+ chat = ll->data;
+
+ if (empathy_account_equal (account, empathy_chat_get_account (chat)) &&
+ !tp_strdiff (id, empathy_chat_get_id (chat))) {
+ return chat;
+ }
+ }
+ }
+
+ return NULL;
+}
+
+void
+empathy_chat_window_present_chat (EmpathyChat *chat)
+{
+ EmpathyChatWindow *window;
+ EmpathyChatWindowPriv *priv;
+
+ g_return_if_fail (EMPATHY_IS_CHAT (chat));
+
+ window = chat_window_find_chat (chat);
+
+ /* If the chat has no window, create one */
+ if (window == NULL) {
+ window = empathy_chat_window_get_default ();
+ if (!window) {
+ window = empathy_chat_window_new ();
+ }
+
+ empathy_chat_window_add_chat (window, chat);
+ }
+
+ priv = GET_PRIV (window);
+ empathy_chat_window_switch_to_chat (window, chat);
+ empathy_window_present (GTK_WINDOW (priv->dialog), TRUE);
+
+ gtk_widget_grab_focus (chat->input_text_view);
+}
+
+#if 0
+static gboolean
+chat_window_should_play_sound (EmpathyChatWindow *window)
+{
+ EmpathyChatWindowPriv *priv = GET_PRIV (window);
+ gboolean has_focus = FALSE;
+
+ g_return_val_if_fail (EMPATHY_IS_CHAT_WINDOW (window), FALSE);
+
+ g_object_get (priv->dialog, "has-toplevel-focus", &has_focus, NULL);
+
+ return !has_focus;
+}
+#endif
diff --git a/trunk/src/empathy-chat-window.glade b/trunk/src/empathy-chat-window.glade
new file mode 100644
index 000000000..e54072473
--- /dev/null
+++ b/trunk/src/empathy-chat-window.glade
@@ -0,0 +1,344 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="chat_window">
+ <property name="title" translatable="yes">Chat</property>
+ <property name="default_width">350</property>
+ <property name="default_height">250</property>
+ <child>
+ <widget class="GtkVBox" id="chat_vbox">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkMenuBar" id="chats_menubar">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkMenuItem" id="menu_conv">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Conversation</property>
+ <property name="use_underline">True</property>
+ <child>
+ <widget class="GtkMenu" id="menu_conv_menu">
+ <child>
+ <widget class="GtkImageMenuItem" id="menu_conv_clear">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">C_lear</property>
+ <property name="use_underline">True</property>
+ <accelerator key="L" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image262">
+ <property name="visible">True</property>
+ <property name="stock">gtk-clear</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="menu_conv_insert_smiley">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Insert _Smiley</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="menu_conv_contact">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Contact</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separator7">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="menu_conv_close">
+ <property name="visible">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="W" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="menu_edit">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Edit</property>
+ <property name="use_underline">True</property>
+ <child>
+ <widget class="GtkMenu" id="menu_edit_menu">
+ <child>
+ <widget class="GtkImageMenuItem" id="menu_edit_cut">
+ <property name="visible">True</property>
+ <property name="label">gtk-cut</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="X" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="menu_edit_copy">
+ <property name="visible">True</property>
+ <property name="label">gtk-copy</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="C" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="menu_edit_paste">
+ <property name="visible">True</property>
+ <property name="label">gtk-paste</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="V" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="menu_tabs">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Tabs</property>
+ <property name="use_underline">True</property>
+ <child>
+ <widget class="GtkMenu" id="menu_tabs_menu">
+ <child>
+ <widget class="GtkMenuItem" id="menu_tabs_prev">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Previous Tab</property>
+ <property name="use_underline">True</property>
+ <accelerator key="Page_Up" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="menu_tabs_next">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Next Tab</property>
+ <property name="use_underline">True</property>
+ <accelerator key="Page_Down" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separator4">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="menu_tabs_left">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Move Tab _Left</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="menu_tabs_right">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Move Tab _Right</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="menu_tabs_detach">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Detach Tab</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="menu_help">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Help</property>
+ <property name="use_underline">True</property>
+ <child>
+ <widget class="GtkMenu" id="menu_help_menu">
+ <child>
+ <widget class="GtkImageMenuItem" id="menu_help_contents">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Contents</property>
+ <property name="use_underline">True</property>
+ <accelerator key="F1" modifiers="" signal="activate"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image289">
+ <property name="visible">True</property>
+ <property name="stock">gtk-help</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="menu_help_about">
+ <property name="visible">True</property>
+ <property name="label">gtk-about</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <widget class="GtkDialog" id="chat_invite_dialog">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Invite</property>
+ <property name="modal">True</property>
+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+ <property name="default_width">275</property>
+ <property name="default_height">225</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="vbox6">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkVBox" id="vbox7">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="spacing">18</property>
+ <child>
+ <widget class="GtkVBox" id="vbox7">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Select who would you like to invite:</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox8">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkLabel" id="label4">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Invitation _message:</property>
+ <property name="use_markup">True</property>
+ <property name="use_underline">True</property>
+ <property name="wrap">True</property>
+ <property name="mnemonic_widget">entry</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="activates_default">True</property>
+ <property name="width_chars">40</property>
+ <property name="text" translatable="yes">You have been invited to join a chat conference.</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="hbuttonbox1">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button_cancel">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_invite">
+ <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="label">In_vite</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/src/empathy-chat-window.h b/trunk/src/empathy-chat-window.h
new file mode 100644
index 000000000..8b7fe06a9
--- /dev/null
+++ b/trunk/src/empathy-chat-window.h
@@ -0,0 +1,79 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Geert-Jan Van den Bogaerde <geertjan@gnome.org>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_CHAT_WINDOW_H__
+#define __EMPATHY_CHAT_WINDOW_H__
+
+#include <glib-object.h>
+#include <gtk/gtkwidget.h>
+
+#include <libmissioncontrol/mc-account.h>
+#include <libempathy-gtk/empathy-chat.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_CHAT_WINDOW (empathy_chat_window_get_type ())
+#define EMPATHY_CHAT_WINDOW(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_CHAT_WINDOW, EmpathyChatWindow))
+#define EMPATHY_CHAT_WINDOW_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), EMPATHY_TYPE_CHAT_WINDOW, EmpathyChatWindowClass))
+#define EMPATHY_IS_CHAT_WINDOW(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_CHAT_WINDOW))
+#define EMPATHY_IS_CHAT_WINDOW_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_CHAT_WINDOW))
+#define EMPATHY_CHAT_WINDOW_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_CHAT_WINDOW, EmpathyChatWindowClass))
+
+typedef struct _EmpathyChatWindow EmpathyChatWindow;
+typedef struct _EmpathyChatWindowClass EmpathyChatWindowClass;
+
+struct _EmpathyChatWindow {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyChatWindowClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_chat_window_get_type (void);
+EmpathyChatWindow *empathy_chat_window_get_default (void);
+EmpathyChatWindow *empathy_chat_window_new (void);
+GtkWidget * empathy_chat_window_get_dialog (EmpathyChatWindow *window);
+void empathy_chat_window_add_chat (EmpathyChatWindow *window,
+ EmpathyChat *chat);
+void empathy_chat_window_remove_chat (EmpathyChatWindow *window,
+ EmpathyChat *chat);
+void empathy_chat_window_move_chat (EmpathyChatWindow *old_window,
+ EmpathyChatWindow *new_window,
+ EmpathyChat *chat);
+void empathy_chat_window_switch_to_chat (EmpathyChatWindow *window,
+ EmpathyChat *chat);
+gboolean empathy_chat_window_has_focus (EmpathyChatWindow *window);
+EmpathyChat * empathy_chat_window_find_chat (McAccount *account,
+ const gchar *id);
+void empathy_chat_window_present_chat (EmpathyChat *chat);
+
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CHAT_WINDOW_H__ */
diff --git a/trunk/src/empathy-chatrooms-window.c b/trunk/src/empathy-chatrooms-window.c
new file mode 100644
index 000000000..52c6635bf
--- /dev/null
+++ b/trunk/src/empathy-chatrooms-window.c
@@ -0,0 +1,586 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Mikael Hallendal <micke@imendio.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <stdio.h>
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <libempathy/empathy-chatroom-manager.h>
+#include <libempathy/empathy-utils.h>
+
+#include <libempathy-gtk/empathy-account-chooser.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
+
+#include "empathy-chatrooms-window.h"
+#include "empathy-new-chatroom-dialog.h"
+
+typedef struct {
+ EmpathyChatroomManager *manager;
+
+ GtkWidget *window;
+ GtkWidget *hbox_account;
+ GtkWidget *label_account;
+ GtkWidget *account_chooser;
+ GtkWidget *treeview;
+ GtkWidget *button_remove;
+ GtkWidget *button_edit;
+ GtkWidget *button_close;
+
+ gint room_column;
+} EmpathyChatroomsWindow;
+
+static void chatrooms_window_destroy_cb (GtkWidget *widget,
+ EmpathyChatroomsWindow *window);
+static void chatrooms_window_model_setup (EmpathyChatroomsWindow *window);
+static void chatrooms_window_model_add_columns (EmpathyChatroomsWindow *window);
+static void chatrooms_window_model_refresh_data (EmpathyChatroomsWindow *window,
+ gboolean first_time);
+static void chatrooms_window_model_add (EmpathyChatroomsWindow *window,
+ EmpathyChatroom *chatroom,
+ gboolean set_active);
+static void chatrooms_window_model_cell_auto_connect_toggled (GtkCellRendererToggle *cell,
+ gchar *path_string,
+ EmpathyChatroomsWindow *window);
+static EmpathyChatroom * chatrooms_window_model_get_selected (EmpathyChatroomsWindow *window);
+static void chatrooms_window_model_action_selected (EmpathyChatroomsWindow *window);
+static void chatrooms_window_row_activated_cb (GtkTreeView *tree_view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ EmpathyChatroomsWindow *window);
+static void chatrooms_window_button_remove_clicked_cb (GtkWidget *widget,
+ EmpathyChatroomsWindow *window);
+static void chatrooms_window_button_edit_clicked_cb (GtkWidget *widget,
+ EmpathyChatroomsWindow *window);
+static void chatrooms_window_button_close_clicked_cb (GtkWidget *widget,
+ EmpathyChatroomsWindow *window);
+static void chatrooms_window_chatroom_added_cb (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom,
+ EmpathyChatroomsWindow *window);
+static void chatrooms_window_chatroom_removed_cb (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom,
+ EmpathyChatroomsWindow *window);
+static gboolean chatrooms_window_remove_chatroom_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ EmpathyChatroom *chatroom);
+static void chatrooms_window_account_changed_cb (GtkWidget *combo_box,
+ EmpathyChatroomsWindow *window);
+
+enum {
+ COL_IMAGE,
+ COL_NAME,
+ COL_ROOM,
+ COL_AUTO_CONNECT,
+ COL_POINTER,
+ COL_COUNT
+};
+
+void
+empathy_chatrooms_window_show (GtkWindow *parent)
+{
+ static EmpathyChatroomsWindow *window = NULL;
+ GladeXML *glade;
+ gchar *filename;
+
+ if (window) {
+ gtk_window_present (GTK_WINDOW (window->window));
+ return;
+ }
+
+ window = g_new0 (EmpathyChatroomsWindow, 1);
+
+ filename = empathy_file_lookup ("empathy-chatrooms-window.glade", "src");
+ glade = empathy_glade_get_file (filename,
+ "chatrooms_window",
+ NULL,
+ "chatrooms_window", &window->window,
+ "hbox_account", &window->hbox_account,
+ "label_account", &window->label_account,
+ "treeview", &window->treeview,
+ "button_edit", &window->button_edit,
+ "button_remove", &window->button_remove,
+ "button_close", &window->button_close,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ window,
+ "chatrooms_window", "destroy", chatrooms_window_destroy_cb,
+ "button_remove", "clicked", chatrooms_window_button_remove_clicked_cb,
+ "button_edit", "clicked", chatrooms_window_button_edit_clicked_cb,
+ "button_close", "clicked", chatrooms_window_button_close_clicked_cb,
+ NULL);
+
+ g_object_unref (glade);
+
+ g_object_add_weak_pointer (G_OBJECT (window->window), (gpointer) &window);
+
+ /* Get the session and chat room manager */
+ window->manager = empathy_chatroom_manager_new ();
+
+ g_signal_connect (window->manager, "chatroom-added",
+ G_CALLBACK (chatrooms_window_chatroom_added_cb),
+ window);
+ g_signal_connect (window->manager, "chatroom-removed",
+ G_CALLBACK (chatrooms_window_chatroom_removed_cb),
+ window);
+
+ /* Account chooser for chat rooms */
+ window->account_chooser = empathy_account_chooser_new ();
+ empathy_account_chooser_set_filter (EMPATHY_ACCOUNT_CHOOSER (window->account_chooser),
+ empathy_account_chooser_filter_is_connected,
+ NULL);
+ g_object_set (window->account_chooser,
+ "has-all-option", TRUE,
+ NULL);
+ empathy_account_chooser_set_account (EMPATHY_ACCOUNT_CHOOSER (window->account_chooser), NULL);
+
+ gtk_box_pack_start (GTK_BOX (window->hbox_account),
+ window->account_chooser,
+ TRUE, TRUE, 0);
+
+ g_signal_connect (window->account_chooser, "changed",
+ G_CALLBACK (chatrooms_window_account_changed_cb),
+ window);
+
+ gtk_widget_show (window->account_chooser);
+
+ /* Set up chatrooms */
+ chatrooms_window_model_setup (window);
+
+ /* Set focus */
+ gtk_widget_grab_focus (window->treeview);
+
+ /* Last touches */
+ if (parent) {
+ gtk_window_set_transient_for (GTK_WINDOW (window->window),
+ GTK_WINDOW (parent));
+ }
+
+ gtk_widget_show (window->window);
+}
+
+static void
+chatrooms_window_destroy_cb (GtkWidget *widget,
+ EmpathyChatroomsWindow *window)
+{
+ g_signal_handlers_disconnect_by_func (window->manager,
+ chatrooms_window_chatroom_added_cb,
+ window);
+ g_signal_handlers_disconnect_by_func (window->manager,
+ chatrooms_window_chatroom_removed_cb,
+ window);
+ g_object_unref (window->manager);
+ g_free (window);
+}
+
+static void
+chatrooms_window_model_setup (EmpathyChatroomsWindow *window)
+{
+ GtkTreeView *view;
+ GtkListStore *store;
+ GtkTreeSelection *selection;
+
+ /* View */
+ view = GTK_TREE_VIEW (window->treeview);
+
+ g_signal_connect (view, "row-activated",
+ G_CALLBACK (chatrooms_window_row_activated_cb),
+ window);
+
+ /* Store */
+ store = gtk_list_store_new (COL_COUNT,
+ G_TYPE_STRING, /* Image */
+ G_TYPE_STRING, /* Name */
+ G_TYPE_STRING, /* Room */
+ G_TYPE_BOOLEAN, /* Auto start */
+ EMPATHY_TYPE_CHATROOM); /* Chatroom */
+
+ gtk_tree_view_set_model (view, GTK_TREE_MODEL (store));
+
+ /* Selection */
+ selection = gtk_tree_view_get_selection (view);
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+ /* Columns */
+ chatrooms_window_model_add_columns (window);
+
+ /* Add data */
+ chatrooms_window_model_refresh_data (window, TRUE);
+
+ /* Clean up */
+ g_object_unref (store);
+}
+
+static void
+chatrooms_window_model_add_columns (EmpathyChatroomsWindow *window)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *cell;
+ gint count;
+
+ view = GTK_TREE_VIEW (window->treeview);
+ model = gtk_tree_view_get_model (view);
+
+ gtk_tree_view_set_headers_visible (view, TRUE);
+ gtk_tree_view_set_headers_clickable (view, TRUE);
+
+ /* Name & Status */
+ column = gtk_tree_view_column_new ();
+ count = gtk_tree_view_append_column (view, column);
+
+ gtk_tree_view_column_set_title (column, _("Name"));
+ gtk_tree_view_column_set_expand (column, TRUE);
+ gtk_tree_view_column_set_sort_column_id (column, count - 1);
+
+ cell = gtk_cell_renderer_pixbuf_new ();
+ gtk_tree_view_column_pack_start (column, cell, FALSE);
+ gtk_tree_view_column_add_attribute (column, cell, "icon-name", COL_IMAGE);
+
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell,
+ "xpad", 4,
+ "ypad", 1,
+ NULL);
+ gtk_tree_view_column_pack_start (column, cell, TRUE);
+ gtk_tree_view_column_add_attribute (column, cell, "text", COL_NAME);
+
+ /* Room */
+ cell = gtk_cell_renderer_text_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("Room"), cell,
+ "text", COL_ROOM,
+ NULL);
+ count = gtk_tree_view_append_column (view, column);
+ gtk_tree_view_column_set_sort_column_id (column, count - 1);
+ window->room_column = count - 1;
+
+ /* Chatroom auto connect */
+ cell = gtk_cell_renderer_toggle_new ();
+ column = gtk_tree_view_column_new_with_attributes (_("Auto-Connect"), cell,
+ "active", COL_AUTO_CONNECT,
+ NULL);
+ count = gtk_tree_view_append_column (view, column);
+ gtk_tree_view_column_set_sort_column_id (column, count - 1);
+
+ g_signal_connect (cell, "toggled",
+ G_CALLBACK (chatrooms_window_model_cell_auto_connect_toggled),
+ window);
+
+ /* Sort model */
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), 0,
+ GTK_SORT_ASCENDING);
+}
+
+static void
+chatrooms_window_model_refresh_data (EmpathyChatroomsWindow *window,
+ gboolean first_time)
+{
+ GtkTreeView *view;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkListStore *store;
+ GtkTreeIter iter;
+ GtkTreeViewColumn *column;
+ EmpathyAccountChooser *account_chooser;
+ McAccount *account;
+ GList *chatrooms, *l;
+
+ view = GTK_TREE_VIEW (window->treeview);
+ selection = gtk_tree_view_get_selection (view);
+ model = gtk_tree_view_get_model (view);
+ store = GTK_LIST_STORE (model);
+
+ /* Look up chatrooms */
+ account_chooser = EMPATHY_ACCOUNT_CHOOSER (window->account_chooser);
+ account = empathy_account_chooser_get_account (account_chooser);
+
+ chatrooms = empathy_chatroom_manager_get_chatrooms (window->manager, account);
+
+ /* Sort out columns, we only show the server column for
+ * selected protocol types, such as Jabber.
+ */
+ if (account) {
+ column = gtk_tree_view_get_column (view, window->room_column);
+ gtk_tree_view_column_set_visible (column, TRUE);
+ } else {
+ column = gtk_tree_view_get_column (view, window->room_column);
+ gtk_tree_view_column_set_visible (column, FALSE);
+ }
+
+ /* Clean out the store */
+ gtk_list_store_clear (store);
+
+ /* Populate with chatroom list. */
+ for (l = chatrooms; l; l = l->next) {
+ chatrooms_window_model_add (window, l->data, FALSE);
+ }
+
+ if (gtk_tree_model_get_iter_first (model, &iter)) {
+ gtk_tree_selection_select_iter (selection, &iter);
+ }
+
+ if (account) {
+ g_object_unref (account);
+ }
+
+ g_list_free (chatrooms);
+}
+
+static void
+chatrooms_window_model_add (EmpathyChatroomsWindow *window,
+ EmpathyChatroom *chatroom,
+ gboolean set_active)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkListStore *store;
+ GtkTreeIter iter;
+
+ view = GTK_TREE_VIEW (window->treeview);
+ selection = gtk_tree_view_get_selection (view);
+ model = gtk_tree_view_get_model (view);
+ store = GTK_LIST_STORE (model);
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_NAME, empathy_chatroom_get_name (chatroom),
+ COL_ROOM, empathy_chatroom_get_room (chatroom),
+ COL_AUTO_CONNECT, empathy_chatroom_get_auto_connect (chatroom),
+ COL_POINTER, chatroom,
+ -1);
+
+ if (set_active) {
+ gtk_tree_selection_select_iter (selection, &iter);
+ }
+}
+
+static void
+chatrooms_window_model_cell_auto_connect_toggled (GtkCellRendererToggle *cell,
+ gchar *path_string,
+ EmpathyChatroomsWindow *window)
+{
+ EmpathyChatroom *chatroom;
+ gboolean enabled;
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkListStore *store;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+
+ view = GTK_TREE_VIEW (window->treeview);
+ model = gtk_tree_view_get_model (view);
+ store = GTK_LIST_STORE (model);
+
+ path = gtk_tree_path_new_from_string (path_string);
+
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get (model, &iter,
+ COL_AUTO_CONNECT, &enabled,
+ COL_POINTER, &chatroom,
+ -1);
+
+ enabled = !enabled;
+
+ empathy_chatroom_set_auto_connect (chatroom, enabled);
+ empathy_chatroom_manager_store (window->manager);
+
+ gtk_list_store_set (store, &iter, COL_AUTO_CONNECT, enabled, -1);
+ gtk_tree_path_free (path);
+ g_object_unref (chatroom);
+}
+
+static EmpathyChatroom *
+chatrooms_window_model_get_selected (EmpathyChatroomsWindow *window)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ EmpathyChatroom *chatroom = NULL;
+
+ view = GTK_TREE_VIEW (window->treeview);
+ selection = gtk_tree_view_get_selection (view);
+
+ if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ gtk_tree_model_get (model, &iter, COL_POINTER, &chatroom, -1);
+ }
+
+ return chatroom;
+}
+
+static void
+chatrooms_window_model_action_selected (EmpathyChatroomsWindow *window)
+{
+ EmpathyChatroom *chatroom;
+ GtkTreeView *view;
+ GtkTreeModel *model;
+
+ view = GTK_TREE_VIEW (window->treeview);
+ model = gtk_tree_view_get_model (view);
+
+ chatroom = chatrooms_window_model_get_selected (window);
+ if (!chatroom) {
+ return;
+ }
+
+ //empathy_edit_chatroom_dialog_show (GTK_WINDOW (window->window), chatroom);
+
+ g_object_unref (chatroom);
+}
+
+static void
+chatrooms_window_row_activated_cb (GtkTreeView *tree_view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ EmpathyChatroomsWindow *window)
+{
+ if (GTK_WIDGET_IS_SENSITIVE (window->button_edit)) {
+ chatrooms_window_model_action_selected (window);
+ }
+}
+
+static void
+chatrooms_window_button_remove_clicked_cb (GtkWidget *widget,
+ EmpathyChatroomsWindow *window)
+{
+ EmpathyChatroom *chatroom;
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+
+ /* Remove from treeview */
+ view = GTK_TREE_VIEW (window->treeview);
+ selection = gtk_tree_view_get_selection (view);
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ return;
+ }
+
+ gtk_tree_model_get (model, &iter, COL_POINTER, &chatroom, -1);
+ gtk_list_store_remove (GTK_LIST_STORE (model), &iter);
+
+ /* Remove from config */
+ empathy_chatroom_manager_remove (window->manager, chatroom);
+
+ g_object_unref (chatroom);
+}
+
+static void
+chatrooms_window_button_edit_clicked_cb (GtkWidget *widget,
+ EmpathyChatroomsWindow *window)
+{
+ EmpathyChatroom *chatroom;
+
+ chatroom = chatrooms_window_model_get_selected (window);
+ if (!chatroom) {
+ return;
+ }
+
+ //empathy_edit_chatroom_dialog_show (GTK_WINDOW (window->window), chatroom);
+
+ g_object_unref (chatroom);
+}
+
+static void
+chatrooms_window_button_close_clicked_cb (GtkWidget *widget,
+ EmpathyChatroomsWindow *window)
+{
+ gtk_widget_destroy (window->window);
+}
+
+static void
+chatrooms_window_chatroom_added_cb (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom,
+ EmpathyChatroomsWindow *window)
+{
+ EmpathyAccountChooser *account_chooser;
+ McAccount *account;
+
+ account_chooser = EMPATHY_ACCOUNT_CHOOSER (window->account_chooser);
+ account = empathy_account_chooser_get_account (account_chooser);
+
+ if (!account) {
+ chatrooms_window_model_add (window, chatroom, FALSE);
+ } else {
+ if (empathy_account_equal (account, empathy_chatroom_get_account (chatroom))) {
+ chatrooms_window_model_add (window, chatroom, FALSE);
+ }
+
+ g_object_unref (account);
+ }
+}
+
+static void
+chatrooms_window_chatroom_removed_cb (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom,
+ EmpathyChatroomsWindow *window)
+{
+ GtkTreeModel *model;
+
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->treeview));
+
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc) chatrooms_window_remove_chatroom_foreach,
+ chatroom);
+}
+
+static gboolean
+chatrooms_window_remove_chatroom_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ EmpathyChatroom *chatroom)
+{
+ EmpathyChatroom *this_chatroom;
+
+ gtk_tree_model_get (model, iter, COL_POINTER, &this_chatroom, -1);
+
+ if (empathy_chatroom_equal (chatroom, this_chatroom)) {
+ gtk_list_store_remove (GTK_LIST_STORE (model), iter);
+ g_object_unref (this_chatroom);
+ return TRUE;
+ }
+
+ g_object_unref (this_chatroom);
+
+ return FALSE;
+}
+
+static void
+chatrooms_window_account_changed_cb (GtkWidget *combo_box,
+ EmpathyChatroomsWindow *window)
+{
+ chatrooms_window_model_refresh_data (window, FALSE);
+}
+
diff --git a/trunk/src/empathy-chatrooms-window.glade b/trunk/src/empathy-chatrooms-window.glade
new file mode 100644
index 000000000..d6b23d76d
--- /dev/null
+++ b/trunk/src/empathy-chatrooms-window.glade
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkDialog" id="edit_chatroom_dialog">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Edit Favorite Room</property>
+ <property name="resizable">False</property>
+ <property name="icon_name">gtk-edit</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox3">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkTable" id="table4">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="n_rows">5</property>
+ <property name="n_columns">2</property>
+ <property name="column_spacing">12</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_auto_connect">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Join this chat room when Empathy starts and you are connected</property>
+ <property name="label" translatable="yes">Join room on start_up</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">4</property>
+ <property name="bottom_attach">5</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_name">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="width_chars">25</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_name">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">N_ame:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_name</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_nickname">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">_Nickname:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_nickname</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_server">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">S_erver:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">entry_server</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_room">
+ <property name="visible">True</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>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_nickname">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_server">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_room">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area3">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button_cancel">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_save">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-save</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <widget class="GtkWindow" id="chatrooms_window">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="title" translatable="yes">Manage Favorite Rooms</property>
+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+ <child>
+ <widget class="GtkVBox" id="vbox12">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox18">
+ <property name="visible">True</property>
+ <property name="spacing">18</property>
+ <child>
+ <widget class="GtkHBox" id="hbox_account">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <widget class="GtkLabel" id="label_account">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Account:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow1">
+ <property name="height_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHButtonBox" id="hbuttonbox3">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button_remove">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-remove</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_edit">
+ <property name="visible">True</property>
+ <property name="sensitive">False</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-edit</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_close">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/src/empathy-chatrooms-window.h b/trunk/src/empathy-chatrooms-window.h
new file mode 100644
index 000000000..727188f01
--- /dev/null
+++ b/trunk/src/empathy-chatrooms-window.h
@@ -0,0 +1,37 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2004-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ * Martyn Russell <martyn@imendio.com>
+ * Mikael Hallendal <micke@imendio.com>
+ */
+
+#ifndef __EMPATHY_CHATROOMS_WINDOW_H__
+#define __EMPATHY_CHATROOMS_WINDOW_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+void empathy_chatrooms_window_show (GtkWindow *parent);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_CHATROOMS_WINDOW_H__ */
diff --git a/trunk/src/empathy-logs.c b/trunk/src/empathy-logs.c
new file mode 100644
index 000000000..f49207ebf
--- /dev/null
+++ b/trunk/src/empathy-logs.c
@@ -0,0 +1,66 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <glib.h>
+#include <gtk/gtk.h>
+
+#include <libempathy/empathy-debug.h>
+#include <libempathy-gtk/empathy-log-window.h>
+
+static void
+destroy_cb (GtkWidget *dialog,
+ gpointer user_data)
+{
+ gtk_main_quit ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ GtkWidget *window;
+
+ gtk_init (&argc, &argv);
+
+ if (g_getenv ("EMPATHY_TIMING") != NULL) {
+ g_log_set_default_handler (tp_debug_timestamped_log_handler, NULL);
+ }
+ empathy_debug_set_flags (g_getenv ("EMPATHY_DEBUG"));
+ tp_debug_divert_messages (g_getenv ("EMPATHY_LOGFILE"));
+
+ gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
+ PKGDATADIR G_DIR_SEPARATOR_S "icons");
+ window = empathy_log_window_show (NULL, NULL, FALSE, NULL);
+
+ g_signal_connect (window, "destroy",
+ G_CALLBACK (destroy_cb),
+ NULL);
+
+ gtk_main ();
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/trunk/src/empathy-main-window.c b/trunk/src/empathy-main-window.c
new file mode 100644
index 000000000..8a8117f6e
--- /dev/null
+++ b/trunk/src/empathy-main-window.c
@@ -0,0 +1,1160 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2002-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <sys/stat.h>
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include <glib/gi18n.h>
+
+#include <libempathy/empathy-contact.h>
+#include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-chatroom-manager.h>
+#include <libempathy/empathy-chatroom.h>
+#include <libempathy/empathy-contact-list.h>
+#include <libempathy/empathy-contact-manager.h>
+#include <libempathy/empathy-contact-factory.h>
+#include <libempathy/empathy-status-presets.h>
+
+#include <libempathy-gtk/empathy-contact-dialogs.h>
+#include <libempathy-gtk/empathy-contact-list-store.h>
+#include <libempathy-gtk/empathy-contact-list-view.h>
+#include <libempathy-gtk/empathy-presence-chooser.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
+#include <libempathy-gtk/empathy-geometry.h>
+#include <libempathy-gtk/empathy-conf.h>
+#include <libempathy-gtk/empathy-accounts-dialog.h>
+#include <libempathy-gtk/empathy-log-window.h>
+#include <libempathy-gtk/empathy-new-message-dialog.h>
+#include <libempathy-gtk/empathy-gtk-enum-types.h>
+
+#include "empathy-main-window.h"
+#include "ephy-spinner.h"
+#include "empathy-preferences.h"
+#include "empathy-about-dialog.h"
+#include "empathy-new-chatroom-dialog.h"
+#include "empathy-chatrooms-window.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+/* Minimum width of roster window if something goes wrong. */
+#define MIN_WIDTH 50
+
+/* Accels (menu shortcuts) can be configured and saved */
+#define ACCELS_FILENAME "accels.txt"
+
+/* Name in the geometry file */
+#define GEOMETRY_NAME "main-window"
+
+typedef struct {
+ EmpathyContactListView *list_view;
+ EmpathyContactListStore *list_store;
+ MissionControl *mc;
+ EmpathyChatroomManager *chatroom_manager;
+ gpointer token;
+
+ GtkWidget *window;
+ GtkWidget *main_vbox;
+ GtkWidget *throbber;
+ GtkWidget *presence_toolbar;
+ GtkWidget *presence_chooser;
+ GtkWidget *errors_vbox;
+
+ GtkWidget *room;
+ GtkWidget *room_menu;
+ GtkWidget *room_sep;
+ GtkWidget *room_join_favorites;
+ GtkWidget *edit_context;
+ GtkWidget *edit_context_separator;
+
+ guint size_timeout_id;
+ GHashTable *errors;
+
+ /* Widgets that are enabled when there is... */
+ GList *widgets_connected; /* ... connected accounts */
+ GList *widgets_disconnected; /* ... disconnected accounts */
+} EmpathyMainWindow;
+
+static void main_window_destroy_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_favorite_chatroom_menu_setup (EmpathyMainWindow *window);
+static void main_window_favorite_chatroom_menu_added_cb (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom,
+ EmpathyMainWindow *window);
+static void main_window_favorite_chatroom_menu_removed_cb (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom,
+ EmpathyMainWindow *window);
+static void main_window_favorite_chatroom_menu_activate_cb (GtkMenuItem *menu_item,
+ EmpathyChatroom *chatroom);
+static void main_window_favorite_chatroom_menu_update (EmpathyMainWindow *window);
+static void main_window_favorite_chatroom_menu_add (EmpathyMainWindow *window,
+ EmpathyChatroom *chatroom);
+static void main_window_favorite_chatroom_join (EmpathyChatroom *chatroom);
+static void main_window_chat_quit_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_chat_new_message_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_chat_history_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_room_join_new_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_room_join_favorites_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_room_manage_favorites_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_chat_add_contact_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_chat_show_offline_cb (GtkCheckMenuItem *item,
+ EmpathyMainWindow *window);
+static gboolean main_window_edit_button_press_event_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ EmpathyMainWindow *window);
+static void main_window_edit_accounts_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_edit_personal_information_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_edit_preferences_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_help_about_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static void main_window_help_contents_cb (GtkWidget *widget,
+ EmpathyMainWindow *window);
+static gboolean main_window_throbber_button_press_event_cb (GtkWidget *throbber_ebox,
+ GdkEventButton *event,
+ EmpathyMainWindow *window);
+static void main_window_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyMainWindow *window);
+static void main_window_update_status (EmpathyMainWindow *window);
+static void main_window_accels_load (void);
+static void main_window_accels_save (void);
+static void main_window_connection_items_setup (EmpathyMainWindow *window,
+ GladeXML *glade);
+static gboolean main_window_configure_event_timeout_cb (EmpathyMainWindow *window);
+static gboolean main_window_configure_event_cb (GtkWidget *widget,
+ GdkEventConfigure *event,
+ EmpathyMainWindow *window);
+static void main_window_notify_show_offline_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer check_menu_item);
+static void main_window_notify_show_avatars_cb (EmpathyConf *conf,
+ const gchar *key,
+ EmpathyMainWindow *window);
+static void main_window_notify_compact_contact_list_cb (EmpathyConf *conf,
+ const gchar *key,
+ EmpathyMainWindow *window);
+static void main_window_notify_sort_criterium_cb (EmpathyConf *conf,
+ const gchar *key,
+ EmpathyMainWindow *window);
+
+GtkWidget *
+empathy_main_window_show (void)
+{
+ static EmpathyMainWindow *window = NULL;
+ EmpathyContactList *list_iface;
+ GladeXML *glade;
+ EmpathyConf *conf;
+ GtkWidget *sw;
+ GtkWidget *show_offline_widget;
+ GtkWidget *ebox;
+ GtkToolItem *item;
+ gboolean show_offline;
+ gboolean show_avatars;
+ gboolean compact_contact_list;
+ gint x, y, w, h;
+ gchar *filename;
+
+ if (window) {
+ empathy_window_present (GTK_WINDOW (window->window), TRUE);
+ return window->window;
+ }
+
+ window = g_new0 (EmpathyMainWindow, 1);
+
+ /* Set up interface */
+ filename = empathy_file_lookup ("empathy-main-window.glade", "src");
+ glade = empathy_glade_get_file (filename,
+ "main_window",
+ NULL,
+ "main_window", &window->window,
+ "main_vbox", &window->main_vbox,
+ "errors_vbox", &window->errors_vbox,
+ "chat_show_offline", &show_offline_widget,
+ "room", &window->room,
+ "room_sep", &window->room_sep,
+ "room_join_favorites", &window->room_join_favorites,
+ "edit_context", &window->edit_context,
+ "edit_context_separator", &window->edit_context_separator,
+ "presence_toolbar", &window->presence_toolbar,
+ "roster_scrolledwindow", &sw,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ window,
+ "main_window", "destroy", main_window_destroy_cb,
+ "main_window", "configure_event", main_window_configure_event_cb,
+ "chat_quit", "activate", main_window_chat_quit_cb,
+ "chat_new_message", "activate", main_window_chat_new_message_cb,
+ "chat_history", "activate", main_window_chat_history_cb,
+ "room_join_new", "activate", main_window_room_join_new_cb,
+ "room_join_favorites", "activate", main_window_room_join_favorites_cb,
+ "room_manage_favorites", "activate", main_window_room_manage_favorites_cb,
+ "chat_add_contact", "activate", main_window_chat_add_contact_cb,
+ "chat_show_offline", "toggled", main_window_chat_show_offline_cb,
+ "edit", "button-press-event", main_window_edit_button_press_event_cb,
+ "edit_accounts", "activate", main_window_edit_accounts_cb,
+ "edit_personal_information", "activate", main_window_edit_personal_information_cb,
+ "edit_preferences", "activate", main_window_edit_preferences_cb,
+ "help_about", "activate", main_window_help_about_cb,
+ "help_contents", "activate", main_window_help_contents_cb,
+ NULL);
+
+ /* Set up connection related widgets. */
+ main_window_connection_items_setup (window, glade);
+ g_object_unref (glade);
+
+ window->mc = empathy_mission_control_new ();
+ window->token = empathy_connect_to_account_status_changed (window->mc,
+ G_CALLBACK (main_window_status_changed_cb),
+ window, NULL);
+
+ window->errors = g_hash_table_new_full (empathy_account_hash,
+ empathy_account_equal,
+ g_object_unref,
+ NULL);
+
+ /* Set up menu */
+ main_window_favorite_chatroom_menu_setup (window);
+
+ gtk_widget_hide (window->edit_context);
+ gtk_widget_hide (window->edit_context_separator);
+
+ /* Set up presence chooser */
+ window->presence_chooser = empathy_presence_chooser_new ();
+ gtk_widget_show (window->presence_chooser);
+ item = gtk_tool_item_new ();
+ gtk_widget_show (GTK_WIDGET (item));
+ gtk_container_add (GTK_CONTAINER (item), window->presence_chooser);
+ gtk_tool_item_set_is_important (item, TRUE);
+ gtk_tool_item_set_expand (item, TRUE);
+ gtk_toolbar_insert (GTK_TOOLBAR (window->presence_toolbar), item, -1);
+
+ /* Set up the throbber */
+ ebox = gtk_event_box_new ();
+ gtk_event_box_set_visible_window (GTK_EVENT_BOX (ebox), FALSE);
+ gtk_widget_set_tooltip_text (ebox, _("Show and edit accounts"));
+ g_signal_connect (ebox,
+ "button-press-event",
+ G_CALLBACK (main_window_throbber_button_press_event_cb),
+ window);
+ gtk_widget_show (ebox);
+
+ window->throbber = ephy_spinner_new ();
+ ephy_spinner_set_size (EPHY_SPINNER (window->throbber), GTK_ICON_SIZE_LARGE_TOOLBAR);
+ gtk_container_add (GTK_CONTAINER (ebox), window->throbber);
+ gtk_widget_show (window->throbber);
+
+ item = gtk_tool_item_new ();
+ gtk_container_add (GTK_CONTAINER (item), ebox);
+ gtk_toolbar_insert (GTK_TOOLBAR (window->presence_toolbar), item, -1);
+ gtk_widget_show (GTK_WIDGET (item));
+
+ /* Set up contact list. */
+ empathy_status_presets_get_all ();
+
+ list_iface = EMPATHY_CONTACT_LIST (empathy_contact_manager_new ());
+ window->list_store = empathy_contact_list_store_new (list_iface);
+ window->list_view = empathy_contact_list_view_new (window->list_store,
+ EMPATHY_CONTACT_LIST_FEATURE_ALL,
+ EMPATHY_CONTACT_FEATURE_ALL);
+ g_object_unref (list_iface);
+
+ gtk_widget_show (GTK_WIDGET (window->list_view));
+ gtk_container_add (GTK_CONTAINER (sw),
+ GTK_WIDGET (window->list_view));
+
+ /* Load user-defined accelerators. */
+ main_window_accels_load ();
+
+ /* Set window size. */
+ empathy_geometry_load (GEOMETRY_NAME, &x, &y, &w, &h);
+
+ if (w >= 1 && h >= 1) {
+ /* Use the defaults from the glade file if we
+ * don't have good w, h geometry.
+ */
+ DEBUG ("Configuring window default size w:%d, h:%d", w, h);
+ gtk_window_set_default_size (GTK_WINDOW (window->window), w, h);
+ }
+
+ if (x >= 0 && y >= 0) {
+ /* Let the window manager position it if we
+ * don't have good x, y coordinates.
+ */
+ DEBUG ("Configuring window default position x:%d, y:%d", x, y);
+ gtk_window_move (GTK_WINDOW (window->window), x, y);
+ }
+
+ conf = empathy_conf_get ();
+
+ /* Show offline ? */
+ empathy_conf_get_bool (conf,
+ EMPATHY_PREFS_CONTACTS_SHOW_OFFLINE,
+ &show_offline);
+ empathy_conf_notify_add (conf,
+ EMPATHY_PREFS_CONTACTS_SHOW_OFFLINE,
+ main_window_notify_show_offline_cb,
+ show_offline_widget);
+
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (show_offline_widget),
+ show_offline);
+
+ /* Show avatars ? */
+ empathy_conf_get_bool (conf,
+ EMPATHY_PREFS_UI_SHOW_AVATARS,
+ &show_avatars);
+ empathy_conf_notify_add (conf,
+ EMPATHY_PREFS_UI_SHOW_AVATARS,
+ (EmpathyConfNotifyFunc) main_window_notify_show_avatars_cb,
+ window);
+ empathy_contact_list_store_set_show_avatars (window->list_store, show_avatars);
+
+ /* Is compact ? */
+ empathy_conf_get_bool (conf,
+ EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST,
+ &compact_contact_list);
+ empathy_conf_notify_add (conf,
+ EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST,
+ (EmpathyConfNotifyFunc) main_window_notify_compact_contact_list_cb,
+ window);
+ empathy_contact_list_store_set_is_compact (window->list_store, compact_contact_list);
+
+ /* Sort criterium */
+ empathy_conf_notify_add (conf,
+ EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM,
+ (EmpathyConfNotifyFunc) main_window_notify_sort_criterium_cb,
+ window);
+ main_window_notify_sort_criterium_cb (conf,
+ EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM,
+ window);
+
+ main_window_update_status (window);
+
+ return window->window;
+}
+
+static void
+main_window_destroy_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ /* Save user-defined accelerators. */
+ main_window_accels_save ();
+
+ empathy_disconnect_account_status_changed (window->token);
+
+ if (window->size_timeout_id) {
+ g_source_remove (window->size_timeout_id);
+ }
+
+ g_list_free (window->widgets_connected);
+ g_list_free (window->widgets_disconnected);
+
+ g_object_unref (window->mc);
+ g_object_unref (window->list_store);
+ g_hash_table_destroy (window->errors);
+
+ g_free (window);
+}
+
+static void
+main_window_favorite_chatroom_menu_setup (EmpathyMainWindow *window)
+{
+ GList *chatrooms, *l;
+
+ window->chatroom_manager = empathy_chatroom_manager_new ();
+ chatrooms = empathy_chatroom_manager_get_chatrooms (window->chatroom_manager, NULL);
+ window->room_menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (window->room));
+
+ for (l = chatrooms; l; l = l->next) {
+ main_window_favorite_chatroom_menu_add (window, l->data);
+ }
+
+ if (!chatrooms) {
+ gtk_widget_hide (window->room_sep);
+ }
+
+ gtk_widget_set_sensitive (window->room_join_favorites, chatrooms != NULL);
+
+ g_signal_connect (window->chatroom_manager, "chatroom-added",
+ G_CALLBACK (main_window_favorite_chatroom_menu_added_cb),
+ window);
+ g_signal_connect (window->chatroom_manager, "chatroom-removed",
+ G_CALLBACK (main_window_favorite_chatroom_menu_removed_cb),
+ window);
+
+ g_list_free (chatrooms);
+}
+
+static void
+main_window_favorite_chatroom_menu_added_cb (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom,
+ EmpathyMainWindow *window)
+{
+ main_window_favorite_chatroom_menu_add (window, chatroom);
+ gtk_widget_show (window->room_sep);
+ gtk_widget_set_sensitive (window->room_join_favorites, TRUE);
+}
+
+static void
+main_window_favorite_chatroom_menu_removed_cb (EmpathyChatroomManager *manager,
+ EmpathyChatroom *chatroom,
+ EmpathyMainWindow *window)
+{
+ GtkWidget *menu_item;
+
+ 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);
+
+ main_window_favorite_chatroom_menu_update (window);
+}
+
+static void
+main_window_favorite_chatroom_menu_activate_cb (GtkMenuItem *menu_item,
+ EmpathyChatroom *chatroom)
+{
+ main_window_favorite_chatroom_join (chatroom);
+}
+
+static void
+main_window_favorite_chatroom_menu_update (EmpathyMainWindow *window)
+{
+ GList *chatrooms;
+
+ chatrooms = empathy_chatroom_manager_get_chatrooms (window->chatroom_manager, NULL);
+
+ if (chatrooms) {
+ gtk_widget_show (window->room_sep);
+ } else {
+ gtk_widget_hide (window->room_sep);
+ }
+
+ gtk_widget_set_sensitive (window->room_join_favorites, chatrooms != NULL);
+ g_list_free (chatrooms);
+}
+
+static void
+main_window_favorite_chatroom_menu_add (EmpathyMainWindow *window,
+ EmpathyChatroom *chatroom)
+{
+ GtkWidget *menu_item;
+ const gchar *name;
+
+ if (g_object_get_data (G_OBJECT (chatroom), "menu_item")) {
+ return;
+ }
+
+ name = empathy_chatroom_get_name (chatroom);
+ menu_item = gtk_menu_item_new_with_label (name);
+
+ g_object_set_data (G_OBJECT (chatroom), "menu_item", menu_item);
+ g_signal_connect (menu_item, "activate",
+ G_CALLBACK (main_window_favorite_chatroom_menu_activate_cb),
+ chatroom);
+
+ gtk_menu_shell_insert (GTK_MENU_SHELL (window->room_menu),
+ menu_item, 3);
+
+ gtk_widget_show (menu_item);
+}
+
+static void
+main_window_favorite_chatroom_join (EmpathyChatroom *chatroom)
+{
+ MissionControl *mc;
+ McAccount *account;
+ const gchar *room;
+
+ mc = empathy_mission_control_new ();
+ account = empathy_chatroom_get_account (chatroom);
+ room = empathy_chatroom_get_room (chatroom);
+
+ DEBUG ("Requesting channel for '%s'", room);
+
+ mission_control_request_channel_with_string_handle (mc,
+ account,
+ TP_IFACE_CHANNEL_TYPE_TEXT,
+ room,
+ TP_HANDLE_TYPE_ROOM,
+ NULL, NULL);
+ g_object_unref (mc);
+}
+
+static void
+main_window_chat_quit_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ gtk_main_quit ();
+}
+
+static void
+main_window_chat_new_message_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ empathy_new_message_dialog_show (GTK_WINDOW (window->window));
+}
+
+static void
+main_window_chat_history_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ empathy_log_window_show (NULL, NULL, FALSE, GTK_WINDOW (window->window));
+}
+
+static void
+main_window_room_join_new_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ empathy_new_chatroom_dialog_show (GTK_WINDOW (window->window));
+}
+
+static void
+main_window_room_join_favorites_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ GList *chatrooms, *l;
+
+ chatrooms = empathy_chatroom_manager_get_chatrooms (window->chatroom_manager, NULL);
+ for (l = chatrooms; l; l = l->next) {
+ main_window_favorite_chatroom_join (l->data);
+ }
+ g_list_free (chatrooms);
+}
+
+static void
+main_window_room_manage_favorites_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ empathy_chatrooms_window_show (GTK_WINDOW (window->window));
+}
+
+static void
+main_window_chat_add_contact_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ empathy_new_contact_dialog_show (GTK_WINDOW (window->window));
+}
+
+static void
+main_window_chat_show_offline_cb (GtkCheckMenuItem *item,
+ EmpathyMainWindow *window)
+{
+ gboolean current;
+
+ current = gtk_check_menu_item_get_active (item);
+
+ empathy_conf_set_bool (empathy_conf_get (),
+ EMPATHY_PREFS_CONTACTS_SHOW_OFFLINE,
+ current);
+
+ /* Turn off sound just while we alter the contact list. */
+ // FIXME: empathy_sound_set_enabled (FALSE);
+ empathy_contact_list_store_set_show_offline (window->list_store, current);
+ //empathy_sound_set_enabled (TRUE);
+}
+
+static gboolean
+main_window_edit_button_press_event_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ EmpathyMainWindow *window)
+{
+ GtkWidget *submenu;
+
+ if (!event->button == 1) {
+ return FALSE;
+ }
+
+ submenu = empathy_contact_list_view_get_contact_menu (window->list_view);
+ if (submenu) {
+ GtkMenuItem *item;
+ GtkWidget *label;
+
+ item = GTK_MENU_ITEM (window->edit_context);
+ label = gtk_bin_get_child (GTK_BIN (item));
+ gtk_label_set_text (GTK_LABEL (label), _("Contact"));
+
+ gtk_widget_show (window->edit_context);
+ gtk_widget_show (window->edit_context_separator);
+
+ gtk_menu_item_set_submenu (item, submenu);
+
+ return FALSE;
+ }
+
+ submenu = empathy_contact_list_view_get_group_menu (window->list_view);
+ if (submenu) {
+ GtkMenuItem *item;
+ GtkWidget *label;
+
+ item = GTK_MENU_ITEM (window->edit_context);
+ label = gtk_bin_get_child (GTK_BIN (item));
+ gtk_label_set_text (GTK_LABEL (label), _("Group"));
+
+ gtk_widget_show (window->edit_context);
+ gtk_widget_show (window->edit_context_separator);
+
+ gtk_menu_item_set_submenu (item, submenu);
+
+ return FALSE;
+ }
+
+ gtk_widget_hide (window->edit_context);
+ gtk_widget_hide (window->edit_context_separator);
+
+ return FALSE;
+}
+
+static void
+main_window_edit_accounts_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ empathy_accounts_dialog_show (GTK_WINDOW (window->window));
+}
+
+static void
+main_window_edit_personal_information_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ GSList *accounts;
+
+ accounts = mission_control_get_online_connections (window->mc, NULL);
+ if (accounts) {
+ EmpathyContactFactory *factory;
+ EmpathyContact *contact;
+ McAccount *account;
+
+ account = accounts->data;
+ factory = empathy_contact_factory_new ();
+ contact = empathy_contact_factory_get_user (factory, account);
+ empathy_contact_run_until_ready (contact,
+ EMPATHY_CONTACT_READY_HANDLE |
+ EMPATHY_CONTACT_READY_ID,
+ NULL);
+
+ empathy_contact_information_dialog_show (contact,
+ GTK_WINDOW (window->window),
+ TRUE, TRUE);
+
+ g_slist_foreach (accounts, (GFunc) g_object_unref, NULL);
+ g_slist_free (accounts);
+ g_object_unref (factory);
+ g_object_unref (contact);
+ }
+}
+
+static void
+main_window_edit_preferences_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ empathy_preferences_show (GTK_WINDOW (window->window));
+}
+
+static void
+main_window_help_about_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ empathy_about_dialog_new (GTK_WINDOW (window->window));
+}
+
+static void
+main_window_help_contents_cb (GtkWidget *widget,
+ EmpathyMainWindow *window)
+{
+ empathy_url_show ("ghelp:empathy");
+}
+
+static gboolean
+main_window_throbber_button_press_event_cb (GtkWidget *throbber_ebox,
+ GdkEventButton *event,
+ EmpathyMainWindow *window)
+{
+ if (event->type != GDK_BUTTON_PRESS ||
+ event->button != 1) {
+ return FALSE;
+ }
+
+ empathy_accounts_dialog_show (GTK_WINDOW (window->window));
+
+ return FALSE;
+}
+
+static void
+main_window_error_edit_clicked_cb (GtkButton *button,
+ EmpathyMainWindow *window)
+{
+ McAccount *account;
+ GtkWidget *error_widget;
+
+ empathy_accounts_dialog_show (GTK_WINDOW (window->window));
+
+ account = g_object_get_data (G_OBJECT (button), "account");
+ error_widget = g_hash_table_lookup (window->errors, account);
+ gtk_widget_destroy (error_widget);
+ g_hash_table_remove (window->errors, account);
+}
+
+static void
+main_window_error_clear_clicked_cb (GtkButton *button,
+ EmpathyMainWindow *window)
+{
+ McAccount *account;
+ GtkWidget *error_widget;
+
+ account = g_object_get_data (G_OBJECT (button), "account");
+ error_widget = g_hash_table_lookup (window->errors, account);
+ gtk_widget_destroy (error_widget);
+ g_hash_table_remove (window->errors, account);
+}
+
+static void
+main_window_error_display (EmpathyMainWindow *window,
+ McAccount *account,
+ const gchar *message)
+{
+ GtkWidget *child;
+ GtkWidget *table;
+ GtkWidget *image;
+ GtkWidget *button_edit;
+ GtkWidget *alignment;
+ GtkWidget *hbox;
+ GtkWidget *label;
+ GtkWidget *fixed;
+ GtkWidget *vbox;
+ GtkWidget *button_close;
+ gchar *str;
+
+ child = g_hash_table_lookup (window->errors, account);
+ if (child) {
+ label = g_object_get_data (G_OBJECT (child), "label");
+
+ /* Just set the latest error and return */
+ str = g_markup_printf_escaped ("<b>%s</b>\n%s",
+ mc_account_get_display_name (account),
+ message);
+ gtk_label_set_markup (GTK_LABEL (label), str);
+ g_free (str);
+
+ return;
+ }
+
+ child = gtk_vbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (window->errors_vbox), child, FALSE, TRUE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (child), 6);
+ gtk_widget_show (child);
+
+ table = gtk_table_new (2, 4, FALSE);
+ gtk_widget_show (table);
+ gtk_box_pack_start (GTK_BOX (child), table, TRUE, TRUE, 0);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 12);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 6);
+
+ image = gtk_image_new_from_stock (GTK_STOCK_DISCONNECT, GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image);
+ gtk_table_attach (GTK_TABLE (table), image, 0, 1, 0, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 0, 0);
+ gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0);
+
+ button_edit = gtk_button_new ();
+ gtk_widget_show (button_edit);
+ gtk_table_attach (GTK_TABLE (table), button_edit, 1, 2, 1, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (0), 0, 0);
+
+ alignment = gtk_alignment_new (0.5, 0.5, 0, 0);
+ gtk_widget_show (alignment);
+ gtk_container_add (GTK_CONTAINER (button_edit), alignment);
+
+ hbox = gtk_hbox_new (FALSE, 2);
+ gtk_widget_show (hbox);
+ gtk_container_add (GTK_CONTAINER (alignment), hbox);
+
+ image = gtk_image_new_from_stock (GTK_STOCK_EDIT, GTK_ICON_SIZE_BUTTON);
+ gtk_widget_show (image);
+ gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
+
+ label = gtk_label_new_with_mnemonic (_("_Edit account"));
+ gtk_widget_show (label);
+ gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+
+ fixed = gtk_fixed_new ();
+ gtk_widget_show (fixed);
+ gtk_table_attach (GTK_TABLE (table), fixed, 2, 3, 1, 2,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+ vbox = gtk_vbox_new (FALSE, 6);
+ gtk_widget_show (vbox);
+ gtk_table_attach (GTK_TABLE (table), vbox, 3, 4, 0, 2,
+ (GtkAttachOptions) (GTK_FILL),
+ (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+ button_close = gtk_button_new ();
+ gtk_widget_show (button_close);
+ gtk_box_pack_start (GTK_BOX (vbox), button_close, FALSE, FALSE, 0);
+ gtk_button_set_relief (GTK_BUTTON (button_close), GTK_RELIEF_NONE);
+
+
+ image = gtk_image_new_from_stock ("gtk-close", GTK_ICON_SIZE_MENU);
+ gtk_widget_show (image);
+ gtk_container_add (GTK_CONTAINER (button_close), image);
+
+ label = gtk_label_new ("");
+ gtk_widget_show (label);
+ gtk_table_attach (GTK_TABLE (table), label, 1, 3, 0, 1,
+ (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL),
+ (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL), 0, 0);
+ gtk_widget_set_size_request (label, 175, -1);
+ gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+ gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
+ gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
+
+ str = g_markup_printf_escaped ("<b>%s</b>\n%s",
+ mc_account_get_display_name (account),
+ message);
+ gtk_label_set_markup (GTK_LABEL (label), str);
+ g_free (str);
+
+ g_object_set_data (G_OBJECT (child), "label", label);
+ g_object_set_data_full (G_OBJECT (button_edit),
+ "account", g_object_ref (account),
+ g_object_unref);
+ g_object_set_data_full (G_OBJECT (button_close),
+ "account", g_object_ref (account),
+ g_object_unref);
+
+ g_signal_connect (button_edit, "clicked",
+ G_CALLBACK (main_window_error_edit_clicked_cb),
+ window);
+
+ g_signal_connect (button_close, "clicked",
+ G_CALLBACK (main_window_error_clear_clicked_cb),
+ window);
+
+ gtk_widget_show (window->errors_vbox);
+
+ g_hash_table_insert (window->errors, g_object_ref (account), child);
+}
+
+static void
+main_window_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyMainWindow *window)
+{
+ McAccount *account;
+
+ main_window_update_status (window);
+
+ account = mc_account_lookup (unique_name);
+
+ if (status == TP_CONNECTION_STATUS_DISCONNECTED &&
+ reason > TP_CONNECTION_STATUS_REASON_REQUESTED) {
+ const gchar *message;
+
+ switch (reason) {
+ case TP_CONNECTION_STATUS_REASON_NETWORK_ERROR:
+ message = _("Network error");
+ break;
+ case TP_CONNECTION_STATUS_REASON_AUTHENTICATION_FAILED:
+ message = _("Authentication failed");
+ break;
+ case TP_CONNECTION_STATUS_REASON_ENCRYPTION_ERROR:
+ message = _("Encryption error");
+ break;
+ case TP_CONNECTION_STATUS_REASON_NAME_IN_USE:
+ message = _("Name in use");
+ break;
+ case TP_CONNECTION_STATUS_REASON_CERT_NOT_PROVIDED:
+ message = _("Certificate not provided");
+ break;
+ case TP_CONNECTION_STATUS_REASON_CERT_UNTRUSTED:
+ message = _("Certificate untrusted");
+ break;
+ case TP_CONNECTION_STATUS_REASON_CERT_EXPIRED:
+ message = _("Certificate expired");
+ break;
+ case TP_CONNECTION_STATUS_REASON_CERT_NOT_ACTIVATED:
+ message = _("Certificate not activated");
+ break;
+ case TP_CONNECTION_STATUS_REASON_CERT_HOSTNAME_MISMATCH:
+ message = _("Certificate hostname mismatch");
+ break;
+ case TP_CONNECTION_STATUS_REASON_CERT_FINGERPRINT_MISMATCH:
+ message = _("Certificate fingerprint mismatch");
+ break;
+ case TP_CONNECTION_STATUS_REASON_CERT_SELF_SIGNED:
+ message = _("Certificate self-signed");
+ break;
+ case TP_CONNECTION_STATUS_REASON_CERT_OTHER_ERROR:
+ message = _("Certificate error");
+ break;
+ default:
+ message = _("Unknown error");
+ break;
+ }
+
+ main_window_error_display (window, account, message);
+ }
+
+ if (status == TP_CONNECTION_STATUS_CONNECTED) {
+ GtkWidget *error_widget;
+
+ /* Account connected without error, remove error message if any */
+ error_widget = g_hash_table_lookup (window->errors, account);
+ if (error_widget) {
+ gtk_widget_destroy (error_widget);
+ g_hash_table_remove (window->errors, account);
+ }
+ }
+
+ g_object_unref (account);
+}
+
+static void
+main_window_update_status (EmpathyMainWindow *window)
+{
+ GList *accounts, *l;
+ guint connected = 0;
+ guint connecting = 0;
+ guint disconnected = 0;
+
+ /* Count number of connected/connecting/disconnected accounts */
+ accounts = mc_accounts_list ();
+ for (l = accounts; l; l = l->next) {
+ McAccount *account;
+ guint status;
+
+ account = l->data;
+
+ status = mission_control_get_connection_status (window->mc,
+ account,
+ NULL);
+
+ if (status == 0) {
+ connected++;
+ } else if (status == 1) {
+ connecting++;
+ } else if (status == 2) {
+ disconnected++;
+ }
+
+ g_object_unref (account);
+ }
+ g_list_free (accounts);
+
+ /* Update the spinner state */
+ if (connecting > 0) {
+ ephy_spinner_start (EPHY_SPINNER (window->throbber));
+ } else {
+ ephy_spinner_stop (EPHY_SPINNER (window->throbber));
+ }
+
+ /* Update widgets sensibility */
+ for (l = window->widgets_connected; l; l = l->next) {
+ gtk_widget_set_sensitive (l->data, (connected > 0));
+ }
+
+ for (l = window->widgets_disconnected; l; l = l->next) {
+ gtk_widget_set_sensitive (l->data, (disconnected > 0));
+ }
+}
+
+/*
+ * Accels
+ */
+static void
+main_window_accels_load (void)
+{
+ gchar *filename;
+
+ filename = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, ACCELS_FILENAME, NULL);
+ if (g_file_test (filename, G_FILE_TEST_EXISTS)) {
+ DEBUG ("Loading from:'%s'", filename);
+ gtk_accel_map_load (filename);
+ }
+
+ g_free (filename);
+}
+
+static void
+main_window_accels_save (void)
+{
+ gchar *dir;
+ gchar *file_with_path;
+
+ dir = g_build_filename (g_get_home_dir (), ".gnome2", PACKAGE_NAME, NULL);
+ g_mkdir_with_parents (dir, S_IRUSR | S_IWUSR | S_IXUSR);
+ file_with_path = g_build_filename (dir, ACCELS_FILENAME, NULL);
+ g_free (dir);
+
+ DEBUG ("Saving to:'%s'", file_with_path);
+ gtk_accel_map_save (file_with_path);
+
+ g_free (file_with_path);
+}
+
+static void
+main_window_connection_items_setup (EmpathyMainWindow *window,
+ GladeXML *glade)
+{
+ GList *list;
+ GtkWidget *w;
+ gint i;
+ const gchar *widgets_connected[] = {
+ "room",
+ "chat_new_message",
+ "chat_add_contact",
+ "edit_personal_information"
+ };
+ const gchar *widgets_disconnected[] = {
+ };
+
+ for (i = 0, list = NULL; i < G_N_ELEMENTS (widgets_connected); i++) {
+ w = glade_xml_get_widget (glade, widgets_connected[i]);
+ list = g_list_prepend (list, w);
+ }
+
+ window->widgets_connected = list;
+
+ for (i = 0, list = NULL; i < G_N_ELEMENTS (widgets_disconnected); i++) {
+ w = glade_xml_get_widget (glade, widgets_disconnected[i]);
+ list = g_list_prepend (list, w);
+ }
+
+ window->widgets_disconnected = list;
+}
+
+static gboolean
+main_window_configure_event_timeout_cb (EmpathyMainWindow *window)
+{
+ gint x, y, w, h;
+
+ gtk_window_get_size (GTK_WINDOW (window->window), &w, &h);
+ gtk_window_get_position (GTK_WINDOW (window->window), &x, &y);
+
+ empathy_geometry_save (GEOMETRY_NAME, x, y, w, h);
+
+ window->size_timeout_id = 0;
+
+ return FALSE;
+}
+
+static gboolean
+main_window_configure_event_cb (GtkWidget *widget,
+ GdkEventConfigure *event,
+ EmpathyMainWindow *window)
+{
+ if (window->size_timeout_id) {
+ g_source_remove (window->size_timeout_id);
+ }
+
+ window->size_timeout_id = g_timeout_add_seconds (1,
+ (GSourceFunc) main_window_configure_event_timeout_cb,
+ window);
+
+ return FALSE;
+}
+
+static void
+main_window_notify_show_offline_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer check_menu_item)
+{
+ gboolean show_offline;
+
+ if (empathy_conf_get_bool (conf, key, &show_offline)) {
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (check_menu_item),
+ show_offline);
+ }
+}
+
+static void
+main_window_notify_show_avatars_cb (EmpathyConf *conf,
+ const gchar *key,
+ EmpathyMainWindow *window)
+{
+ gboolean show_avatars;
+
+ if (empathy_conf_get_bool (conf, key, &show_avatars)) {
+ empathy_contact_list_store_set_show_avatars (window->list_store,
+ show_avatars);
+ }
+}
+
+static void
+main_window_notify_compact_contact_list_cb (EmpathyConf *conf,
+ const gchar *key,
+ EmpathyMainWindow *window)
+{
+ gboolean compact_contact_list;
+
+ if (empathy_conf_get_bool (conf, key, &compact_contact_list)) {
+ empathy_contact_list_store_set_is_compact (window->list_store,
+ compact_contact_list);
+ }
+}
+
+static void
+main_window_notify_sort_criterium_cb (EmpathyConf *conf,
+ const gchar *key,
+ EmpathyMainWindow *window)
+{
+ gchar *str = NULL;
+
+ if (empathy_conf_get_string (conf, key, &str) && str) {
+ GType type;
+ GEnumClass *enum_class;
+ GEnumValue *enum_value;
+
+ type = empathy_contact_list_store_sort_get_type ();
+ enum_class = G_ENUM_CLASS (g_type_class_peek (type));
+ enum_value = g_enum_get_value_by_nick (enum_class, str);
+ g_free (str);
+
+ if (enum_value) {
+ empathy_contact_list_store_set_sort_criterium (window->list_store,
+ enum_value->value);
+ }
+ }
+}
+
diff --git a/trunk/src/empathy-main-window.glade b/trunk/src/empathy-main-window.glade
new file mode 100644
index 000000000..437dcc043
--- /dev/null
+++ b/trunk/src/empathy-main-window.glade
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkWindow" id="main_window">
+ <property name="title" translatable="yes">Contact List</property>
+ <property name="default_width">225</property>
+ <property name="default_height">325</property>
+ <child>
+ <widget class="GtkVBox" id="main_vbox">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkMenuBar" id="menubar2">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkMenuItem" id="chat">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Chat</property>
+ <property name="use_underline">True</property>
+ <child>
+ <widget class="GtkMenu" id="chat_menu">
+ <child>
+ <widget class="GtkImageMenuItem" id="chat_new_message">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_New Conversation...</property>
+ <property name="use_underline">True</property>
+ <accelerator key="N" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image885">
+ <property name="visible">True</property>
+ <property name="icon_size">1</property>
+ <property name="icon_name">im-message-new</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="chat_history">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_View Previous Conversations</property>
+ <property name="use_underline">True</property>
+ <accelerator key="F3" modifiers="" signal="activate"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image886">
+ <property name="visible">True</property>
+ <property name="icon_size">1</property>
+ <property name="icon_name">document-open-recent</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separator5">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="chat_add_contact">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Add Contact...</property>
+ <property name="use_underline">True</property>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image887">
+ <property name="visible">True</property>
+ <property name="stock">gtk-add</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separator3">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkCheckMenuItem" id="chat_show_offline">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Show _Offline Contacts</property>
+ <property name="use_underline">True</property>
+ <accelerator key="H" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separator6">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="chat_quit">
+ <property name="visible">True</property>
+ <property name="label">gtk-quit</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="edit">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Edit</property>
+ <property name="use_underline">True</property>
+ <child>
+ <widget class="GtkMenu" id="edit_menu">
+ <child>
+ <widget class="GtkMenuItem" id="edit_context">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Context</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="edit_context_separator">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="edit_accounts">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Accounts</property>
+ <property name="use_underline">True</property>
+ <accelerator key="F4" modifiers="" signal="activate"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="edit_personal_information">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Personal Information</property>
+ <property name="use_underline">True</property>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image894">
+ <property name="visible">True</property>
+ <property name="icon_size">1</property>
+ <property name="icon_name">user-info</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="separator2">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="edit_preferences">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Preferences</property>
+ <property name="use_underline">True</property>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image891">
+ <property name="visible">True</property>
+ <property name="stock">gtk-preferences</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="room">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Room</property>
+ <property name="use_underline">True</property>
+ <child>
+ <widget class="GtkMenu" id="room_menu">
+ <child>
+ <widget class="GtkMenuItem" id="room_join_new">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Join _New...</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="room_join_favorites">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Join _Favorites</property>
+ <property name="use_underline">True</property>
+ <accelerator key="F5" modifiers="" signal="activate"/>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="room_sep">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="room_sep2">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="room_manage_favorites">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Manage Favorites</property>
+ <property name="use_underline">True</property>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image890">
+ <property name="visible">True</property>
+ <property name="icon_size">1</property>
+ <property name="icon_name">system-users</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="help">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Help</property>
+ <property name="use_underline">True</property>
+ <child>
+ <widget class="GtkMenu" id="help_menu">
+ <child>
+ <widget class="GtkImageMenuItem" id="help_contents">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Contents</property>
+ <property name="use_underline">True</property>
+ <accelerator key="F1" modifiers="" signal="activate"/>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image892">
+ <property name="visible">True</property>
+ <property name="stock">gtk-help</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="help_about">
+ <property name="visible">True</property>
+ <property name="label">gtk-about</property>
+ <property name="use_underline">True</property>
+ <property name="use_stock">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkToolbar" id="presence_toolbar">
+ <property name="visible">True</property>
+ <property name="toolbar_style">GTK_TOOLBAR_BOTH</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="errors_vbox">
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="roster_scrolledwindow">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/src/empathy-main-window.h b/trunk/src/empathy-main-window.h
new file mode 100644
index 000000000..916dd242f
--- /dev/null
+++ b/trunk/src/empathy-main-window.h
@@ -0,0 +1,35 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2002-2007 Imendio AB
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_MAIN_WINDOW_H__
+#define __EMPATHY_MAIN_WINDOW_H__
+
+#include <gtk/gtkwidget.h>
+
+G_BEGIN_DECLS
+
+GtkWidget *empathy_main_window_show (void);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_MAIN_WINDOW_H__ */
diff --git a/trunk/src/empathy-new-chatroom-dialog.c b/trunk/src/empathy-new-chatroom-dialog.c
new file mode 100644
index 000000000..6aac17ada
--- /dev/null
+++ b/trunk/src/empathy-new-chatroom-dialog.c
@@ -0,0 +1,574 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+#include <stdio.h>
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include <glib.h>
+#include <glib/gi18n.h>
+
+#include <libmissioncontrol/mission-control.h>
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mc-profile.h>
+
+#include <libempathy/empathy-tp-roomlist.h>
+#include <libempathy/empathy-chatroom.h>
+#include <libempathy/empathy-utils.h>
+
+#include <libempathy-gtk/empathy-account-chooser.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
+
+#include "empathy-new-chatroom-dialog.h"
+#include "ephy-spinner.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+typedef struct {
+ EmpathyTpRoomlist *room_list;
+
+ GtkWidget *window;
+ GtkWidget *vbox_widgets;
+ GtkWidget *table_info;
+ GtkWidget *label_account;
+ GtkWidget *account_chooser;
+ GtkWidget *label_server;
+ GtkWidget *entry_server;
+ GtkWidget *togglebutton_refresh;
+ GtkWidget *label_room;
+ GtkWidget *entry_room;
+ GtkWidget *vbox_browse;
+ GtkWidget *image_status;
+ GtkWidget *label_status;
+ GtkWidget *hbox_status;
+ GtkWidget *throbber;
+ GtkWidget *treeview;
+ GtkTreeModel *model;
+ GtkWidget *button_join;
+ GtkWidget *button_close;
+} EmpathyNewChatroomDialog;
+
+enum {
+ COL_NAME,
+ COL_ROOM,
+ COL_COUNT
+};
+
+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_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 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_togglebutton_refresh_toggled_cb (GtkWidget *widget,
+ EmpathyNewChatroomDialog *dialog);
+
+static EmpathyNewChatroomDialog *dialog_p = NULL;
+
+void
+empathy_new_chatroom_dialog_show (GtkWindow *parent)
+{
+ EmpathyNewChatroomDialog *dialog;
+ GladeXML *glade;
+ 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.glade", "src");
+ glade = empathy_glade_get_file (filename,
+ "new_chatroom_dialog",
+ NULL,
+ "new_chatroom_dialog", &dialog->window,
+ "table_info", &dialog->table_info,
+ "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,
+ "togglebutton_refresh", &dialog->togglebutton_refresh,
+ "vbox_browse", &dialog->vbox_browse,
+ "image_status", &dialog->image_status,
+ "label_status", &dialog->label_status,
+ "hbox_status", &dialog->hbox_status,
+ "treeview", &dialog->treeview,
+ "button_join", &dialog->button_join,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ 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_room", "changed", new_chatroom_dialog_entry_changed_cb,
+ "togglebutton_refresh", "toggled", new_chatroom_dialog_togglebutton_refresh_toggled_cb,
+ NULL);
+
+ g_object_unref (glade);
+
+ 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 = ephy_spinner_new ();
+ ephy_spinner_set_size (EPHY_SPINNER (dialog->throbber), GTK_ICON_SIZE_LARGE_TOOLBAR);
+ gtk_widget_show (dialog->throbber);
+
+ gtk_box_pack_start (GTK_BOX (dialog->hbox_status), dialog->throbber,
+ FALSE, FALSE, 0);
+
+ /* 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_is_connected,
+ NULL);
+ gtk_table_attach_defaults (GTK_TABLE (dialog->table_info),
+ dialog->account_chooser,
+ 1, 3, 0, 1);
+ gtk_widget_show (dialog->account_chooser);
+
+ 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);
+}
+
+static void
+new_chatroom_dialog_response_cb (GtkWidget *widget,
+ gint response,
+ EmpathyNewChatroomDialog *dialog)
+{
+ if (response == GTK_RESPONSE_OK) {
+ new_chatroom_dialog_join (dialog);
+ }
+
+ gtk_widget_destroy (widget);
+}
+
+static void
+new_chatroom_dialog_destroy_cb (GtkWidget *widget,
+ EmpathyNewChatroomDialog *dialog)
+{
+ if (dialog->room_list) {
+ g_object_unref (dialog->room_list);
+ }
+ g_object_unref (dialog->model);
+
+ g_free (dialog);
+}
+
+static void
+new_chatroom_dialog_model_setup (EmpathyNewChatroomDialog *dialog)
+{
+ 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, /* Image */
+ G_TYPE_STRING, /* Text */
+ G_TYPE_STRING); /* Room */
+
+ dialog->model = GTK_TREE_MODEL (store);
+ gtk_tree_view_set_model (view, dialog->model);
+
+ /* 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);
+}
+
+static void
+new_chatroom_dialog_model_add_columns (EmpathyNewChatroomDialog *dialog)
+{
+ GtkTreeView *view;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *cell;
+
+ view = GTK_TREE_VIEW (dialog->treeview);
+ gtk_tree_view_set_headers_visible (view, FALSE);
+
+ cell = gtk_cell_renderer_text_new ();
+ g_object_set (cell,
+ "xpad", (guint) 4,
+ "ypad", (guint) 1,
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ NULL);
+
+ column = gtk_tree_view_column_new_with_attributes (_("Chat Rooms"),
+ cell,
+ "text", COL_NAME,
+ NULL);
+
+ gtk_tree_view_column_set_expand (column, TRUE);
+ gtk_tree_view_append_column (view, column);
+}
+
+static void
+new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog)
+{
+ EmpathyAccountChooser *account_chooser;
+ McAccount *account;
+ McProfile *profile;
+ const gchar *protocol;
+ const gchar *room;
+
+ account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser);
+ account = empathy_account_chooser_get_account (account_chooser);
+ profile = mc_account_get_profile (account);
+ protocol = mc_profile_get_protocol_name (profile);
+
+ 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);
+ gtk_widget_show (dialog->vbox_browse);
+
+ }
+ else if (strcmp (protocol, "local-xmpp") == 0) {
+ gtk_widget_set_sensitive (dialog->entry_server, FALSE);
+ gtk_widget_show (dialog->vbox_browse);
+ }
+ else if (strcmp (protocol, "irc") == 0) {
+ gtk_widget_set_sensitive (dialog->entry_server, FALSE);
+ gtk_widget_show (dialog->vbox_browse);
+ } else {
+ gtk_widget_set_sensitive (dialog->entry_server, TRUE);
+ gtk_widget_show (dialog->vbox_browse);
+ }
+
+ room = gtk_entry_get_text (GTK_ENTRY (dialog->entry_room));
+ gtk_widget_set_sensitive (dialog->button_join, !G_STR_EMPTY (room));
+
+ /* Final set up of the dialog */
+ gtk_widget_grab_focus (dialog->entry_room);
+
+ g_object_unref (account);
+ g_object_unref (profile);
+}
+
+static void
+new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox,
+ EmpathyNewChatroomDialog *dialog)
+{
+ EmpathyAccountChooser *account_chooser;
+ McAccount *account;
+ gboolean listing = FALSE;
+
+ if (dialog->room_list) {
+ g_object_unref (dialog->room_list);
+ }
+
+ ephy_spinner_stop (EPHY_SPINNER (dialog->throbber));
+ new_chatroom_dialog_model_clear (dialog);
+
+ account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser);
+ account = empathy_account_chooser_get_account (account_chooser);
+ dialog->room_list = empathy_tp_roomlist_new (account);
+
+ 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::listing",
+ G_CALLBACK (new_chatroom_dialog_listing_cb),
+ dialog);
+
+ listing = empathy_tp_roomlist_is_listing (dialog->room_list);
+ if (listing) {
+ ephy_spinner_start (EPHY_SPINNER (dialog->throbber));
+ }
+ }
+
+ new_chatroom_dialog_update_widgets (dialog);
+}
+
+static void
+new_chatroom_dialog_roomlist_destroy_cb (EmpathyTpRoomlist *room_list,
+ EmpathyNewChatroomDialog *dialog)
+{
+ g_object_unref (dialog->room_list);
+ dialog->room_list = NULL;
+}
+
+static void
+new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list,
+ EmpathyChatroom *chatroom,
+ EmpathyNewChatroomDialog *dialog)
+{
+ GtkTreeView *view;
+ GtkTreeSelection *selection;
+ GtkListStore *store;
+ GtkTreeIter iter;
+
+ DEBUG ("New chatroom listed: %s (%s)",
+ empathy_chatroom_get_name (chatroom),
+ empathy_chatroom_get_room (chatroom));
+
+ /* Add to model */
+ view = GTK_TREE_VIEW (dialog->treeview);
+ selection = gtk_tree_view_get_selection (view);
+ store = GTK_LIST_STORE (dialog->model);
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_NAME, empathy_chatroom_get_name (chatroom),
+ COL_ROOM, empathy_chatroom_get_room (chatroom),
+ -1);
+}
+
+static void
+new_chatroom_dialog_listing_cb (EmpathyTpRoomlist *room_list,
+ gpointer unused,
+ EmpathyNewChatroomDialog *dialog)
+{
+ gboolean listing;
+
+ listing = empathy_tp_roomlist_is_listing (room_list);
+
+ /* Update the throbber */
+ if (listing) {
+ ephy_spinner_start (EPHY_SPINNER (dialog->throbber));
+ } else {
+ ephy_spinner_stop (EPHY_SPINNER (dialog->throbber));
+ }
+
+ /* Update the refresh toggle button */
+ g_signal_handlers_block_by_func (dialog->togglebutton_refresh,
+ new_chatroom_dialog_togglebutton_refresh_toggled_cb,
+ dialog);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->togglebutton_refresh),
+ listing);
+ g_signal_handlers_unblock_by_func (dialog->togglebutton_refresh,
+ new_chatroom_dialog_togglebutton_refresh_toggled_cb,
+ dialog);
+}
+
+static void
+new_chatroom_dialog_model_clear (EmpathyNewChatroomDialog *dialog)
+{
+ GtkListStore *store;
+
+ store = GTK_LIST_STORE (dialog->model);
+ gtk_list_store_clear (store);
+}
+
+static void
+new_chatroom_dialog_model_row_activated_cb (GtkTreeView *tree_view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ EmpathyNewChatroomDialog *dialog)
+{
+ gtk_widget_activate (dialog->button_join);
+}
+
+static void
+new_chatroom_dialog_model_selection_changed (GtkTreeSelection *selection,
+ EmpathyNewChatroomDialog *dialog)
+{
+ 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);
+}
+
+static void
+new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog)
+{
+ McAccount *account;
+ EmpathyAccountChooser *account_chooser;
+ MissionControl *mc;
+ const gchar *room;
+ const gchar *server = NULL;
+ gchar *room_name = NULL;
+
+ room = gtk_entry_get_text (GTK_ENTRY (dialog->entry_room));
+ server = gtk_entry_get_text (GTK_ENTRY (dialog->entry_server));
+
+ account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser);
+ account = empathy_account_chooser_get_account (account_chooser);
+
+ if (!G_STR_EMPTY (server)) {
+ room_name = g_strconcat (room, "@", server, NULL);
+ } else {
+ room_name = g_strdup (room);
+ }
+
+ DEBUG ("Requesting channel for '%s'", room_name);
+
+ mc = empathy_mission_control_new ();
+ mission_control_request_channel_with_string_handle (mc,
+ account,
+ TP_IFACE_CHANNEL_TYPE_TEXT,
+ room_name,
+ TP_HANDLE_TYPE_ROOM,
+ NULL, NULL);
+ g_free (room_name);
+ g_object_unref (mc);
+}
+
+static void
+new_chatroom_dialog_entry_changed_cb (GtkWidget *entry,
+ EmpathyNewChatroomDialog *dialog)
+{
+ if (entry == dialog->entry_room) {
+ const gchar *room;
+
+ room = gtk_entry_get_text (GTK_ENTRY (dialog->entry_room));
+ gtk_widget_set_sensitive (dialog->button_join, !G_STR_EMPTY (room));
+ /* FIXME: Select the room in the list */
+ }
+}
+
+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);
+ }
+}
+
+static void
+new_chatroom_dialog_browse_stop (EmpathyNewChatroomDialog *dialog)
+{
+ if (dialog->room_list) {
+ empathy_tp_roomlist_stop (dialog->room_list);
+ }
+}
+
+static void
+new_chatroom_dialog_entry_server_activate_cb (GtkWidget *widget,
+ EmpathyNewChatroomDialog *dialog)
+{
+ new_chatroom_dialog_togglebutton_refresh_toggled_cb (dialog->togglebutton_refresh,
+ dialog);
+}
+
+static void
+new_chatroom_dialog_togglebutton_refresh_toggled_cb (GtkWidget *widget,
+ EmpathyNewChatroomDialog *dialog)
+{
+ gboolean toggled;
+
+ toggled = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+
+ if (toggled) {
+ new_chatroom_dialog_browse_start (dialog);
+ } else {
+ new_chatroom_dialog_browse_stop (dialog);
+ }
+}
+
diff --git a/trunk/src/empathy-new-chatroom-dialog.glade b/trunk/src/empathy-new-chatroom-dialog.glade
new file mode 100644
index 000000000..4a4065701
--- /dev/null
+++ b/trunk/src/empathy-new-chatroom-dialog.glade
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkDialog" id="new_chatroom_dialog">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Join New</property>
+ <property name="resizable">False</property>
+ <property name="default_width">350</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox4">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkVBox" id="vbox_widgets">
+ <property name="visible">True</property>
+ <property name="border_width">5</property>
+ <property name="spacing">18</property>
+ <child>
+ <widget class="GtkTable" id="table_info">
+ <property name="visible">True</property>
+ <property name="n_rows">3</property>
+ <property name="n_columns">3</property>
+ <property name="column_spacing">6</property>
+ <property name="row_spacing">6</property>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_room">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" 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">32</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkToggleButton" id="togglebutton_refresh">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Re_fresh</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="left_attach">2</property>
+ <property name="right_attach">3</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="entry_server">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" 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>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_room">
+ <property name="visible">True</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>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_server">
+ <property name="visible">True</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>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_account">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Account:</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox_browse">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox_status">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox35">
+ <property name="visible">True</property>
+ <property name="spacing">3</property>
+ <child>
+ <widget class="GtkImage" id="image_status">
+ <property name="visible">True</property>
+ <property name="icon_size">2</property>
+ <property name="icon_name">gtk-find</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_status">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Browse:</property>
+ <property name="wrap">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow2">
+ <property name="height_request">150</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">This list represents all chat rooms hosted on the server you have entered.</property>
+ <property name="headers_visible">False</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area4">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button_cancel">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-7</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="button_join">
+ <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="response_id">-5</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment4">
+ <property name="visible">True</property>
+ <property name="xscale">0</property>
+ <property name="yscale">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox29">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkImage" id="image4">
+ <property name="visible">True</property>
+ <property name="stock">gtk-execute</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label79">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Join</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/src/empathy-new-chatroom-dialog.h b/trunk/src/empathy-new-chatroom-dialog.h
new file mode 100644
index 000000000..ae8b2385e
--- /dev/null
+++ b/trunk/src/empathy-new-chatroom-dialog.h
@@ -0,0 +1,34 @@
+/* -*- 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.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Martyn Russell <martyn@imendio.com>
+ * Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_NEW_CHATROOMS_WINDOW_H__
+#define __EMPATHY_NEW_CHATROOMS_WINDOW_H__
+
+G_BEGIN_DECLS
+
+void empathy_new_chatroom_dialog_show (GtkWindow *parent);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_NEW_CHATROOMS_WINDOW_H__ */
diff --git a/trunk/src/empathy-preferences.c b/trunk/src/empathy-preferences.c
new file mode 100644
index 000000000..865fdc82e
--- /dev/null
+++ b/trunk/src/empathy-preferences.c
@@ -0,0 +1,994 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include <gtk/gtk.h>
+#include <glade/glade.h>
+#include <glib/gi18n.h>
+
+#include <libempathy/empathy-utils.h>
+
+#include <libempathy-gtk/empathy-conf.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
+#include <libempathy-gtk/empathy-theme-manager.h>
+#include <libempathy-gtk/empathy-spell.h>
+#include <libempathy-gtk/empathy-contact-list-store.h>
+#include <libempathy-gtk/empathy-gtk-enum-types.h>
+
+#include "empathy-preferences.h"
+
+typedef struct {
+ GtkWidget *dialog;
+
+ GtkWidget *notebook;
+
+ GtkWidget *checkbutton_show_avatars;
+ GtkWidget *checkbutton_compact_contact_list;
+ GtkWidget *checkbutton_show_smileys;
+ GtkWidget *combobox_chat_theme;
+ GtkWidget *checkbutton_separate_chat_windows;
+ GtkWidget *checkbutton_autoconnect;
+ GtkWidget *radiobutton_contact_list_sort_by_name;
+ GtkWidget *radiobutton_contact_list_sort_by_state;
+
+ GtkWidget *checkbutton_sounds_for_messages;
+ GtkWidget *checkbutton_sounds_when_busy;
+ GtkWidget *checkbutton_sounds_when_away;
+ GtkWidget *checkbutton_popups_when_available;
+
+ GtkWidget *treeview_spell_checker;
+
+ GList *notify_ids;
+} EmpathyPreferences;
+
+static void preferences_setup_widgets (EmpathyPreferences *preferences);
+static void preferences_languages_setup (EmpathyPreferences *preferences);
+static void preferences_languages_add (EmpathyPreferences *preferences);
+static void preferences_languages_save (EmpathyPreferences *preferences);
+static gboolean preferences_languages_save_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gchar **languages);
+static void preferences_languages_load (EmpathyPreferences *preferences);
+static gboolean preferences_languages_load_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gchar **languages);
+static void preferences_languages_cell_toggled_cb (GtkCellRendererToggle *cell,
+ gchar *path_string,
+ EmpathyPreferences *preferences);
+static void preferences_themes_setup (EmpathyPreferences *preferences);
+static void preferences_widget_sync_bool (const gchar *key,
+ GtkWidget *widget);
+static void preferences_widget_sync_string (const gchar *key,
+ GtkWidget *widget);
+static void preferences_widget_sync_string_combo (const gchar *key,
+ GtkWidget *widget);
+static void preferences_notify_string_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data);
+static void preferences_notify_string_combo_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data);
+static void preferences_notify_bool_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data);
+static void preferences_notify_sensitivity_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data);
+static void preferences_hookup_toggle_button (EmpathyPreferences *preferences,
+ const gchar *key,
+ GtkWidget *widget);
+static void preferences_hookup_radio_button (EmpathyPreferences *preferences,
+ const gchar *key,
+ GtkWidget *widget);
+static void preferences_hookup_string_combo (EmpathyPreferences *preferences,
+ const gchar *key,
+ GtkWidget *widget);
+static void preferences_hookup_sensitivity (EmpathyPreferences *preferences,
+ const gchar *key,
+ GtkWidget *widget);
+static void preferences_toggle_button_toggled_cb (GtkWidget *button,
+ gpointer user_data);
+static void preferences_radio_button_toggled_cb (GtkWidget *button,
+ gpointer user_data);
+static void preferences_string_combo_changed_cb (GtkWidget *button,
+ gpointer user_data);
+static void preferences_destroy_cb (GtkWidget *widget,
+ EmpathyPreferences *preferences);
+static void preferences_response_cb (GtkWidget *widget,
+ gint response,
+ EmpathyPreferences *preferences);
+
+enum {
+ COL_LANG_ENABLED,
+ COL_LANG_CODE,
+ COL_LANG_NAME,
+ COL_LANG_COUNT
+};
+
+enum {
+ COL_COMBO_VISIBLE_NAME,
+ COL_COMBO_NAME,
+ COL_COMBO_COUNT
+};
+
+static void
+preferences_add_id (EmpathyPreferences *preferences, guint id)
+{
+ preferences->notify_ids = g_list_prepend (preferences->notify_ids,
+ GUINT_TO_POINTER (id));
+}
+
+static void
+preferences_compact_contact_list_changed_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ EmpathyPreferences *preferences = user_data;
+ gboolean value;
+
+ if (empathy_conf_get_bool (empathy_conf_get (), key, &value)) {
+ gtk_widget_set_sensitive (preferences->checkbutton_show_avatars,
+ !value);
+ }
+}
+
+static void
+preferences_setup_widgets (EmpathyPreferences *preferences)
+{
+ guint id;
+
+ preferences_hookup_toggle_button (preferences,
+ EMPATHY_PREFS_SOUNDS_FOR_MESSAGES,
+ preferences->checkbutton_sounds_for_messages);
+ preferences_hookup_toggle_button (preferences,
+ EMPATHY_PREFS_SOUNDS_WHEN_AWAY,
+ preferences->checkbutton_sounds_when_away);
+ preferences_hookup_toggle_button (preferences,
+ EMPATHY_PREFS_SOUNDS_WHEN_BUSY,
+ preferences->checkbutton_sounds_when_busy);
+ preferences_hookup_toggle_button (preferences,
+ EMPATHY_PREFS_POPUPS_WHEN_AVAILABLE,
+ preferences->checkbutton_popups_when_available);
+
+ preferences_hookup_sensitivity (preferences,
+ EMPATHY_PREFS_SOUNDS_FOR_MESSAGES,
+ preferences->checkbutton_sounds_when_away);
+ preferences_hookup_sensitivity (preferences,
+ EMPATHY_PREFS_SOUNDS_FOR_MESSAGES,
+ preferences->checkbutton_sounds_when_busy);
+
+ preferences_hookup_toggle_button (preferences,
+ EMPATHY_PREFS_UI_SEPARATE_CHAT_WINDOWS,
+ preferences->checkbutton_separate_chat_windows);
+
+ preferences_hookup_toggle_button (preferences,
+ EMPATHY_PREFS_UI_SHOW_AVATARS,
+ preferences->checkbutton_show_avatars);
+
+ preferences_hookup_toggle_button (preferences,
+ EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST,
+ preferences->checkbutton_compact_contact_list);
+
+ preferences_hookup_toggle_button (preferences,
+ EMPATHY_PREFS_CHAT_SHOW_SMILEYS,
+ preferences->checkbutton_show_smileys);
+
+ preferences_hookup_string_combo (preferences,
+ EMPATHY_PREFS_CHAT_THEME,
+ preferences->combobox_chat_theme);
+
+ preferences_hookup_radio_button (preferences,
+ EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM,
+ preferences->radiobutton_contact_list_sort_by_name);
+
+ preferences_hookup_toggle_button (preferences,
+ EMPATHY_PREFS_AUTOCONNECT,
+ preferences->checkbutton_autoconnect);
+
+ id = empathy_conf_notify_add (empathy_conf_get (),
+ EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST,
+ preferences_compact_contact_list_changed_cb,
+ preferences);
+ if (id) {
+ preferences_add_id (preferences, id);
+ }
+ preferences_compact_contact_list_changed_cb (empathy_conf_get (),
+ EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST,
+ preferences);
+}
+
+static void
+preferences_languages_setup (EmpathyPreferences *preferences)
+{
+ GtkTreeView *view;
+ GtkListStore *store;
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeViewColumn *column;
+ GtkCellRenderer *renderer;
+ guint col_offset;
+
+ view = GTK_TREE_VIEW (preferences->treeview_spell_checker);
+
+ store = gtk_list_store_new (COL_LANG_COUNT,
+ G_TYPE_BOOLEAN, /* enabled */
+ G_TYPE_STRING, /* code */
+ G_TYPE_STRING); /* name */
+
+ gtk_tree_view_set_model (view, GTK_TREE_MODEL (store));
+
+ selection = gtk_tree_view_get_selection (view);
+ gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+ model = GTK_TREE_MODEL (store);
+
+ renderer = gtk_cell_renderer_toggle_new ();
+ g_signal_connect (renderer, "toggled",
+ G_CALLBACK (preferences_languages_cell_toggled_cb),
+ preferences);
+
+ column = gtk_tree_view_column_new_with_attributes (NULL, renderer,
+ "active", COL_LANG_ENABLED,
+ NULL);
+
+ gtk_tree_view_append_column (view, column);
+
+ renderer = gtk_cell_renderer_text_new ();
+ col_offset = gtk_tree_view_insert_column_with_attributes (view,
+ -1, _("Language"),
+ renderer,
+ "text", COL_LANG_NAME,
+ NULL);
+
+ g_object_set_data (G_OBJECT (renderer),
+ "column", GINT_TO_POINTER (COL_LANG_NAME));
+
+ column = gtk_tree_view_get_column (view, col_offset - 1);
+ gtk_tree_view_column_set_sort_column_id (column, COL_LANG_NAME);
+ gtk_tree_view_column_set_resizable (column, FALSE);
+ gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column), TRUE);
+
+ g_object_unref (store);
+}
+
+static void
+preferences_languages_add (EmpathyPreferences *preferences)
+{
+ GtkTreeView *view;
+ GtkListStore *store;
+ GList *codes, *l;
+
+ view = GTK_TREE_VIEW (preferences->treeview_spell_checker);
+ store = GTK_LIST_STORE (gtk_tree_view_get_model (view));
+
+ codes = empathy_spell_get_language_codes ();
+
+ empathy_conf_set_bool (empathy_conf_get(),
+ EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED,
+ codes != NULL);
+ if (!codes) {
+ gtk_widget_set_sensitive (preferences->treeview_spell_checker, FALSE);
+ }
+
+ for (l = codes; l; l = l->next) {
+ GtkTreeIter iter;
+ const gchar *code;
+ const gchar *name;
+
+ code = l->data;
+ name = empathy_spell_get_language_name (code);
+ if (!name) {
+ continue;
+ }
+
+ gtk_list_store_append (store, &iter);
+ gtk_list_store_set (store, &iter,
+ COL_LANG_CODE, code,
+ COL_LANG_NAME, name,
+ -1);
+ }
+
+ empathy_spell_free_language_codes (codes);
+}
+
+static void
+preferences_languages_save (EmpathyPreferences *preferences)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+
+ gchar *languages = NULL;
+
+ view = GTK_TREE_VIEW (preferences->treeview_spell_checker);
+ model = gtk_tree_view_get_model (view);
+
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc) preferences_languages_save_foreach,
+ &languages);
+
+ /* if user selects no languages, we don't want spell check */
+ empathy_conf_set_bool (empathy_conf_get (),
+ EMPATHY_PREFS_CHAT_SPELL_CHECKER_ENABLED,
+ languages != NULL);
+
+ empathy_conf_set_string (empathy_conf_get (),
+ EMPATHY_PREFS_CHAT_SPELL_CHECKER_LANGUAGES,
+ languages ? languages : "");
+
+ g_free (languages);
+}
+
+static gboolean
+preferences_languages_save_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gchar **languages)
+{
+ gboolean enabled;
+ gchar *code;
+
+ if (!languages) {
+ return TRUE;
+ }
+
+ gtk_tree_model_get (model, iter, COL_LANG_ENABLED, &enabled, -1);
+ if (!enabled) {
+ return FALSE;
+ }
+
+ gtk_tree_model_get (model, iter, COL_LANG_CODE, &code, -1);
+ if (!code) {
+ return FALSE;
+ }
+
+ if (!(*languages)) {
+ *languages = g_strdup (code);
+ } else {
+ gchar *str = *languages;
+ *languages = g_strdup_printf ("%s,%s", str, code);
+ g_free (str);
+ }
+
+ g_free (code);
+
+ return FALSE;
+}
+
+static void
+preferences_languages_load (EmpathyPreferences *preferences)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ gchar *value;
+ gchar **vlanguages;
+
+ if (!empathy_conf_get_string (empathy_conf_get (),
+ EMPATHY_PREFS_CHAT_SPELL_CHECKER_LANGUAGES,
+ &value) || !value) {
+ return;
+ }
+
+ vlanguages = g_strsplit (value, ",", -1);
+ g_free (value);
+
+ view = GTK_TREE_VIEW (preferences->treeview_spell_checker);
+ model = gtk_tree_view_get_model (view);
+
+ gtk_tree_model_foreach (model,
+ (GtkTreeModelForeachFunc) preferences_languages_load_foreach,
+ vlanguages);
+
+ g_strfreev (vlanguages);
+}
+
+static gboolean
+preferences_languages_load_foreach (GtkTreeModel *model,
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gchar **languages)
+{
+ gchar *code;
+ gchar *lang;
+ gint i;
+ gboolean found = FALSE;
+
+ if (!languages) {
+ return TRUE;
+ }
+
+ gtk_tree_model_get (model, iter, COL_LANG_CODE, &code, -1);
+ if (!code) {
+ return FALSE;
+ }
+
+ for (i = 0, lang = languages[i]; lang; lang = languages[++i]) {
+ if (strcmp (lang, code) == 0) {
+ found = TRUE;
+ }
+ }
+
+ gtk_list_store_set (GTK_LIST_STORE (model), iter, COL_LANG_ENABLED, found, -1);
+ return FALSE;
+}
+
+static void
+preferences_languages_cell_toggled_cb (GtkCellRendererToggle *cell,
+ gchar *path_string,
+ EmpathyPreferences *preferences)
+{
+ GtkTreeView *view;
+ GtkTreeModel *model;
+ GtkListStore *store;
+ GtkTreePath *path;
+ GtkTreeIter iter;
+ gboolean enabled;
+
+ view = GTK_TREE_VIEW (preferences->treeview_spell_checker);
+ model = gtk_tree_view_get_model (view);
+ store = GTK_LIST_STORE (model);
+
+ path = gtk_tree_path_new_from_string (path_string);
+
+ gtk_tree_model_get_iter (model, &iter, path);
+ gtk_tree_model_get (model, &iter, COL_LANG_ENABLED, &enabled, -1);
+
+ enabled ^= 1;
+
+ gtk_list_store_set (store, &iter, COL_LANG_ENABLED, enabled, -1);
+ gtk_tree_path_free (path);
+
+ preferences_languages_save (preferences);
+}
+
+static void
+preferences_themes_setup (EmpathyPreferences *preferences)
+{
+ GtkComboBox *combo;
+ GtkListStore *model;
+ GtkTreeIter iter;
+ const gchar **themes;
+ gint i;
+
+ combo = GTK_COMBO_BOX (preferences->combobox_chat_theme);
+
+ model = gtk_list_store_new (COL_COMBO_COUNT,
+ G_TYPE_STRING,
+ G_TYPE_STRING);
+
+ themes = empathy_theme_manager_get_themes ();
+ for (i = 0; themes[i]; i += 2) {
+ gtk_list_store_append (model, &iter);
+ gtk_list_store_set (model, &iter,
+ COL_COMBO_VISIBLE_NAME, _(themes[i + 1]),
+ COL_COMBO_NAME, themes[i],
+ -1);
+ }
+
+ gtk_combo_box_set_model (combo, GTK_TREE_MODEL (model));
+ g_object_unref (model);
+}
+
+static void
+preferences_widget_sync_bool (const gchar *key, GtkWidget *widget)
+{
+ gboolean value;
+
+ if (empathy_conf_get_bool (empathy_conf_get (), key, &value)) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
+ }
+}
+
+static void
+preferences_widget_sync_string (const gchar *key, GtkWidget *widget)
+{
+ gchar *value;
+
+ if (empathy_conf_get_string (empathy_conf_get (), key, &value) && value) {
+ if (GTK_IS_ENTRY (widget)) {
+ gtk_entry_set_text (GTK_ENTRY (widget), value);
+ } else if (GTK_IS_RADIO_BUTTON (widget)) {
+ if (strcmp (key, EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM) == 0) {
+ GType type;
+ GEnumClass *enum_class;
+ GEnumValue *enum_value;
+ GSList *list;
+ GtkWidget *toggle_widget;
+
+ /* Get index from new string */
+ type = empathy_contact_list_store_sort_get_type ();
+ enum_class = G_ENUM_CLASS (g_type_class_peek (type));
+ enum_value = g_enum_get_value_by_nick (enum_class, value);
+
+ if (enum_value) {
+ list = gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget));
+ toggle_widget = g_slist_nth_data (list, enum_value->value);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle_widget), TRUE);
+ }
+ } else {
+ g_warning ("Unhandled key:'%s' just had string change", key);
+ }
+ }
+
+ g_free (value);
+ }
+}
+
+static void
+preferences_widget_sync_string_combo (const gchar *key, GtkWidget *widget)
+{
+ gchar *value;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gboolean found;
+
+ if (!empathy_conf_get_string (empathy_conf_get (), key, &value)) {
+ return;
+ }
+
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget));
+
+ found = FALSE;
+ if (value && gtk_tree_model_get_iter_first (model, &iter)) {
+ gchar *name;
+
+ do {
+ gtk_tree_model_get (model, &iter,
+ COL_COMBO_NAME, &name,
+ -1);
+
+ if (strcmp (name, value) == 0) {
+ found = TRUE;
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &iter);
+ break;
+ } else {
+ found = FALSE;
+ }
+
+ g_free (name);
+ } while (gtk_tree_model_iter_next (model, &iter));
+ }
+
+ /* Fallback to the first one. */
+ if (!found) {
+ if (gtk_tree_model_get_iter_first (model, &iter)) {
+ gtk_combo_box_set_active_iter (GTK_COMBO_BOX (widget), &iter);
+ }
+ }
+
+ g_free (value);
+}
+
+static void
+preferences_notify_string_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ preferences_widget_sync_string (key, user_data);
+}
+
+static void
+preferences_notify_string_combo_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ preferences_widget_sync_string_combo (key, user_data);
+}
+
+static void
+preferences_notify_bool_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ preferences_widget_sync_bool (key, user_data);
+}
+
+static void
+preferences_notify_sensitivity_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ gboolean value;
+
+ if (empathy_conf_get_bool (conf, key, &value)) {
+ gtk_widget_set_sensitive (GTK_WIDGET (user_data), value);
+ }
+}
+
+#if 0
+static void
+preferences_widget_sync_int (const gchar *key, GtkWidget *widget)
+{
+ gint value;
+
+ if (empathy_conf_get_int (empathy_conf_get (), key, &value)) {
+ if (GTK_IS_SPIN_BUTTON (widget)) {
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (widget), value);
+ }
+ }
+}
+
+static void
+preferences_notify_int_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ preferences_widget_sync_int (key, user_data);
+}
+
+static void
+preferences_hookup_spin_button (EmpathyPreferences *preferences,
+ const gchar *key,
+ GtkWidget *widget)
+{
+ guint id;
+
+ preferences_widget_sync_int (key, widget);
+
+ g_object_set_data_full (G_OBJECT (widget), "key",
+ g_strdup (key), g_free);
+
+ g_signal_connect (widget,
+ "value_changed",
+ G_CALLBACK (preferences_spin_button_value_changed_cb),
+ NULL);
+
+ id = empathy_conf_notify_add (empathy_conf_get (),
+ key,
+ preferences_notify_int_cb,
+ widget);
+ if (id) {
+ preferences_add_id (preferences, id);
+ }
+}
+
+static void
+preferences_hookup_entry (EmpathyPreferences *preferences,
+ const gchar *key,
+ GtkWidget *widget)
+{
+ guint id;
+
+ preferences_widget_sync_string (key, widget);
+
+ g_object_set_data_full (G_OBJECT (widget), "key",
+ g_strdup (key), g_free);
+
+ g_signal_connect (widget,
+ "changed",
+ G_CALLBACK (preferences_entry_value_changed_cb),
+ NULL);
+
+ id = empathy_conf_notify_add (empathy_conf_get (),
+ key,
+ preferences_notify_string_cb,
+ widget);
+ if (id) {
+ preferences_add_id (preferences, id);
+ }
+}
+
+static void
+preferences_spin_button_value_changed_cb (GtkWidget *button,
+ gpointer user_data)
+{
+ const gchar *key;
+
+ key = g_object_get_data (G_OBJECT (button), "key");
+
+ empathy_conf_set_int (empathy_conf_get (),
+ key,
+ gtk_spin_button_get_value (GTK_SPIN_BUTTON (button)));
+}
+
+static void
+preferences_entry_value_changed_cb (GtkWidget *entry,
+ gpointer user_data)
+{
+ const gchar *key;
+
+ key = g_object_get_data (G_OBJECT (entry), "key");
+
+ empathy_conf_set_string (empathy_conf_get (),
+ key,
+ gtk_entry_get_text (GTK_ENTRY (entry)));
+}
+#endif
+
+static void
+preferences_hookup_toggle_button (EmpathyPreferences *preferences,
+ const gchar *key,
+ GtkWidget *widget)
+{
+ guint id;
+
+ preferences_widget_sync_bool (key, widget);
+
+ g_object_set_data_full (G_OBJECT (widget), "key",
+ g_strdup (key), g_free);
+
+ g_signal_connect (widget,
+ "toggled",
+ G_CALLBACK (preferences_toggle_button_toggled_cb),
+ NULL);
+
+ id = empathy_conf_notify_add (empathy_conf_get (),
+ key,
+ preferences_notify_bool_cb,
+ widget);
+ if (id) {
+ preferences_add_id (preferences, id);
+ }
+}
+
+static void
+preferences_hookup_radio_button (EmpathyPreferences *preferences,
+ const gchar *key,
+ GtkWidget *widget)
+{
+ GSList *group, *l;
+ guint id;
+
+ preferences_widget_sync_string (key, widget);
+
+ group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (widget));
+ for (l = group; l; l = l->next) {
+ g_signal_connect (l->data,
+ "toggled",
+ G_CALLBACK (preferences_radio_button_toggled_cb),
+ NULL);
+
+ g_object_set_data_full (G_OBJECT (l->data), "key",
+ g_strdup (key), g_free);
+ }
+
+ id = empathy_conf_notify_add (empathy_conf_get (),
+ key,
+ preferences_notify_string_cb,
+ widget);
+ if (id) {
+ preferences_add_id (preferences, id);
+ }
+}
+
+static void
+preferences_hookup_string_combo (EmpathyPreferences *preferences,
+ const gchar *key,
+ GtkWidget *widget)
+{
+ guint id;
+
+ preferences_widget_sync_string_combo (key, widget);
+
+ g_object_set_data_full (G_OBJECT (widget), "key",
+ g_strdup (key), g_free);
+
+ g_signal_connect (widget,
+ "changed",
+ G_CALLBACK (preferences_string_combo_changed_cb),
+ NULL);
+
+ id = empathy_conf_notify_add (empathy_conf_get (),
+ key,
+ preferences_notify_string_combo_cb,
+ widget);
+ if (id) {
+ preferences_add_id (preferences, id);
+ }
+}
+
+static void
+preferences_hookup_sensitivity (EmpathyPreferences *preferences,
+ const gchar *key,
+ GtkWidget *widget)
+{
+ gboolean value;
+ guint id;
+
+ if (empathy_conf_get_bool (empathy_conf_get (), key, &value)) {
+ gtk_widget_set_sensitive (widget, value);
+ }
+
+ id = empathy_conf_notify_add (empathy_conf_get (),
+ key,
+ preferences_notify_sensitivity_cb,
+ widget);
+ if (id) {
+ preferences_add_id (preferences, id);
+ }
+}
+
+static void
+preferences_toggle_button_toggled_cb (GtkWidget *button,
+ gpointer user_data)
+{
+ const gchar *key;
+
+ key = g_object_get_data (G_OBJECT (button), "key");
+
+ empathy_conf_set_bool (empathy_conf_get (),
+ key,
+ gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)));
+}
+
+static void
+preferences_radio_button_toggled_cb (GtkWidget *button,
+ gpointer user_data)
+{
+ const gchar *key;
+ const gchar *value = NULL;
+
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) {
+ return;
+ }
+
+ key = g_object_get_data (G_OBJECT (button), "key");
+
+ if (key && strcmp (key, EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM) == 0) {
+ GSList *group;
+ GType type;
+ GEnumClass *enum_class;
+ GEnumValue *enum_value;
+
+ group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button));
+
+ /* Get string from index */
+ type = empathy_contact_list_store_sort_get_type ();
+ enum_class = G_ENUM_CLASS (g_type_class_peek (type));
+ enum_value = g_enum_get_value (enum_class, g_slist_index (group, button));
+
+ if (!enum_value) {
+ g_warning ("No GEnumValue for EmpathyContactListSort with GtkRadioButton index:%d",
+ g_slist_index (group, button));
+ return;
+ }
+
+ value = enum_value->value_nick;
+ }
+
+ empathy_conf_set_string (empathy_conf_get (), key, value);
+}
+
+static void
+preferences_string_combo_changed_cb (GtkWidget *combo,
+ gpointer user_data)
+{
+ const gchar *key;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ gchar *name;
+
+ key = g_object_get_data (G_OBJECT (combo), "key");
+
+ if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter)) {
+ model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
+
+ gtk_tree_model_get (model, &iter,
+ COL_COMBO_NAME, &name,
+ -1);
+ empathy_conf_set_string (empathy_conf_get (), key, name);
+ g_free (name);
+ }
+}
+
+static void
+preferences_response_cb (GtkWidget *widget,
+ gint response,
+ EmpathyPreferences *preferences)
+{
+ gtk_widget_destroy (widget);
+}
+
+static void
+preferences_destroy_cb (GtkWidget *widget,
+ EmpathyPreferences *preferences)
+{
+ GList *l;
+
+ for (l = preferences->notify_ids; l; l = l->next) {
+ guint id;
+
+ id = GPOINTER_TO_UINT (l->data);
+ empathy_conf_notify_remove (empathy_conf_get (), id);
+ }
+
+ g_list_free (preferences->notify_ids);
+ g_free (preferences);
+}
+
+GtkWidget *
+empathy_preferences_show (GtkWindow *parent)
+{
+ static EmpathyPreferences *preferences;
+ GladeXML *glade;
+ gchar *filename;
+
+ if (preferences) {
+ gtk_window_present (GTK_WINDOW (preferences->dialog));
+ return preferences->dialog;
+ }
+
+ preferences = g_new0 (EmpathyPreferences, 1);
+
+ filename = empathy_file_lookup ("empathy-preferences.glade", "src");
+ glade = empathy_glade_get_file (filename,
+ "preferences_dialog",
+ NULL,
+ "preferences_dialog", &preferences->dialog,
+ "notebook", &preferences->notebook,
+ "checkbutton_show_avatars", &preferences->checkbutton_show_avatars,
+ "checkbutton_compact_contact_list", &preferences->checkbutton_compact_contact_list,
+ "checkbutton_show_smileys", &preferences->checkbutton_show_smileys,
+ "combobox_chat_theme", &preferences->combobox_chat_theme,
+ "checkbutton_separate_chat_windows", &preferences->checkbutton_separate_chat_windows,
+ "checkbutton_autoconnect", &preferences->checkbutton_autoconnect,
+ "radiobutton_contact_list_sort_by_name", &preferences->radiobutton_contact_list_sort_by_name,
+ "radiobutton_contact_list_sort_by_state", &preferences->radiobutton_contact_list_sort_by_state,
+ "checkbutton_sounds_for_messages", &preferences->checkbutton_sounds_for_messages,
+ "checkbutton_sounds_when_busy", &preferences->checkbutton_sounds_when_busy,
+ "checkbutton_sounds_when_away", &preferences->checkbutton_sounds_when_away,
+ "checkbutton_popups_when_available", &preferences->checkbutton_popups_when_available,
+ "treeview_spell_checker", &preferences->treeview_spell_checker,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ preferences,
+ "preferences_dialog", "destroy", preferences_destroy_cb,
+ "preferences_dialog", "response", preferences_response_cb,
+ NULL);
+
+ g_object_unref (glade);
+
+ g_object_add_weak_pointer (G_OBJECT (preferences->dialog), (gpointer) &preferences);
+
+ preferences_themes_setup (preferences);
+
+ preferences_setup_widgets (preferences);
+
+ preferences_languages_setup (preferences);
+ preferences_languages_add (preferences);
+ preferences_languages_load (preferences);
+
+ if (empathy_spell_supported ()) {
+ GtkWidget *page;
+
+ page = gtk_notebook_get_nth_page (GTK_NOTEBOOK (preferences->notebook), 2);
+ gtk_widget_show (page);
+ }
+
+ if (parent) {
+ gtk_window_set_transient_for (GTK_WINDOW (preferences->dialog),
+ GTK_WINDOW (parent));
+ }
+
+ gtk_widget_show (preferences->dialog);
+
+ return preferences->dialog;
+}
+
diff --git a/trunk/src/empathy-preferences.glade b/trunk/src/empathy-preferences.glade
new file mode 100644
index 000000000..11a3a2a7f
--- /dev/null
+++ b/trunk/src/empathy-preferences.glade
@@ -0,0 +1,604 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkDialog" id="preferences_dialog">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Preferences</property>
+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+ <property name="icon_name">gtk-preferences</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox5">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkNotebook" id="notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="border_width">5</property>
+ <child>
+ <widget class="GtkVBox" id="vbox197">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="spacing">18</property>
+ <child>
+ <widget class="GtkFrame" id="frame3">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment11">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox199">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_compact_contact_list">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Show co_mpact contact list</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_show_avatars">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tooltip" translatable="yes">Avatars are user chosen images shown in the contact list</property>
+ <property name="label" translatable="yes">Show _avatars</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_show_smileys">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Show _smileys as images</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label611">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Appearance&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame4">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment12">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox218">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_separate_chat_windows">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Open new chats in separate windows</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_autoconnect">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Automatically _connect on startup </property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label612">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Behaviour&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame13">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment31">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox217">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkRadioButton" id="radiobutton_contact_list_sort_by_name">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Sort by _name</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton" id="radiobutton_contact_list_sort_by_state">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Sort by s_tate</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ <property name="group">radiobutton_contact_list_sort_by_name</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label644">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Contact List&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label602">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">General</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="outer_vbox">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="spacing">18</property>
+ <child>
+ <widget class="GtkFrame" id="frame5">
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment13">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox106">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_sounds_for_messages">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">_Play sound when messages arrive</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_sounds_when_busy">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Enable sounds when _busy</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_sounds_when_away">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Enable sounds when _away</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label613">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Audio&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkFrame" id="frame6">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment14">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkCheckButton" id="checkbutton_popups_when_available">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Display notifications when contacts come _online</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label614">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Visual&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label607">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Notifications</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox168">
+ <property name="border_width">12</property>
+ <property name="spacing">18</property>
+ <child>
+ <widget class="GtkFrame" id="frame7">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment15">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox201">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox153">
+ <property name="visible">True</property>
+ <child>
+ <widget class="GtkHBox" id="hbox154">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkScrolledWindow" id="scrolledwindow18">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+ <property name="shadow_type">GTK_SHADOW_IN</property>
+ <child>
+ <widget class="GtkTreeView" id="treeview_spell_checker">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox155">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkImage" id="image422">
+ <property name="visible">True</property>
+ <property name="yalign">0</property>
+ <property name="stock">gtk-dialog-info</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label616">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">&lt;small&gt;The list of languages reflects only the languages for which you have a dictionary installed.&lt;/small&gt;</property>
+ <property name="use_markup">True</property>
+ <property name="wrap">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label615">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Enable spell checking for languages:&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label567">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Spell Checking</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">2</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox206">
+ <property name="visible">True</property>
+ <property name="border_width">12</property>
+ <property name="spacing">18</property>
+ <child>
+ <widget class="GtkFrame" id="frame11">
+ <property name="visible">True</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">GTK_SHADOW_NONE</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment19">
+ <property name="visible">True</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <widget class="GtkVBox" id="vbox207">
+ <property name="visible">True</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox139">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <widget class="GtkLabel" id="label586">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Chat Th_eme:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">combobox_chat_theme</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBox" id="combobox_chat_theme">
+ <property name="visible">True</property>
+ <property name="items" translatable="yes"></property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label626">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">&lt;b&gt;Appearance&lt;/b&gt;</property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label624">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Themes</property>
+ </widget>
+ <packing>
+ <property name="type">tab</property>
+ <property name="position">3</property>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area5">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button_close">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/src/empathy-preferences.h b/trunk/src/empathy-preferences.h
new file mode 100644
index 000000000..07ae6b523
--- /dev/null
+++ b/trunk/src/empathy-preferences.h
@@ -0,0 +1,38 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2003-2007 Imendio AB
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Mikael Hallendal <micke@imendio.com>
+ * Richard Hult <richard@imendio.com>
+ * Martyn Russell <martyn@imendio.com>
+ */
+
+#ifndef __EMPATHY_PREFERENCES_H__
+#define __EMPATHY_PREFERENCES_H__
+
+#include <gtk/gtkwindow.h>
+
+G_BEGIN_DECLS
+
+GtkWidget * empathy_preferences_show (GtkWindow *parent);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_PREFERENCES_H__ */
+
+
diff --git a/trunk/src/empathy-status-icon.c b/trunk/src/empathy-status-icon.c
new file mode 100644
index 000000000..9d8a8c8c2
--- /dev/null
+++ b/trunk/src/empathy-status-icon.c
@@ -0,0 +1,695 @@
+/* -*- 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 <gtk/gtk.h>
+#include <glade/glade.h>
+#include <glib/gi18n.h>
+
+#include <telepathy-glib/util.h>
+
+#include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-idle.h>
+#include <libempathy/empathy-contact-manager.h>
+#include <libempathy/empathy-dispatcher.h>
+#include <libempathy/empathy-tp-chat.h>
+#include <libempathy/empathy-tp-group.h>
+
+#include <libempathy-gtk/empathy-presence-chooser.h>
+#include <libempathy-gtk/empathy-conf.h>
+#include <libempathy-gtk/empathy-ui-utils.h>
+#include <libempathy-gtk/empathy-accounts-dialog.h>
+#include <libempathy-gtk/empathy-images.h>
+#include <libempathy-gtk/empathy-new-message-dialog.h>
+#include <libempathy-gtk/empathy-contact-dialogs.h>
+
+#include "empathy-status-icon.h"
+#include "empathy-preferences.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_DISPATCHER
+#include <libempathy/empathy-debug.h>
+
+/* Number of ms to wait when blinking */
+#define BLINK_TIMEOUT 500
+
+typedef struct _StatusIconEvent StatusIconEvent;
+
+#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyStatusIcon)
+typedef struct {
+ GtkStatusIcon *icon;
+ EmpathyIdle *idle;
+ MissionControl *mc;
+ EmpathyDispatcher *dispatcher;
+ EmpathyContactManager *contact_manager;
+ GSList *events;
+ gboolean showing_event_icon;
+ guint blink_timeout;
+ gpointer token;
+
+ GtkWindow *window;
+ GtkWidget *popup_menu;
+ GtkWidget *show_window_item;
+ GtkWidget *message_item;
+ GtkWidget *status_item;
+} EmpathyStatusIconPriv;
+
+typedef void (*StatusIconEventFunc) (EmpathyStatusIcon *icon,
+ gpointer user_data);
+
+struct _StatusIconEvent {
+ gchar *icon_name;
+ gchar *message;
+ StatusIconEventFunc func;
+ gpointer user_data;
+};
+
+G_DEFINE_TYPE (EmpathyStatusIcon, empathy_status_icon, G_TYPE_OBJECT);
+
+static void
+status_icon_event_free (StatusIconEvent *event)
+{
+ g_free (event->icon_name);
+ g_free (event->message);
+ g_slice_free (StatusIconEvent, event);
+}
+
+static void
+status_icon_set_visibility (EmpathyStatusIcon *icon,
+ gboolean visible,
+ gboolean store)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+
+ if (store) {
+ empathy_conf_set_bool (empathy_conf_get (),
+ EMPATHY_PREFS_UI_MAIN_WINDOW_HIDDEN, !visible);
+ }
+
+ if (!visible) {
+ empathy_window_iconify (priv->window, priv->icon);
+ } else {
+ GList *accounts;
+
+ empathy_window_present (GTK_WINDOW (priv->window), TRUE);
+
+ /* Show the accounts dialog if there is no enabled accounts */
+ accounts = mc_accounts_list_by_enabled (TRUE);
+ if (accounts) {
+ mc_accounts_list_free (accounts);
+ } else {
+ DEBUG ("No enabled account, Showing account dialog");
+ empathy_accounts_dialog_show (GTK_WINDOW (priv->window));
+ }
+ }
+}
+
+static void
+status_icon_notify_visibility_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ EmpathyStatusIcon *icon = user_data;
+ gboolean hidden = FALSE;
+
+ if (empathy_conf_get_bool (conf, key, &hidden)) {
+ status_icon_set_visibility (icon, !hidden, FALSE);
+ }
+}
+
+static void
+status_icon_toggle_visibility (EmpathyStatusIcon *icon)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+ gboolean visible;
+
+ visible = gtk_window_is_active (priv->window);
+ status_icon_set_visibility (icon, !visible, TRUE);
+}
+
+static void
+status_icon_update_tooltip (EmpathyStatusIcon *icon)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+ const gchar *tooltip = NULL;
+
+ if (priv->events) {
+ tooltip = ((StatusIconEvent*)priv->events->data)->message;
+ }
+
+ if (!tooltip) {
+ tooltip = empathy_idle_get_status (priv->idle);
+ }
+
+ gtk_status_icon_set_tooltip (priv->icon, tooltip);
+}
+
+static void
+status_icon_update_icon (EmpathyStatusIcon *icon)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+ const gchar *icon_name;
+
+ if (priv->events && priv->showing_event_icon) {
+ icon_name = ((StatusIconEvent*)priv->events->data)->icon_name;
+ } else {
+ McPresence state;
+
+ state = empathy_idle_get_state (priv->idle);
+ icon_name = empathy_icon_name_for_presence (state);
+ }
+
+ gtk_status_icon_set_from_icon_name (priv->icon, icon_name);
+}
+
+static void
+status_icon_idle_notify_cb (EmpathyStatusIcon *icon)
+{
+ status_icon_update_icon (icon);
+ status_icon_update_tooltip (icon);
+}
+
+static gboolean
+status_icon_delete_event_cb (GtkWidget *widget,
+ GdkEvent *event,
+ EmpathyStatusIcon *icon)
+{
+ status_icon_set_visibility (icon, FALSE, TRUE);
+ return TRUE;
+}
+
+static void
+status_icon_event_activate (EmpathyStatusIcon *icon,
+ StatusIconEvent *event)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+
+ if (event->func) {
+ event->func (icon, event->user_data);
+ }
+
+ priv->events = g_slist_remove (priv->events, event);
+ status_icon_event_free (event);
+ status_icon_update_tooltip (icon);
+ status_icon_update_icon (icon);
+
+ if (!priv->events && priv->blink_timeout) {
+ g_source_remove (priv->blink_timeout);
+ priv->blink_timeout = 0;
+ }
+}
+
+static void
+status_icon_activate_cb (GtkStatusIcon *status_icon,
+ EmpathyStatusIcon *icon)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+
+ DEBUG ("Activated: %s", priv->events ? "event" : "toggle");
+
+ if (priv->events) {
+ status_icon_event_activate (icon, priv->events->data);
+ } else {
+ status_icon_toggle_visibility (icon);
+ }
+}
+
+static void
+status_icon_show_hide_window_cb (GtkWidget *widget,
+ EmpathyStatusIcon *icon)
+{
+ gboolean visible;
+
+ visible = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (widget));
+ status_icon_set_visibility (icon, visible, TRUE);
+}
+
+static void
+status_icon_new_message_cb (GtkWidget *widget,
+ EmpathyStatusIcon *icon)
+{
+ empathy_new_message_dialog_show (NULL);
+}
+
+static void
+status_icon_quit_cb (GtkWidget *window,
+ EmpathyStatusIcon *icon)
+{
+ gtk_main_quit ();
+}
+
+static void
+status_icon_popup_menu_cb (GtkStatusIcon *status_icon,
+ guint button,
+ guint activate_time,
+ EmpathyStatusIcon *icon)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+ GtkWidget *submenu;
+ gboolean show;
+
+ show = empathy_window_get_is_visible (GTK_WINDOW (priv->window));
+
+ g_signal_handlers_block_by_func (priv->show_window_item,
+ status_icon_show_hide_window_cb,
+ icon);
+ gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (priv->show_window_item),
+ show);
+ g_signal_handlers_unblock_by_func (priv->show_window_item,
+ status_icon_show_hide_window_cb,
+ icon);
+
+ submenu = empathy_presence_chooser_create_menu ();
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (priv->status_item),
+ submenu);
+
+ gtk_menu_popup (GTK_MENU (priv->popup_menu),
+ NULL, NULL,
+ gtk_status_icon_position_menu,
+ priv->icon,
+ button,
+ activate_time);
+}
+
+static void
+status_icon_create_menu (EmpathyStatusIcon *icon)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+ GladeXML *glade;
+ gchar *filename;
+
+ filename = empathy_file_lookup ("empathy-status-icon.glade", "src");
+ glade = empathy_glade_get_file (filename,
+ "tray_menu",
+ NULL,
+ "tray_menu", &priv->popup_menu,
+ "tray_show_list", &priv->show_window_item,
+ "tray_new_message", &priv->message_item,
+ "tray_status", &priv->status_item,
+ NULL);
+ g_free (filename);
+
+ empathy_glade_connect (glade,
+ icon,
+ "tray_show_list", "toggled", status_icon_show_hide_window_cb,
+ "tray_new_message", "activate", status_icon_new_message_cb,
+ "tray_quit", "activate", status_icon_quit_cb,
+ NULL);
+
+ g_object_unref (glade);
+}
+
+static gboolean
+status_icon_blink_timeout_cb (EmpathyStatusIcon *icon)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+
+ priv->showing_event_icon = !priv->showing_event_icon;
+ status_icon_update_icon (icon);
+
+ return TRUE;
+}
+
+static void
+status_icon_event_add (EmpathyStatusIcon *icon,
+ const gchar *icon_name,
+ const gchar *message,
+ StatusIconEventFunc func,
+ gpointer user_data)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+ StatusIconEvent *event;
+ gboolean had_events;
+
+ DEBUG ("Adding event: %s", message);
+
+ event = g_slice_new (StatusIconEvent);
+ event->icon_name = g_strdup (icon_name);
+ event->message = g_strdup (message);
+ event->func = func;
+ event->user_data = user_data;
+
+ had_events = (priv->events != NULL);
+ priv->events = g_slist_append (priv->events, event);
+ if (!had_events) {
+ priv->showing_event_icon = TRUE;
+ status_icon_update_icon (icon);
+ status_icon_update_tooltip (icon);
+
+ if (!priv->blink_timeout) {
+ priv->blink_timeout = g_timeout_add (BLINK_TIMEOUT,
+ (GSourceFunc) status_icon_blink_timeout_cb,
+ icon);
+ }
+ }
+}
+
+static void
+status_icon_channel_process (EmpathyStatusIcon *icon,
+ gpointer user_data)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+ TpChannel *channel = TP_CHANNEL (user_data);
+
+ empathy_dispatcher_channel_process (priv->dispatcher, channel);
+ g_object_unref (channel);
+}
+
+static gboolean
+status_icon_chat_unref_idle (gpointer user_data)
+{
+ g_object_unref (user_data);
+ return FALSE;
+}
+
+static void
+status_icon_chat_message_received_cb (EmpathyTpChat *tp_chat,
+ EmpathyMessage *message,
+ EmpathyStatusIcon *icon)
+{
+ EmpathyContact *sender;
+ gchar *msg;
+ TpChannel *channel;
+
+ g_idle_add (status_icon_chat_unref_idle, tp_chat);
+ g_signal_handlers_disconnect_by_func (tp_chat,
+ status_icon_chat_message_received_cb,
+ icon);
+
+ sender = empathy_message_get_sender (message);
+ msg = g_strdup_printf (_("New message from %s:\n%s"),
+ empathy_contact_get_name (sender),
+ empathy_message_get_body (message));
+
+ channel = empathy_tp_chat_get_channel (tp_chat);
+ status_icon_event_add (icon, EMPATHY_IMAGE_NEW_MESSAGE, msg,
+ status_icon_channel_process,
+ g_object_ref (channel));
+
+ g_free (msg);
+}
+
+static void
+status_icon_filter_channel_cb (EmpathyDispatcher *dispatcher,
+ TpChannel *channel,
+ EmpathyStatusIcon *icon)
+{
+ gchar *channel_type;
+
+ g_object_get (channel, "channel-type", &channel_type, NULL);
+ if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_TEXT)) {
+ EmpathyTpChat *tp_chat;
+
+ tp_chat = empathy_tp_chat_new (channel);
+ g_signal_connect (tp_chat, "message-received",
+ G_CALLBACK (status_icon_chat_message_received_cb),
+ icon);
+ }
+ else if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA)) {
+ EmpathyTpGroup *tp_group;
+ EmpathyContact *contact;
+ gchar *msg;
+
+ tp_group = empathy_tp_group_new (channel);
+ empathy_run_until_ready (tp_group);
+ empathy_tp_group_get_invitation (tp_group, &contact);
+ empathy_contact_run_until_ready (contact,
+ EMPATHY_CONTACT_READY_NAME,
+ NULL);
+
+ msg = g_strdup_printf (_("Incoming call from %s"),
+ empathy_contact_get_name (contact));
+
+ status_icon_event_add (icon, EMPATHY_IMAGE_VOIP, msg,
+ status_icon_channel_process,
+ g_object_ref (channel));
+
+ g_free (msg);
+ g_object_unref (contact);
+ g_object_unref (tp_group);
+ }
+
+ g_free (channel_type);
+}
+
+static void
+status_icon_tube_process (EmpathyStatusIcon *icon,
+ gpointer user_data)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+ EmpathyDispatcherTube *tube = (EmpathyDispatcherTube*) user_data;
+
+ if (tube->activatable) {
+ empathy_dispatcher_tube_process (priv->dispatcher, tube);
+ } else {
+ GtkWidget *dialog;
+ gchar *str;
+
+ /* Tell the user that the tube can't be handled */
+ str = g_strdup_printf (_("%s offered you an invitation, but "
+ "you don't have the needed external "
+ "application to handle it."),
+ empathy_contact_get_name (tube->initiator));
+
+ dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK, str);
+ gtk_window_set_title (GTK_WINDOW (dialog),
+ _("Invitation Error"));
+ g_free (str);
+
+ gtk_widget_show (dialog);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (gtk_widget_destroy),
+ NULL);
+ }
+
+ empathy_dispatcher_tube_unref (tube);
+}
+
+static void
+status_icon_filter_tube_cb (EmpathyDispatcher *dispatcher,
+ EmpathyDispatcherTube *tube,
+ EmpathyStatusIcon *icon)
+{
+ const gchar *icon_name;
+ gchar *msg;
+
+ empathy_contact_run_until_ready (tube->initiator,
+ EMPATHY_CONTACT_READY_NAME, NULL);
+
+ if (tube->activatable) {
+ icon_name = GTK_STOCK_EXECUTE;
+ msg = g_strdup_printf (_("%s is offering you an invitation. An external "
+ "application will be started to handle it."),
+ empathy_contact_get_name (tube->initiator));
+ } else {
+ icon_name = GTK_STOCK_DIALOG_ERROR;
+ msg = g_strdup_printf (_("%s is offering you an invitation, but "
+ "you don't have the needed external "
+ "application to handle it."),
+ empathy_contact_get_name (tube->initiator));
+ }
+
+ status_icon_event_add (icon, icon_name, msg, status_icon_tube_process,
+ empathy_dispatcher_tube_ref (tube));
+
+ g_free (msg);
+}
+
+static void
+status_icon_pending_subscribe (EmpathyStatusIcon *icon,
+ gpointer user_data)
+{
+ EmpathyContact *contact = EMPATHY_CONTACT (user_data);
+
+ empathy_subscription_dialog_show (contact, NULL);
+ g_object_unref (contact);
+}
+
+static void
+status_icon_pendings_changed_cb (EmpathyContactList *list,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ gchar *message,
+ gboolean is_pending,
+ EmpathyStatusIcon *icon)
+{
+ GString *str;
+
+ if (!is_pending) {
+ /* FIXME: remove event if any */
+ return;
+ }
+
+ DEBUG ("New local pending contact");
+
+ empathy_contact_run_until_ready (contact,
+ EMPATHY_CONTACT_READY_NAME,
+ NULL);
+
+ str = g_string_new (NULL);
+ g_string_printf (str, _("Subscription requested by %s"),
+ empathy_contact_get_name (contact));
+ if (!G_STR_EMPTY (message)) {
+ g_string_append_printf (str, _("\nMessage: %s"), message);
+ }
+
+ status_icon_event_add (icon, GTK_STOCK_DIALOG_QUESTION, str->str,
+ status_icon_pending_subscribe,
+ g_object_ref (contact));
+
+ g_string_free (str, TRUE);
+}
+
+static void
+status_icon_finalize (GObject *object)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (object);
+
+ if (priv->blink_timeout) {
+ g_source_remove (priv->blink_timeout);
+ }
+
+ empathy_disconnect_account_status_changed (priv->token);
+ g_slist_foreach (priv->events, (GFunc) status_icon_event_free, NULL);
+ g_slist_free (priv->events);
+
+ g_object_unref (priv->icon);
+ g_object_unref (priv->idle);
+ g_object_unref (priv->mc);
+ g_object_unref (priv->contact_manager);
+}
+
+static void
+empathy_status_icon_class_init (EmpathyStatusIconClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = status_icon_finalize;
+
+ g_type_class_add_private (object_class, sizeof (EmpathyStatusIconPriv));
+}
+
+static void
+status_icon_status_changed_cb (MissionControl *mc,
+ TpConnectionStatus status,
+ McPresence presence,
+ TpConnectionStatusReason reason,
+ const gchar *unique_name,
+ EmpathyStatusIcon *icon)
+{
+ EmpathyStatusIconPriv *priv = GET_PRIV (icon);
+ GList *accounts, *l;
+ guint connection_status = 1;
+
+ /* Check for a connected account */
+ accounts = mc_accounts_list_by_enabled (TRUE);
+ for (l = accounts; l; l = l->next) {
+ connection_status = mission_control_get_connection_status (priv->mc,
+ l->data,
+ NULL);
+ if (connection_status == 0) {
+ break;
+ }
+ }
+ mc_accounts_list_free (accounts);
+
+ gtk_widget_set_sensitive (priv->message_item, connection_status == 0);
+}
+
+static void
+empathy_status_icon_init (EmpathyStatusIcon *icon)
+{
+ EmpathyStatusIconPriv *priv = G_TYPE_INSTANCE_GET_PRIVATE (icon,
+ EMPATHY_TYPE_STATUS_ICON, EmpathyStatusIconPriv);
+
+ icon->priv = priv;
+ priv->icon = gtk_status_icon_new ();
+ priv->mc = empathy_mission_control_new ();
+ priv->idle = empathy_idle_new ();
+ priv->dispatcher = empathy_dispatcher_new ();
+ priv->contact_manager = empathy_contact_manager_new ();
+ priv->token = empathy_connect_to_account_status_changed (priv->mc,
+ G_CALLBACK (status_icon_status_changed_cb),
+ icon, NULL);
+
+ /* make icon listen and respond to MAIN_WINDOW_HIDDEN changes */
+ empathy_conf_notify_add (empathy_conf_get (),
+ EMPATHY_PREFS_UI_MAIN_WINDOW_HIDDEN,
+ status_icon_notify_visibility_cb,
+ icon);
+
+ status_icon_create_menu (icon);
+ status_icon_idle_notify_cb (icon);
+
+ g_signal_connect_swapped (priv->idle, "notify",
+ G_CALLBACK (status_icon_idle_notify_cb),
+ icon);
+ g_signal_connect (priv->dispatcher, "filter-channel",
+ G_CALLBACK (status_icon_filter_channel_cb),
+ icon);
+ g_signal_connect (priv->dispatcher, "filter-tube",
+ G_CALLBACK (status_icon_filter_tube_cb),
+ icon);
+ g_signal_connect (priv->contact_manager, "pendings-changed",
+ G_CALLBACK (status_icon_pendings_changed_cb),
+ icon);
+ g_signal_connect (priv->icon, "activate",
+ G_CALLBACK (status_icon_activate_cb),
+ icon);
+ g_signal_connect (priv->icon, "popup-menu",
+ G_CALLBACK (status_icon_popup_menu_cb),
+ icon);
+}
+
+EmpathyStatusIcon *
+empathy_status_icon_new (GtkWindow *window)
+{
+ EmpathyStatusIconPriv *priv;
+ EmpathyStatusIcon *icon;
+ gboolean should_hide;
+
+ g_return_val_if_fail (GTK_IS_WINDOW (window), NULL);
+
+ icon = g_object_new (EMPATHY_TYPE_STATUS_ICON, NULL);
+ priv = GET_PRIV (icon);
+
+ priv->window = g_object_ref (window);
+
+ g_signal_connect (priv->window, "delete-event",
+ G_CALLBACK (status_icon_delete_event_cb),
+ icon);
+
+ empathy_conf_get_bool (empathy_conf_get (),
+ EMPATHY_PREFS_UI_MAIN_WINDOW_HIDDEN,
+ &should_hide);
+
+ if (gtk_window_is_active (priv->window) == should_hide) {
+ status_icon_set_visibility (icon, !should_hide, FALSE);
+ }
+
+ return icon;
+}
+
diff --git a/trunk/src/empathy-status-icon.glade b/trunk/src/empathy-status-icon.glade
new file mode 100644
index 000000000..ab0f09f84
--- /dev/null
+++ b/trunk/src/empathy-status-icon.glade
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
+<glade-interface>
+ <widget class="GtkMenu" id="tray_menu">
+ <child>
+ <widget class="GtkCheckMenuItem" id="tray_show_list">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Show Contact List</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="avskiljare5">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="tray_new_message">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_New Conversation...</property>
+ <property name="use_underline">True</property>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image599">
+ <property name="visible">True</property>
+ <property name="icon_size">1</property>
+ <property name="icon_name">im-message-new</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkMenuItem" id="tray_status">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">Status</property>
+ <property name="use_underline">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkSeparatorMenuItem" id="avskiljare6">
+ <property name="visible">True</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkImageMenuItem" id="tray_quit">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">_Quit</property>
+ <property name="use_underline">True</property>
+ <child internal-child="image">
+ <widget class="GtkImage" id="image600">
+ <property name="visible">True</property>
+ <property name="stock">gtk-quit</property>
+ <property name="icon_size">1</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ </widget>
+</glade-interface>
diff --git a/trunk/src/empathy-status-icon.h b/trunk/src/empathy-status-icon.h
new file mode 100644
index 000000000..bb33b1c3b
--- /dev/null
+++ b/trunk/src/empathy-status-icon.h
@@ -0,0 +1,53 @@
+/* -*- 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_STATUS_ICON_H__
+#define __EMPATHY_STATUS_ICON_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+#define EMPATHY_TYPE_STATUS_ICON (empathy_status_icon_get_type ())
+#define EMPATHY_STATUS_ICON(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EMPATHY_TYPE_STATUS_ICON, EmpathyStatusIcon))
+#define EMPATHY_STATUS_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EMPATHY_TYPE_STATUS_ICON, EmpathyStatusIconClass))
+#define EMPATHY_IS_STATUS_ICON(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EMPATHY_TYPE_STATUS_ICON))
+#define EMPATHY_IS_STATUS_ICON_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EMPATHY_TYPE_STATUS_ICON))
+#define EMPATHY_STATUS_ICON_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EMPATHY_TYPE_STATUS_ICON, EmpathyStatusIconClass))
+
+typedef struct _EmpathyStatusIcon EmpathyStatusIcon;
+typedef struct _EmpathyStatusIconClass EmpathyStatusIconClass;
+
+struct _EmpathyStatusIcon {
+ GObject parent;
+ gpointer priv;
+};
+
+struct _EmpathyStatusIconClass {
+ GObjectClass parent_class;
+};
+
+GType empathy_status_icon_get_type (void) G_GNUC_CONST;
+EmpathyStatusIcon *empathy_status_icon_new (GtkWindow *window);
+
+G_END_DECLS
+
+#endif /* __EMPATHY_STATUS_ICON_H__ */
diff --git a/trunk/src/empathy.1 b/trunk/src/empathy.1
new file mode 100644
index 000000000..bb191a0ac
--- /dev/null
+++ b/trunk/src/empathy.1
@@ -0,0 +1,24 @@
+.TH EMPATHY "1" "October 2007" "Telepathy project" "User Commands"
+.SH NAME
+empathy \- GNOME instant messaging client using Telepathy
+.SH SYNOPSIS
+empathy
+.SH DESCRIPTION
+Empathy consists of a rich set of reusable instant messaging widgets, and a
+GNOME client using those widgets.
+It uses Telepathy and Nokia's Mission Control, and reuses Gossip's UI.
+.PP
+The main user interface consists of a contact list window and an icon in the
+notification area.
+.SH OPTIONS
+There are no command-line options.
+.SH ENVIRONMENT
+.TP
+\fBEMPATHY_LOGFILE\fR=\fIfilename\fR
+If set, debug output will go to the given file rather than to stderr.
+.TP
+\fBEMPATHY_DEBUG\fR=\fItype\fR
+May be set to "all" for full debug output, or various undocumented options
+(which may change from release to release) to filter the output.
+.SH SEE ALSO
+\fIhttp://telepathy.freedesktop.org/\fR, \fIhttp://live.gnome.org/Empathy\fR
diff --git a/trunk/src/empathy.c b/trunk/src/empathy.c
new file mode 100644
index 000000000..242f946a1
--- /dev/null
+++ b/trunk/src/empathy.c
@@ -0,0 +1,479 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2007-2008 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., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <stdlib.h>
+#include <errno.h>
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+
+#include <libebook/e-book.h>
+
+#include <telepathy-glib/util.h>
+#include <libmissioncontrol/mc-account.h>
+#include <libmissioncontrol/mission-control.h>
+
+#include <libempathy/empathy-idle.h>
+#include <libempathy/empathy-utils.h>
+#include <libempathy/empathy-dispatcher.h>
+#include <libempathy/empathy-tp-chat.h>
+#include <libempathy/empathy-tp-call.h>
+
+#include <libempathy-gtk/empathy-conf.h>
+
+#include "empathy-main-window.h"
+#include "empathy-status-icon.h"
+#include "empathy-call-window.h"
+#include "empathy-chat-window.h"
+#include "bacon-message-connection.h"
+
+#define DEBUG_FLAG EMPATHY_DEBUG_OTHER
+#include <libempathy/empathy-debug.h>
+
+static BaconMessageConnection *connection = NULL;
+
+static void
+dispatch_channel_cb (EmpathyDispatcher *dispatcher,
+ TpChannel *channel,
+ gpointer user_data)
+{
+ gchar *channel_type;
+
+ g_object_get (channel, "channel-type", &channel_type, NULL);
+ if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_TEXT)) {
+ EmpathyTpChat *tp_chat;
+ EmpathyChat *chat = NULL;
+ const gchar *id;
+
+ tp_chat = empathy_tp_chat_new (channel);
+ empathy_run_until_ready (tp_chat);
+
+ id = empathy_tp_chat_get_id (tp_chat);
+ if (!id) {
+ EmpathyContact *contact;
+
+ contact = empathy_tp_chat_get_remote_contact (tp_chat);
+ if (contact) {
+ id = empathy_contact_get_id (contact);
+ }
+ }
+
+ if (id) {
+ McAccount *account;
+
+ account = empathy_tp_chat_get_account (tp_chat);
+ chat = empathy_chat_window_find_chat (account, id);
+ }
+
+ if (chat) {
+ empathy_chat_set_tp_chat (chat, tp_chat);
+ } else {
+ chat = empathy_chat_new (tp_chat);
+ }
+
+ empathy_chat_window_present_chat (chat);
+ g_object_unref (tp_chat);
+ }
+ else if (!tp_strdiff (channel_type, TP_IFACE_CHANNEL_TYPE_STREAMED_MEDIA)) {
+ EmpathyTpCall *tp_call;
+
+ tp_call = empathy_tp_call_new (channel);
+ empathy_call_window_new (tp_call);
+ g_object_unref (tp_call);
+ }
+}
+
+static void
+service_ended_cb (MissionControl *mc,
+ gpointer user_data)
+{
+ DEBUG ("Mission Control stopped");
+}
+
+static void
+operation_error_cb (MissionControl *mc,
+ guint operation_id,
+ guint error_code,
+ gpointer user_data)
+{
+ const gchar *message;
+
+ switch (error_code) {
+ case MC_DISCONNECTED_ERROR:
+ message = _("Disconnected");
+ break;
+ case MC_INVALID_HANDLE_ERROR:
+ message = _("Invalid handle");
+ break;
+ case MC_NO_MATCHING_CONNECTION_ERROR:
+ message = _("No matching connection");
+ break;
+ case MC_INVALID_ACCOUNT_ERROR:
+ message = _("Invalid account");
+ break;
+ case MC_PRESENCE_FAILURE_ERROR:
+ message = _("Presence failure");
+ break;
+ case MC_NO_ACCOUNTS_ERROR:
+ message = _("No accounts");
+ break;
+ case MC_NETWORK_ERROR:
+ message = _("Network error");
+ break;
+ case MC_CONTACT_DOES_NOT_SUPPORT_VOICE_ERROR:
+ message = _("Contact does not support voice");
+ break;
+ case MC_LOWMEM_ERROR:
+ message = _("Lowmem");
+ break;
+ case MC_CHANNEL_REQUEST_GENERIC_ERROR:
+ message = _("Channel request generic error");
+ break;
+ case MC_CHANNEL_BANNED_ERROR:
+ message = _("Channel banned");
+ break;
+ case MC_CHANNEL_FULL_ERROR:
+ message = _("Channel full");
+ break;
+ case MC_CHANNEL_INVITE_ONLY_ERROR:
+ message = _("Channel invite only");
+ break;
+ default:
+ message = _("Unknown error code");
+ }
+
+ DEBUG ("Error during operation %d: %s", operation_id, message);
+}
+
+static void
+use_nm_notify_cb (EmpathyConf *conf,
+ const gchar *key,
+ gpointer user_data)
+{
+ EmpathyIdle *idle = user_data;
+ gboolean use_nm;
+
+ if (empathy_conf_get_bool (conf, key, &use_nm)) {
+ empathy_idle_set_use_nm (idle, use_nm);
+ }
+}
+
+static void
+create_salut_account (void)
+{
+ McProfile *profile;
+ McProtocol *protocol;
+ gboolean salut_created = FALSE;
+ McAccount *account;
+ GList *accounts;
+ EBook *book;
+ EContact *contact;
+ gchar *nickname = NULL;
+ gchar *first_name = NULL;
+ gchar *last_name = NULL;
+ gchar *email = NULL;
+ gchar *jid = NULL;
+ GError *error = NULL;
+
+ /* Check if we already created a salut account */
+ empathy_conf_get_bool (empathy_conf_get(),
+ EMPATHY_PREFS_SALUT_ACCOUNT_CREATED,
+ &salut_created);
+ if (salut_created) {
+ return;
+ }
+
+ DEBUG ("Try to add a salut account...");
+
+ /* Check if the salut CM is installed */
+ profile = mc_profile_lookup ("salut");
+ protocol = mc_profile_get_protocol (profile);
+ if (!protocol) {
+ DEBUG ("Salut not installed");
+ g_object_unref (profile);
+ return;
+ }
+ g_object_unref (protocol);
+
+ /* Get self EContact from EDS */
+ if (!e_book_get_self (&contact, &book, &error)) {
+ DEBUG ("Failed to get self econtact: %s",
+ error ? error->message : "No error given");
+ g_clear_error (&error);
+ g_object_unref (profile);
+ return;
+ }
+
+ empathy_conf_set_bool (empathy_conf_get (),
+ EMPATHY_PREFS_SALUT_ACCOUNT_CREATED,
+ TRUE);
+
+ /* Check if there is already a salut account */
+ accounts = mc_accounts_list_by_profile (profile);
+ if (accounts) {
+ DEBUG ("There is already a salut account");
+ mc_accounts_list_free (accounts);
+ g_object_unref (profile);
+ return;
+ }
+
+ account = mc_account_create (profile);
+ mc_account_set_display_name (account, _("People nearby"));
+
+ nickname = e_contact_get (contact, E_CONTACT_NICKNAME);
+ first_name = e_contact_get (contact, E_CONTACT_GIVEN_NAME);
+ last_name = e_contact_get (contact, E_CONTACT_FAMILY_NAME);
+ email = e_contact_get (contact, E_CONTACT_EMAIL_1);
+ jid = e_contact_get (contact, E_CONTACT_IM_JABBER_HOME_1);
+
+ if (!tp_strdiff (nickname, "nickname")) {
+ g_free (nickname);
+ nickname = NULL;
+ }
+
+ DEBUG ("Salut account created:\nnickname=%s\nfirst-name=%s\n"
+ "last-name=%s\nemail=%s\njid=%s\n",
+ nickname, first_name, last_name, email, jid);
+
+ mc_account_set_param_string (account, "nickname", nickname ? nickname : "");
+ mc_account_set_param_string (account, "first-name", first_name ? first_name : "");
+ mc_account_set_param_string (account, "last-name", last_name ? last_name : "");
+ mc_account_set_param_string (account, "email", email ? email : "");
+ mc_account_set_param_string (account, "jid", jid ? jid : "");
+
+ g_free (nickname);
+ g_free (first_name);
+ g_free (last_name);
+ g_free (email);
+ g_free (jid);
+ g_object_unref (account);
+ g_object_unref (profile);
+ g_object_unref (contact);
+ g_object_unref (book);
+}
+
+/* The code that handles single-instance and startup notification is
+ * copied from gedit.
+ *
+ * Copyright (C) 2005 - Paolo Maggi
+ */
+static void
+on_bacon_message_received (const char *message,
+ gpointer data)
+{
+ GtkWidget *window = data;
+ guint32 startup_timestamp;
+
+ g_return_if_fail (message != NULL);
+
+ DEBUG ("Other instance launched, presenting the main window. message='%s'",
+ message);
+
+ startup_timestamp = atoi (message);
+
+ /* Set the proper interaction time on the window.
+ * Fall back to roundtripping to the X server when we
+ * don't have the timestamp, e.g. when launched from
+ * terminal. We also need to make sure that the window
+ * has been realized otherwise it will not work. lame. */
+ if (startup_timestamp == 0) {
+ /* Work if launched from the terminal */
+ DEBUG ("Using X server timestamp as a fallback");
+
+ if (!GTK_WIDGET_REALIZED (window)) {
+ gtk_widget_realize (GTK_WIDGET (window));
+ }
+
+ startup_timestamp = gdk_x11_get_server_time (window->window);
+ }
+
+ gtk_window_present_with_time (GTK_WINDOW (window), startup_timestamp);
+}
+
+static guint32
+get_startup_timestamp ()
+{
+ const gchar *startup_id_env;
+ gchar *startup_id = NULL;
+ gchar *time_str;
+ gchar *end;
+ gulong retval = 0;
+
+ /* we don't unset the env, since startup-notification
+ * may still need it */
+ startup_id_env = g_getenv ("DESKTOP_STARTUP_ID");
+ if (startup_id_env == NULL) {
+ goto out;
+ }
+
+ startup_id = g_strdup (startup_id_env);
+
+ time_str = g_strrstr (startup_id, "_TIME");
+ if (time_str == NULL) {
+ goto out;
+ }
+
+ errno = 0;
+
+ /* Skip past the "_TIME" part */
+ time_str += 5;
+
+ retval = strtoul (time_str, &end, 0);
+ if (end == time_str || errno != 0)
+ retval = 0;
+
+ out:
+ g_free (startup_id);
+
+ return (retval > 0) ? retval : 0;
+}
+
+int
+main (int argc, char *argv[])
+{
+ guint32 startup_timestamp;
+ EmpathyStatusIcon *icon;
+ EmpathyDispatcher *dispatcher;
+ GtkWidget *window;
+ MissionControl *mc;
+ EmpathyIdle *idle;
+ gboolean autoconnect = TRUE;
+ gboolean no_connect = FALSE;
+ GError *error = NULL;
+ GOptionEntry options[] = {
+ { "no-connect", 'n',
+ 0, G_OPTION_ARG_NONE, &no_connect,
+ N_("Don't connect on startup"),
+ NULL },
+ { NULL }
+ };
+
+ bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
+ startup_timestamp = get_startup_timestamp ();
+
+ if (!gtk_init_with_args (&argc, &argv,
+ _("- Empathy Instant Messenger"),
+ options, GETTEXT_PACKAGE, &error)) {
+ g_warning ("Error in gtk init: %s", error->message);
+ return EXIT_FAILURE;
+ }
+
+ if (g_getenv ("EMPATHY_TIMING") != NULL) {
+ g_log_set_default_handler (tp_debug_timestamped_log_handler, NULL);
+ }
+ empathy_debug_set_flags (g_getenv ("EMPATHY_DEBUG"));
+ tp_debug_divert_messages (g_getenv ("EMPATHY_LOGFILE"));
+
+ g_set_application_name (PACKAGE_NAME);
+
+ gtk_window_set_default_icon_name ("empathy");
+ gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
+ PKGDATADIR G_DIR_SEPARATOR_S "icons");
+
+ /* Setting up the bacon connection */
+ connection = bacon_message_connection_new ("empathy");
+ if (connection != NULL) {
+ if (!bacon_message_connection_get_is_server (connection)) {
+ gchar *message;
+
+ DEBUG ("Activating existing instance");
+
+ message = g_strdup_printf ("%" G_GUINT32_FORMAT,
+ startup_timestamp);
+ bacon_message_connection_send (connection, message);
+
+ /* We never popup a window, so tell startup-notification
+ * that we are done. */
+ gdk_notify_startup_complete ();
+
+ g_free (message);
+ bacon_message_connection_free (connection);
+
+ return EXIT_SUCCESS;
+ }
+ } else {
+ g_warning ("Cannot create the 'empathy' bacon connection.");
+ }
+
+ /* Setting up MC */
+ mc = empathy_mission_control_new ();
+ g_signal_connect (mc, "ServiceEnded",
+ G_CALLBACK (service_ended_cb),
+ NULL);
+ g_signal_connect (mc, "Error",
+ G_CALLBACK (operation_error_cb),
+ NULL);
+
+ /* Setting up Idle */
+ idle = empathy_idle_new ();
+ empathy_idle_set_auto_away (idle, TRUE);
+ use_nm_notify_cb (empathy_conf_get (), EMPATHY_PREFS_USE_NM, idle);
+ empathy_conf_notify_add (empathy_conf_get (), EMPATHY_PREFS_USE_NM,
+ use_nm_notify_cb, idle);
+
+ /* Autoconnect */
+ empathy_conf_get_bool (empathy_conf_get(),
+ EMPATHY_PREFS_AUTOCONNECT,
+ &autoconnect);
+ if (autoconnect && ! no_connect &&
+ empathy_idle_get_state (idle) <= MC_PRESENCE_OFFLINE) {
+ empathy_idle_set_state (idle, MC_PRESENCE_AVAILABLE);
+ }
+
+ create_salut_account ();
+
+ /* Setting up UI */
+ window = empathy_main_window_show ();
+ icon = empathy_status_icon_new (GTK_WINDOW (window));
+
+ if (connection) {
+ /* We se the callback here because we need window */
+ bacon_message_connection_set_callback (connection,
+ on_bacon_message_received,
+ window);
+ }
+
+ /* Handle channels */
+ dispatcher = empathy_dispatcher_new ();
+ g_signal_connect (dispatcher, "dispatch-channel",
+ G_CALLBACK (dispatch_channel_cb),
+ NULL);
+
+ gtk_main ();
+
+ empathy_idle_set_state (idle, MC_PRESENCE_OFFLINE);
+
+ g_object_unref (mc);
+ g_object_unref (idle);
+ g_object_unref (icon);
+ g_object_unref (dispatcher);
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/trunk/src/ephy-spinner.c b/trunk/src/ephy-spinner.c
new file mode 100644
index 000000000..b67b90f76
--- /dev/null
+++ b/trunk/src/ephy-spinner.c
@@ -0,0 +1,977 @@
+/*
+ * Copyright © 2000 Eazel, Inc.
+ * Copyright © 2002-2004 Marco Pesenti Gritti
+ * Copyright © 2004, 2006 Christian Persch
+ *
+ * Nautilus 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.
+ *
+ * Nautilus is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Andy Hertzfeld <andy@eazel.com>
+ *
+ * Ephy port by Marco Pesenti Gritti <marco@it.gnome.org>
+ *
+ * $Id: ephy-spinner.c 2114 2006-12-25 12:15:00Z mr $
+ */
+
+#include <config.h>
+
+#include "ephy-spinner.h"
+
+/* #include "ephy-debug.h" */
+#define LOG(msg, args...)
+#define START_PROFILER(name)
+#define STOP_PROFILER(name)
+
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <gtk/gtkicontheme.h>
+#include <gtk/gtkiconfactory.h>
+#include <gtk/gtksettings.h>
+
+/* Spinner cache implementation */
+
+#define EPHY_TYPE_SPINNER_CACHE (ephy_spinner_cache_get_type())
+#define EPHY_SPINNER_CACHE(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EPHY_TYPE_SPINNER_CACHE, EphySpinnerCache))
+#define EPHY_SPINNER_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EPHY_TYPE_SPINNER_CACHE, EphySpinnerCacheClass))
+#define EPHY_IS_SPINNER_CACHE(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EPHY_TYPE_SPINNER_CACHE))
+#define EPHY_IS_SPINNER_CACHE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EPHY_TYPE_SPINNER_CACHE))
+#define EPHY_SPINNER_CACHE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EPHY_TYPE_SPINNER_CACHE, EphySpinnerCacheClass))
+
+typedef struct _EphySpinnerCache EphySpinnerCache;
+typedef struct _EphySpinnerCacheClass EphySpinnerCacheClass;
+typedef struct _EphySpinnerCachePrivate EphySpinnerCachePrivate;
+
+struct _EphySpinnerCacheClass
+{
+ GObjectClass parent_class;
+};
+
+struct _EphySpinnerCache
+{
+ GObject parent_object;
+
+ /*< private >*/
+ EphySpinnerCachePrivate *priv;
+};
+
+#define EPHY_SPINNER_CACHE_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_SPINNER_CACHE, EphySpinnerCachePrivate))
+
+struct _EphySpinnerCachePrivate
+{
+ /* Hash table of GdkScreen -> EphySpinnerCacheData */
+ GHashTable *hash;
+};
+
+typedef struct
+{
+ guint ref_count;
+ GtkIconSize size;
+ int width;
+ int height;
+ GdkPixbuf **animation_pixbufs;
+ guint n_animation_pixbufs;
+} EphySpinnerImages;
+
+#define LAST_ICON_SIZE GTK_ICON_SIZE_DIALOG + 1
+#define SPINNER_ICON_NAME "process-working"
+#define SPINNER_FALLBACK_ICON_NAME "gnome-spinner"
+#define EPHY_SPINNER_IMAGES_INVALID ((EphySpinnerImages *) 0x1)
+
+typedef struct
+{
+ GdkScreen *screen;
+ GtkIconTheme *icon_theme;
+ EphySpinnerImages *images[LAST_ICON_SIZE];
+} EphySpinnerCacheData;
+
+static void ephy_spinner_cache_class_init (EphySpinnerCacheClass *klass);
+static void ephy_spinner_cache_init (EphySpinnerCache *cache);
+
+static GObjectClass *ephy_spinner_cache_parent_class;
+
+static GType
+ephy_spinner_cache_get_type (void)
+{
+ static GType type = 0;
+
+ if (G_UNLIKELY (type == 0))
+ {
+ const GTypeInfo our_info =
+ {
+ sizeof (EphySpinnerCacheClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) ephy_spinner_cache_class_init,
+ NULL,
+ NULL,
+ sizeof (EphySpinnerCache),
+ 0,
+ (GInstanceInitFunc) ephy_spinner_cache_init
+ };
+
+ type = g_type_register_static (G_TYPE_OBJECT,
+ "EphySpinnerCache",
+ &our_info, 0);
+ }
+
+ return type;
+}
+
+static EphySpinnerImages *
+ephy_spinner_images_ref (EphySpinnerImages *images)
+{
+ g_return_val_if_fail (images != NULL, NULL);
+
+ images->ref_count++;
+
+ return images;
+}
+
+static void
+ephy_spinner_images_unref (EphySpinnerImages *images)
+{
+ g_return_if_fail (images != NULL);
+
+ images->ref_count--;
+ if (images->ref_count == 0)
+ {
+ guint i;
+
+ LOG ("Freeing spinner images %p for size %d", images, images->size);
+
+ for (i = 0; i < images->n_animation_pixbufs; ++i)
+ {
+ g_object_unref (images->animation_pixbufs[i]);
+ }
+ g_free (images->animation_pixbufs);
+
+ g_free (images);
+ }
+}
+
+static void
+ephy_spinner_cache_data_unload (EphySpinnerCacheData *data)
+{
+ GtkIconSize size;
+ EphySpinnerImages *images;
+
+ g_return_if_fail (data != NULL);
+
+ LOG ("EphySpinnerDataCache unload for screen %p", data->screen);
+
+ for (size = GTK_ICON_SIZE_INVALID; size < LAST_ICON_SIZE; ++size)
+ {
+ images = data->images[size];
+ data->images[size] = NULL;
+
+ if (images != NULL && images != EPHY_SPINNER_IMAGES_INVALID)
+ {
+ ephy_spinner_images_unref (images);
+ }
+ }
+}
+
+static GdkPixbuf *
+extract_frame (GdkPixbuf *grid_pixbuf,
+ int x,
+ int y,
+ int size)
+{
+ GdkPixbuf *pixbuf;
+
+ if (x + size > gdk_pixbuf_get_width (grid_pixbuf) ||
+ y + size > gdk_pixbuf_get_height (grid_pixbuf))
+ {
+ return NULL;
+ }
+
+ pixbuf = gdk_pixbuf_new_subpixbuf (grid_pixbuf,
+ x, y,
+ size, size);
+ g_return_val_if_fail (pixbuf != NULL, NULL);
+
+ return pixbuf;
+}
+
+static GdkPixbuf *
+scale_to_size (GdkPixbuf *pixbuf,
+ int dw,
+ int dh)
+{
+ GdkPixbuf *result;
+ int pw, ph;
+
+ g_return_val_if_fail (pixbuf != NULL, NULL);
+
+ pw = gdk_pixbuf_get_width (pixbuf);
+ ph = gdk_pixbuf_get_height (pixbuf);
+
+ if (pw != dw || ph != dh)
+ {
+ result = gdk_pixbuf_scale_simple (pixbuf, dw, dh,
+ GDK_INTERP_BILINEAR);
+ g_object_unref (pixbuf);
+ return result;
+ }
+
+ return pixbuf;
+}
+
+static EphySpinnerImages *
+ephy_spinner_images_load (GdkScreen *screen,
+ GtkIconTheme *icon_theme,
+ GtkIconSize icon_size)
+{
+ EphySpinnerImages *images;
+ GdkPixbuf *icon_pixbuf, *pixbuf;
+ GtkIconInfo *icon_info = NULL;
+ int grid_width, grid_height, x, y, requested_size, size, isw, ish, n;
+ const char *icon;
+ GSList *list = NULL, *l;
+
+ LOG ("EphySpinnerCacheData loading for screen %p at size %d", screen, icon_size);
+
+ START_PROFILER ("loading spinner animation")
+
+ if (!gtk_icon_size_lookup_for_settings (gtk_settings_get_for_screen (screen),
+ icon_size, &isw, &ish)) goto loser;
+
+ requested_size = MAX (ish, isw);
+
+ /* Load the animation. The 'rest icon' is the 0th frame */
+ icon_info = gtk_icon_theme_lookup_icon (icon_theme,
+ SPINNER_ICON_NAME,
+ requested_size, 0);
+ if (icon_info == NULL)
+ {
+ g_warning ("Throbber animation not found");
+
+ /* If the icon naming spec compliant name wasn't found, try the old name */
+ icon_info = gtk_icon_theme_lookup_icon (icon_theme,
+ SPINNER_FALLBACK_ICON_NAME,
+ requested_size, 0);
+ if (icon_info == NULL)
+ {
+ g_warning ("Throbber fallback animation not found either");
+ goto loser;
+ }
+ }
+ g_assert (icon_info != NULL);
+
+ size = gtk_icon_info_get_base_size (icon_info);
+ icon = gtk_icon_info_get_filename (icon_info);
+ if (icon == NULL) goto loser;
+
+ icon_pixbuf = gdk_pixbuf_new_from_file (icon, NULL);
+ gtk_icon_info_free (icon_info);
+ icon_info = NULL;
+
+ if (icon_pixbuf == NULL)
+ {
+ g_warning ("Could not load the spinner file");
+ goto loser;
+ }
+
+ grid_width = gdk_pixbuf_get_width (icon_pixbuf);
+ grid_height = gdk_pixbuf_get_height (icon_pixbuf);
+
+ n = 0;
+ for (y = 0; y < grid_height; y += size)
+ {
+ for (x = 0; x < grid_width ; x += size)
+ {
+ pixbuf = extract_frame (icon_pixbuf, x, y, size);
+
+ if (pixbuf)
+ {
+ list = g_slist_prepend (list, pixbuf);
+ ++n;
+ }
+ else
+ {
+ g_warning ("Cannot extract frame (%d, %d) from the grid\n", x, y);
+ }
+ }
+ }
+
+ g_object_unref (icon_pixbuf);
+
+ if (list == NULL) goto loser;
+ g_assert (n > 0);
+
+ if (size > requested_size)
+ {
+ for (l = list; l != NULL; l = l->next)
+ {
+ l->data = scale_to_size (l->data, isw, ish);
+ }
+ }
+
+ /* Now we've successfully got all the data */
+ images = g_new (EphySpinnerImages, 1);
+ images->ref_count = 1;
+
+ images->size = icon_size;
+ images->width = images->height = requested_size;
+
+ images->n_animation_pixbufs = n;
+ images->animation_pixbufs = g_new (GdkPixbuf *, n);
+
+ for (l = list; l != NULL; l = l->next)
+ {
+ g_assert (l->data != NULL);
+ images->animation_pixbufs[--n] = l->data;
+ }
+ g_assert (n == 0);
+
+ g_slist_free (list);
+
+ STOP_PROFILER ("loading spinner animation")
+
+ return images;
+
+loser:
+ if (icon_info)
+ {
+ gtk_icon_info_free (icon_info);
+ }
+ g_slist_foreach (list, (GFunc) g_object_unref, NULL);
+
+ STOP_PROFILER ("loading spinner animation")
+
+ return NULL;
+}
+
+static EphySpinnerCacheData *
+ephy_spinner_cache_data_new (GdkScreen *screen)
+{
+ EphySpinnerCacheData *data;
+
+ data = g_new0 (EphySpinnerCacheData, 1);
+
+ data->screen = screen;
+ data->icon_theme = gtk_icon_theme_get_for_screen (screen);
+ g_signal_connect_swapped (data->icon_theme, "changed",
+ G_CALLBACK (ephy_spinner_cache_data_unload),
+ data);
+
+ return data;
+}
+
+static void
+ephy_spinner_cache_data_free (EphySpinnerCacheData *data)
+{
+ g_return_if_fail (data != NULL);
+ g_return_if_fail (data->icon_theme != NULL);
+
+ g_signal_handlers_disconnect_by_func
+ (data->icon_theme,
+ G_CALLBACK (ephy_spinner_cache_data_unload), data);
+
+ ephy_spinner_cache_data_unload (data);
+
+ g_free (data);
+}
+
+static EphySpinnerImages *
+ephy_spinner_cache_get_images (EphySpinnerCache *cache,
+ GdkScreen *screen,
+ GtkIconSize icon_size)
+{
+ EphySpinnerCachePrivate *priv = cache->priv;
+ EphySpinnerCacheData *data;
+ EphySpinnerImages *images;
+
+ LOG ("Getting animation images for screen %p at size %d", screen, icon_size);
+
+ g_return_val_if_fail (icon_size >= 0 && icon_size < LAST_ICON_SIZE, NULL);
+
+ /* Backward compat: "invalid" meant "native" size which doesn't exist anymore */
+ if (icon_size == GTK_ICON_SIZE_INVALID)
+ {
+ icon_size = GTK_ICON_SIZE_DIALOG;
+ }
+
+ data = g_hash_table_lookup (priv->hash, screen);
+ if (data == NULL)
+ {
+ data = ephy_spinner_cache_data_new (screen);
+ /* FIXME: think about what happens when the screen's display is closed later on */
+ g_hash_table_insert (priv->hash, screen, data);
+ }
+
+ images = data->images[icon_size];
+ if (images == EPHY_SPINNER_IMAGES_INVALID)
+ {
+ /* Load failed, but don't try endlessly again! */
+ return NULL;
+ }
+
+ if (images != NULL)
+ {
+ /* Return cached data */
+ return ephy_spinner_images_ref (images);
+ }
+
+ images = ephy_spinner_images_load (screen, data->icon_theme, icon_size);
+
+ if (images == NULL)
+ {
+ /* Mark as failed-to-load */
+ data->images[icon_size] = EPHY_SPINNER_IMAGES_INVALID;
+
+ return NULL;
+ }
+
+ data->images[icon_size] = images;
+
+ return ephy_spinner_images_ref (images);
+}
+
+static void
+ephy_spinner_cache_init (EphySpinnerCache *cache)
+{
+ EphySpinnerCachePrivate *priv;
+
+ priv = cache->priv = EPHY_SPINNER_CACHE_GET_PRIVATE (cache);
+
+ LOG ("EphySpinnerCache initialising");
+
+ priv->hash = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ NULL,
+ (GDestroyNotify) ephy_spinner_cache_data_free);
+}
+
+static void
+ephy_spinner_cache_finalize (GObject *object)
+{
+ EphySpinnerCache *cache = EPHY_SPINNER_CACHE (object);
+ EphySpinnerCachePrivate *priv = cache->priv;
+
+ g_hash_table_destroy (priv->hash);
+
+ LOG ("EphySpinnerCache finalised");
+
+ G_OBJECT_CLASS (ephy_spinner_cache_parent_class)->finalize (object);
+}
+
+static void
+ephy_spinner_cache_class_init (EphySpinnerCacheClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ ephy_spinner_cache_parent_class = g_type_class_peek_parent (klass);
+
+ object_class->finalize = ephy_spinner_cache_finalize;
+
+ g_type_class_add_private (object_class, sizeof (EphySpinnerCachePrivate));
+}
+
+static EphySpinnerCache *spinner_cache = NULL;
+
+static EphySpinnerCache *
+ephy_spinner_cache_ref (void)
+{
+ if (spinner_cache == NULL)
+ {
+ EphySpinnerCache **cache_ptr;
+
+ spinner_cache = g_object_new (EPHY_TYPE_SPINNER_CACHE, NULL);
+ cache_ptr = &spinner_cache;
+ g_object_add_weak_pointer (G_OBJECT (spinner_cache),
+ (gpointer *) cache_ptr);
+
+ return spinner_cache;
+ }
+
+ return g_object_ref (spinner_cache);
+}
+
+/* Spinner implementation */
+
+#define SPINNER_TIMEOUT 125 /* ms */
+
+#define EPHY_SPINNER_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_SPINNER, EphySpinnerDetails))
+
+struct _EphySpinnerDetails
+{
+ GtkIconTheme *icon_theme;
+ EphySpinnerCache *cache;
+ GtkIconSize size;
+ EphySpinnerImages *images;
+ guint current_image;
+ guint timeout;
+ guint timer_task;
+ guint spinning : 1;
+ guint need_load : 1;
+};
+
+static void ephy_spinner_class_init (EphySpinnerClass *class);
+static void ephy_spinner_init (EphySpinner *spinner);
+
+static GObjectClass *parent_class;
+
+GType
+ephy_spinner_get_type (void)
+{
+ static GType type = 0;
+
+ if (G_UNLIKELY (type == 0))
+ {
+ const GTypeInfo our_info =
+ {
+ sizeof (EphySpinnerClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ (GClassInitFunc) ephy_spinner_class_init,
+ NULL,
+ NULL, /* class_data */
+ sizeof (EphySpinner),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) ephy_spinner_init
+ };
+
+ type = g_type_register_static (GTK_TYPE_WIDGET,
+ "EphySpinner",
+ &our_info, 0);
+ }
+
+ return type;
+}
+
+static gboolean
+ephy_spinner_load_images (EphySpinner *spinner)
+{
+ EphySpinnerDetails *details = spinner->details;
+
+ if (details->need_load)
+ {
+ START_PROFILER ("ephy_spinner_load_images")
+
+ details->images =
+ ephy_spinner_cache_get_images
+ (details->cache,
+ gtk_widget_get_screen (GTK_WIDGET (spinner)),
+ details->size);
+
+ STOP_PROFILER ("ephy_spinner_load_images")
+
+ details->current_image = 0; /* 'rest' icon */
+ details->need_load = FALSE;
+ }
+
+ return details->images != NULL;
+}
+
+static void
+ephy_spinner_unload_images (EphySpinner *spinner)
+{
+ EphySpinnerDetails *details = spinner->details;
+
+ if (details->images != NULL)
+ {
+ ephy_spinner_images_unref (details->images);
+ details->images = NULL;
+ }
+
+ details->current_image = 0;
+ details->need_load = TRUE;
+}
+
+static void
+icon_theme_changed_cb (GtkIconTheme *icon_theme,
+ EphySpinner *spinner)
+{
+ ephy_spinner_unload_images (spinner);
+ gtk_widget_queue_resize (GTK_WIDGET (spinner));
+}
+
+static void
+ephy_spinner_init (EphySpinner *spinner)
+{
+ EphySpinnerDetails *details;
+
+ details = spinner->details = EPHY_SPINNER_GET_PRIVATE (spinner);
+
+ GTK_WIDGET_SET_FLAGS (GTK_WIDGET (spinner), GTK_NO_WINDOW);
+
+ details->cache = ephy_spinner_cache_ref ();
+ details->size = GTK_ICON_SIZE_DIALOG;
+ details->spinning = FALSE;
+ details->timeout = SPINNER_TIMEOUT;
+ details->need_load = TRUE;
+}
+
+static int
+ephy_spinner_expose (GtkWidget *widget,
+ GdkEventExpose *event)
+{
+ EphySpinner *spinner = EPHY_SPINNER (widget);
+ EphySpinnerDetails *details = spinner->details;
+ EphySpinnerImages *images;
+ GdkPixbuf *pixbuf;
+ GdkGC *gc;
+ int x_offset, y_offset, width, height;
+ GdkRectangle pix_area, dest;
+
+ if (!GTK_WIDGET_DRAWABLE (spinner))
+ {
+ return FALSE;
+ }
+
+ if (details->need_load &&
+ !ephy_spinner_load_images (spinner))
+ {
+ return FALSE;
+ }
+
+ images = details->images;
+ if (images == NULL)
+ {
+ return FALSE;
+ }
+
+ /* Otherwise |images| will be NULL anyway */
+ g_assert (images->n_animation_pixbufs > 0);
+
+ g_assert (details->current_image >= 0 &&
+ details->current_image < images->n_animation_pixbufs);
+
+ pixbuf = images->animation_pixbufs[details->current_image];
+
+ g_assert (pixbuf != NULL);
+
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+
+ /* Compute the offsets for the image centered on our allocation */
+ x_offset = (widget->allocation.width - width) / 2;
+ y_offset = (widget->allocation.height - height) / 2;
+
+ pix_area.x = x_offset + widget->allocation.x;
+ pix_area.y = y_offset + widget->allocation.y;
+ pix_area.width = width;
+ pix_area.height = height;
+
+ if (!gdk_rectangle_intersect (&event->area, &pix_area, &dest))
+ {
+ return FALSE;
+ }
+
+ gc = gdk_gc_new (widget->window);
+ gdk_draw_pixbuf (widget->window, gc, pixbuf,
+ dest.x - x_offset - widget->allocation.x,
+ dest.y - y_offset - widget->allocation.y,
+ dest.x, dest.y,
+ dest.width, dest.height,
+ GDK_RGB_DITHER_MAX, 0, 0);
+ g_object_unref (gc);
+
+ return FALSE;
+}
+
+static gboolean
+bump_spinner_frame_cb (EphySpinner *spinner)
+{
+ EphySpinnerDetails *details = spinner->details;
+
+ /* This can happen when we've unloaded the images on a theme
+ * change, but haven't been in the queued size request yet.
+ * Just skip this update.
+ */
+ if (details->images == NULL) return TRUE;
+
+ details->current_image++;
+ if (details->current_image >= details->images->n_animation_pixbufs)
+ {
+ /* the 0th frame is the 'rest' icon */
+ details->current_image = MIN (1, details->images->n_animation_pixbufs);
+ }
+
+ gtk_widget_queue_draw (GTK_WIDGET (spinner));
+
+ /* run again */
+ return TRUE;
+}
+
+/**
+ * ephy_spinner_start:
+ * @spinner: a #EphySpinner
+ *
+ * Start the spinner animation.
+ **/
+void
+ephy_spinner_start (EphySpinner *spinner)
+{
+ EphySpinnerDetails *details = spinner->details;
+
+ details->spinning = TRUE;
+
+ if (GTK_WIDGET_MAPPED (GTK_WIDGET (spinner)) &&
+ details->timer_task == 0 &&
+ ephy_spinner_load_images (spinner))
+ {
+ /* the 0th frame is the 'rest' icon */
+ details->current_image = MIN (1, details->images->n_animation_pixbufs);
+
+ details->timer_task =
+ g_timeout_add_full (G_PRIORITY_LOW,
+ details->timeout,
+ (GSourceFunc) bump_spinner_frame_cb,
+ spinner,
+ NULL);
+ }
+}
+
+static void
+ephy_spinner_remove_update_callback (EphySpinner *spinner)
+{
+ EphySpinnerDetails *details = spinner->details;
+
+ if (details->timer_task != 0)
+ {
+ g_source_remove (details->timer_task);
+ details->timer_task = 0;
+ }
+}
+
+/**
+ * ephy_spinner_stop:
+ * @spinner: a #EphySpinner
+ *
+ * Stop the spinner animation.
+ **/
+void
+ephy_spinner_stop (EphySpinner *spinner)
+{
+ EphySpinnerDetails *details = spinner->details;
+
+ details->spinning = FALSE;
+ details->current_image = 0;
+
+ if (details->timer_task != 0)
+ {
+ ephy_spinner_remove_update_callback (spinner);
+
+ if (GTK_WIDGET_MAPPED (GTK_WIDGET (spinner)))
+ {
+ gtk_widget_queue_draw (GTK_WIDGET (spinner));
+ }
+ }
+}
+
+/*
+ * ephy_spinner_set_size:
+ * @spinner: a #EphySpinner
+ * @size: the size of type %GtkIconSize
+ *
+ * Set the size of the spinner.
+ **/
+void
+ephy_spinner_set_size (EphySpinner *spinner,
+ GtkIconSize size)
+{
+ if (size == GTK_ICON_SIZE_INVALID)
+ {
+ size = GTK_ICON_SIZE_DIALOG;
+ }
+
+ if (size != spinner->details->size)
+ {
+ ephy_spinner_unload_images (spinner);
+
+ spinner->details->size = size;
+
+ gtk_widget_queue_resize (GTK_WIDGET (spinner));
+ }
+}
+
+#if 0
+/*
+ * ephy_spinner_set_timeout:
+ * @spinner: a #EphySpinner
+ * @timeout: time delay between updates to the spinner.
+ *
+ * Sets the timeout delay for spinner updates.
+ **/
+void
+ephy_spinner_set_timeout (EphySpinner *spinner,
+ guint timeout)
+{
+ EphySpinnerDetails *details = spinner->details;
+
+ if (timeout != details->timeout)
+ {
+ ephy_spinner_stop (spinner);
+
+ details->timeout = timeout;
+
+ if (details->spinning)
+ {
+ ephy_spinner_start (spinner);
+ }
+ }
+}
+#endif
+
+static void
+ephy_spinner_size_request (GtkWidget *widget,
+ GtkRequisition *requisition)
+{
+ EphySpinner *spinner = EPHY_SPINNER (widget);
+ EphySpinnerDetails *details = spinner->details;
+
+ if ((details->need_load &&
+ !ephy_spinner_load_images (spinner)) ||
+ details->images == NULL)
+ {
+ requisition->width = requisition->height = 0;
+ gtk_icon_size_lookup_for_settings (gtk_widget_get_settings (widget),
+ details->size,
+ &requisition->width,
+ &requisition->height);
+ return;
+ }
+
+ requisition->width = details->images->width;
+ requisition->height = details->images->height;
+
+ /* FIXME fix this hack */
+ /* allocate some extra margin so we don't butt up against toolbar edges */
+ if (details->size != GTK_ICON_SIZE_MENU)
+ {
+ requisition->width += 2;
+ requisition->height += 2;
+ }
+}
+
+static void
+ephy_spinner_map (GtkWidget *widget)
+{
+ EphySpinner *spinner = EPHY_SPINNER (widget);
+ EphySpinnerDetails *details = spinner->details;
+
+ GTK_WIDGET_CLASS (parent_class)->map (widget);
+
+ if (details->spinning)
+ {
+ ephy_spinner_start (spinner);
+ }
+}
+
+static void
+ephy_spinner_unmap (GtkWidget *widget)
+{
+ EphySpinner *spinner = EPHY_SPINNER (widget);
+
+ ephy_spinner_remove_update_callback (spinner);
+
+ GTK_WIDGET_CLASS (parent_class)->unmap (widget);
+}
+
+static void
+ephy_spinner_dispose (GObject *object)
+{
+ EphySpinner *spinner = EPHY_SPINNER (object);
+
+ g_signal_handlers_disconnect_by_func
+ (spinner->details->icon_theme,
+ G_CALLBACK (icon_theme_changed_cb), spinner);
+
+ G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+
+static void
+ephy_spinner_finalize (GObject *object)
+{
+ EphySpinner *spinner = EPHY_SPINNER (object);
+
+ ephy_spinner_remove_update_callback (spinner);
+ ephy_spinner_unload_images (spinner);
+
+ g_object_unref (spinner->details->cache);
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+ephy_spinner_screen_changed (GtkWidget *widget,
+ GdkScreen *old_screen)
+{
+ EphySpinner *spinner = EPHY_SPINNER (widget);
+ EphySpinnerDetails *details = spinner->details;
+ GdkScreen *screen;
+
+ if (GTK_WIDGET_CLASS (parent_class)->screen_changed)
+ {
+ GTK_WIDGET_CLASS (parent_class)->screen_changed (widget, old_screen);
+ }
+
+ screen = gtk_widget_get_screen (widget);
+
+ /* FIXME: this seems to be happening when then spinner is destroyed!? */
+ if (old_screen == screen) return;
+
+ /* We'll get mapped again on the new screen, but not unmapped from
+ * the old screen, so remove timeout here.
+ */
+ ephy_spinner_remove_update_callback (spinner);
+
+ ephy_spinner_unload_images (spinner);
+
+ if (old_screen != NULL)
+ {
+ g_signal_handlers_disconnect_by_func
+ (gtk_icon_theme_get_for_screen (old_screen),
+ G_CALLBACK (icon_theme_changed_cb), spinner);
+ }
+
+ details->icon_theme = gtk_icon_theme_get_for_screen (screen);
+ g_signal_connect (details->icon_theme, "changed",
+ G_CALLBACK (icon_theme_changed_cb), spinner);
+}
+
+static void
+ephy_spinner_class_init (EphySpinnerClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+
+ parent_class = g_type_class_peek_parent (class);
+
+ object_class->dispose = ephy_spinner_dispose;
+ object_class->finalize = ephy_spinner_finalize;
+
+ widget_class->expose_event = ephy_spinner_expose;
+ widget_class->size_request = ephy_spinner_size_request;
+ widget_class->map = ephy_spinner_map;
+ widget_class->unmap = ephy_spinner_unmap;
+ widget_class->screen_changed = ephy_spinner_screen_changed;
+
+ g_type_class_add_private (object_class, sizeof (EphySpinnerDetails));
+}
+
+/*
+ * ephy_spinner_new:
+ *
+ * Create a new #EphySpinner. The spinner is a widget
+ * that gives the user feedback about network status with
+ * an animated image.
+ *
+ * Return Value: the spinner #GtkWidget
+ **/
+GtkWidget *
+ephy_spinner_new (void)
+{
+ return GTK_WIDGET (g_object_new (EPHY_TYPE_SPINNER, NULL));
+}
diff --git a/trunk/src/ephy-spinner.h b/trunk/src/ephy-spinner.h
new file mode 100644
index 000000000..4435fe371
--- /dev/null
+++ b/trunk/src/ephy-spinner.h
@@ -0,0 +1,70 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * Copyright © 2000 Eazel, Inc.
+ * Copyright © 2004, 2006 Christian Persch
+ *
+ * Nautilus 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.
+ *
+ * Nautilus is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Andy Hertzfeld <andy@eazel.com>
+ *
+ * $Id: ephy-spinner.h 2114 2006-12-25 12:15:00Z mr $
+ */
+
+#ifndef EPHY_SPINNER_H
+#define EPHY_SPINNER_H
+
+#include <gtk/gtkwidget.h>
+#include <gtk/gtkenums.h>
+
+G_BEGIN_DECLS
+
+#define EPHY_TYPE_SPINNER (ephy_spinner_get_type ())
+#define EPHY_SPINNER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), EPHY_TYPE_SPINNER, EphySpinner))
+#define EPHY_SPINNER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), EPHY_TYPE_SPINNER, EphySpinnerClass))
+#define EPHY_IS_SPINNER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), EPHY_TYPE_SPINNER))
+#define EPHY_IS_SPINNER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), EPHY_TYPE_SPINNER))
+#define EPHY_SPINNER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), EPHY_TYPE_SPINNER, EphySpinnerClass))
+
+typedef struct _EphySpinner EphySpinner;
+typedef struct _EphySpinnerClass EphySpinnerClass;
+typedef struct _EphySpinnerDetails EphySpinnerDetails;
+
+struct _EphySpinner
+{
+ GtkWidget parent;
+
+ /*< private >*/
+ EphySpinnerDetails *details;
+};
+
+struct _EphySpinnerClass
+{
+ GtkWidgetClass parent_class;
+};
+
+GType ephy_spinner_get_type (void);
+
+GtkWidget *ephy_spinner_new (void);
+
+void ephy_spinner_start (EphySpinner *throbber);
+
+void ephy_spinner_stop (EphySpinner *throbber);
+
+void ephy_spinner_set_size (EphySpinner *spinner,
+ GtkIconSize size);
+
+G_END_DECLS
+
+#endif /* EPHY_SPINNER_H */
diff --git a/trunk/tests/.gitignore b/trunk/tests/.gitignore
new file mode 100644
index 000000000..b012f8091
--- /dev/null
+++ b/trunk/tests/.gitignore
@@ -0,0 +1,5 @@
+check-main
+contact-manager
+contact-run-until-ready
+contact-run-until-ready-2
+*.log
diff --git a/trunk/tests/Makefile.am b/trunk/tests/Makefile.am
new file mode 100644
index 000000000..5f8cbb6e4
--- /dev/null
+++ b/trunk/tests/Makefile.am
@@ -0,0 +1,52 @@
+SUBDIRS = xml
+
+CLEANFILES=
+
+include $(top_srcdir)/rules/check.mak
+
+SUPPRESSIONS=valgrind.supp dlopen.supp
+
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ $(EMPATHY_CFLAGS) \
+ $(WARN_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/libempathy-gtk/libempathy-gtk.la \
+ $(top_builddir)/libempathy/libempathy.la \
+ $(EMPATHY_LIBS)
+
+noinst_PROGRAMS = \
+ contact-manager \
+ contact-run-until-ready \
+ contact-run-until-ready-2
+
+contact_manager_SOURCES = contact-manager.c
+contact_run_until_ready_SOURCES = contact-run-until-ready.c
+contact_run_until_ready_2_SOURCES = contact-run-until-ready-2.c
+
+check_PROGRAMS = check-main
+TESTS = check-main
+check_main_SOURCES = \
+ check-main.c \
+ check-helpers.c \
+ check-helpers.h \
+ check-libempathy.h \
+ check-empathy-utils.c \
+ check-irc-helper.h \
+ check-irc-helper.c \
+ check-empathy-irc-server.c \
+ check-empathy-irc-network.c \
+ check-empathy-irc-network-manager.c
+
+check_main_LDADD = \
+ @CHECK_LIBS@ \
+ $(top_builddir)/libempathy-gtk/libempathy-gtk.la \
+ $(top_builddir)/libempathy/libempathy.la \
+ $(AM_LDFLAGS)
+
+check_main_CFLAGS = \
+ @CHECK_CFLAGS@ \
+ $(AM_CFLAGS)
+
+TESTS_ENVIRONMENT = EMPATHY_SRCDIR=@abs_top_srcdir@
diff --git a/trunk/tests/check-empathy-irc-network-manager.c b/trunk/tests/check-empathy-irc-network-manager.c
new file mode 100644
index 000000000..3244a8e2f
--- /dev/null
+++ b/trunk/tests/check-empathy-irc-network-manager.c
@@ -0,0 +1,877 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <glib/gstdio.h>
+
+#include <check.h>
+#include "check-helpers.h"
+#include "check-libempathy.h"
+#include "check-irc-helper.h"
+
+#include <libempathy/empathy-irc-network-manager.h>
+
+#define GLOBAL_SAMPLE "default-irc-networks-sample.xml"
+#define USER_SAMPLE "user-irc-networks-sample.xml"
+#define USER_FILE "user-irc-networks.xml"
+
+static gchar *
+get_xml_file (const gchar *filename)
+{
+ return g_build_filename (g_getenv ("EMPATHY_SRCDIR"), "tests", "xml", filename, NULL);
+}
+
+static gchar *
+get_user_xml_file (const gchar *filename)
+{
+ return g_build_filename (g_get_tmp_dir (), filename, NULL);
+}
+
+START_TEST (test_empathy_irc_network_manager_add)
+{
+ EmpathyIrcNetworkManager *mgr;
+ EmpathyIrcNetwork *network;
+ GSList *networks;
+ gchar *name;
+
+ mgr = empathy_irc_network_manager_new (NULL, NULL);
+ fail_if (mgr == NULL);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (networks != NULL);
+
+ /* add a network */
+ network = empathy_irc_network_new ("My Network");
+ fail_if (network == NULL);
+ empathy_irc_network_manager_add (mgr, network);
+ g_object_unref (network);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (g_slist_length (networks) != 1);
+ g_object_get (networks->data, "name", &name, NULL);
+ fail_if (name == NULL || strcmp (name, "My Network") != 0);
+ g_free (name);
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+
+ /* add another network having the same name */
+ network = empathy_irc_network_new ("My Network");
+ fail_if (network == NULL);
+ empathy_irc_network_manager_add (mgr, network);
+ g_object_unref (network);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (g_slist_length (networks) != 2);
+ g_object_get (networks->data, "name", &name, NULL);
+ fail_if (name == NULL || strcmp (name, "My Network") != 0);
+ g_free (name);
+ g_object_get (g_slist_next(networks)->data, "name", &name, NULL);
+ fail_if (name == NULL || strcmp (name, "My Network") != 0);
+ g_free (name);
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+
+ g_object_unref (mgr);
+}
+END_TEST
+
+START_TEST (test_load_global_file)
+{
+ EmpathyIrcNetworkManager *mgr;
+ gchar *global_file, *user_file;
+ GSList *networks, *l;
+ struct server_t freenode_servers[] = {
+ { "irc.freenode.net", 6667, FALSE },
+ { "irc.eu.freenode.net", 6667, FALSE }};
+ struct server_t gimpnet_servers[] = {
+ { "irc.gimp.org", 6667, FALSE },
+ { "irc.us.gimp.org", 6667, FALSE }};
+ struct server_t test_servers[] = {
+ { "irc.test.org", 6669, TRUE }};
+ struct server_t undernet_servers[] = {
+ { "eu.undernet.org", 6667, FALSE }};
+ gboolean network_checked[4];
+ gchar *global_file_orig;
+
+ global_file_orig = get_xml_file (GLOBAL_SAMPLE);
+ mgr = empathy_irc_network_manager_new (global_file_orig, NULL);
+
+ g_object_get (mgr,
+ "global-file", &global_file,
+ "user-file", &user_file,
+ NULL);
+ fail_if (global_file == NULL || strcmp (global_file, global_file_orig) != 0);
+ fail_if (user_file != NULL);
+ g_free (global_file);
+ g_free (global_file_orig);
+ g_free (user_file);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (g_slist_length (networks) != 4);
+
+ network_checked[0] = network_checked[1] = network_checked[2] =
+ network_checked[3] = FALSE;
+ /* check networks and servers */
+ for (l = networks; l != NULL; l = g_slist_next (l))
+ {
+ gchar *name;
+
+ g_object_get (l->data, "name", &name, NULL);
+ fail_if (name == NULL);
+
+ if (strcmp (name, "Freenode") == 0)
+ {
+ check_network (l->data, "Freenode", "UTF-8", freenode_servers, 2);
+ network_checked[0] = TRUE;
+ }
+ else if (strcmp (name, "GIMPNet") == 0)
+ {
+ check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 2);
+ network_checked[1] = TRUE;
+ }
+ else if (strcmp (name, "Test Server") == 0)
+ {
+ check_network (l->data, "Test Server", "ISO-8859-1", test_servers, 1);
+ network_checked[2] = TRUE;
+ }
+ else if (strcmp (name, "Undernet") == 0)
+ {
+ check_network (l->data, "Undernet", "UTF-8", undernet_servers, 1);
+ network_checked[3] = TRUE;
+ }
+ else
+ {
+ fail_if (TRUE);
+ }
+
+ g_free (name);
+ }
+ fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2] ||
+ !network_checked[3]);
+
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+ g_object_unref (mgr);
+}
+END_TEST
+
+static gboolean
+remove_network_named (EmpathyIrcNetworkManager *mgr,
+ const gchar *network_name)
+{
+ GSList *networks, *l;
+ gboolean removed = FALSE;
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+
+ /* check networks and servers */
+ for (l = networks; l != NULL && !removed; l = g_slist_next (l))
+ {
+ EmpathyIrcNetwork *network = l->data;
+ gchar *name;
+
+ g_object_get (network, "name", &name, NULL);
+ fail_if (name == NULL);
+
+ if (strcmp (name, network_name) == 0)
+ {
+ empathy_irc_network_manager_remove (mgr, network);
+ removed = TRUE;
+ }
+
+ g_free (name);
+ }
+
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+
+ return removed;
+}
+
+START_TEST (test_empathy_irc_network_manager_remove)
+{
+ EmpathyIrcNetworkManager *mgr;
+ GSList *networks, *l;
+ struct server_t freenode_servers[] = {
+ { "irc.freenode.net", 6667, FALSE },
+ { "irc.eu.freenode.net", 6667, FALSE }};
+ struct server_t test_servers[] = {
+ { "irc.test.org", 6669, TRUE }};
+ struct server_t undernet_servers[] = {
+ { "eu.undernet.org", 6667, FALSE }};
+ gboolean network_checked[3];
+ gboolean result;
+ gchar *global_file_orig;
+
+ global_file_orig = get_xml_file (GLOBAL_SAMPLE);
+ mgr = empathy_irc_network_manager_new (global_file_orig, NULL);
+ g_free (global_file_orig);
+
+ result = remove_network_named (mgr, "GIMPNet");
+ fail_if (!result);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (g_slist_length (networks) != 3);
+
+ network_checked[0] = network_checked[1] = network_checked[2] = FALSE;
+ /* check networks and servers */
+ for (l = networks; l != NULL; l = g_slist_next (l))
+ {
+ gchar *name;
+
+ g_object_get (l->data, "name", &name, NULL);
+ fail_if (name == NULL);
+
+ if (strcmp (name, "Freenode") == 0)
+ {
+ check_network (l->data, "Freenode", "UTF-8", freenode_servers, 2);
+ network_checked[0] = TRUE;
+ }
+ else if (strcmp (name, "Test Server") == 0)
+ {
+ check_network (l->data, "Test Server", "ISO-8859-1", test_servers, 1);
+ network_checked[1] = TRUE;
+ }
+ else if (strcmp (name, "Undernet") == 0)
+ {
+ check_network (l->data, "Undernet", "UTF-8", undernet_servers, 1);
+ network_checked[2] = TRUE;
+ }
+ else
+ {
+ fail_if (TRUE);
+ }
+
+ g_free (name);
+ }
+ fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2]);
+
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+ g_object_unref (mgr);
+}
+END_TEST
+
+static void
+copy_user_file (void)
+{
+ gboolean result;
+ gchar *buffer;
+ gsize length;
+ gchar *user_sample;
+ gchar *user_file;
+
+ user_sample = get_xml_file (USER_SAMPLE);
+ result = g_file_get_contents (user_sample, &buffer, &length, NULL);
+ fail_if (!result);
+
+ user_file = get_user_xml_file (USER_FILE);
+ result = g_file_set_contents (user_file, buffer, length, NULL);
+ fail_if (!result);
+
+ g_free (user_sample);
+ g_free (user_file);
+ g_free (buffer);
+}
+
+START_TEST (test_load_user_file)
+{
+ EmpathyIrcNetworkManager *mgr;
+ gchar *global_file, *user_file;
+ GSList *networks, *l;
+ struct server_t gimpnet_servers[] = {
+ { "irc.gimp.org", 6667, FALSE },
+ { "irc.us.gimp.org", 6667, FALSE },
+ { "irc.au.gimp.org", 6667, FALSE }};
+ struct server_t my_server[] = {
+ { "irc.mysrv.net", 7495, TRUE }};
+ struct server_t another_server[] = {
+ { "irc.anothersrv.be", 6660, FALSE }};
+ gboolean network_checked[3];
+ gchar *user_file_orig;
+
+ copy_user_file ();
+ user_file_orig = get_user_xml_file (USER_FILE);
+ mgr = empathy_irc_network_manager_new (NULL, user_file_orig);
+
+ g_object_get (mgr,
+ "global-file", &global_file,
+ "user-file", &user_file,
+ NULL);
+ fail_if (global_file != NULL);
+ fail_if (user_file == NULL || strcmp (user_file, user_file_orig) != 0);
+ g_free (global_file);
+ g_free (user_file);
+ g_free (user_file_orig);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (g_slist_length (networks) != 3);
+
+ network_checked[0] = network_checked[1] = network_checked[2] = FALSE;
+ /* check networks and servers */
+ for (l = networks; l != NULL; l = g_slist_next (l))
+ {
+ gchar *name;
+
+ g_object_get (l->data, "name", &name, NULL);
+ fail_if (name == NULL);
+
+ if (strcmp (name, "GIMPNet") == 0)
+ {
+ check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 3);
+ network_checked[0] = TRUE;
+ }
+ else if (strcmp (name, "My Server") == 0)
+ {
+ check_network (l->data, "My Server", "UTF-8", my_server, 1);
+ network_checked[1] = TRUE;
+ }
+ else if (strcmp (name, "Another Server") == 0)
+ {
+ check_network (l->data, "Another Server", "UTF-8", another_server, 1);
+ network_checked[2] = TRUE;
+ }
+ else
+ {
+ fail_if (TRUE);
+ }
+
+ g_free (name);
+ }
+ fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2]);
+
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+ g_object_unref (mgr);
+}
+END_TEST
+
+START_TEST (test_load_both_files)
+{
+ EmpathyIrcNetworkManager *mgr;
+ gchar *global_file, *user_file;
+ GSList *networks, *l;
+ struct server_t freenode_servers[] = {
+ { "irc.freenode.net", 6667, FALSE },
+ { "irc.eu.freenode.net", 6667, FALSE }};
+ struct server_t gimpnet_servers[] = {
+ { "irc.gimp.org", 6667, FALSE },
+ { "irc.us.gimp.org", 6667, FALSE },
+ { "irc.au.gimp.org", 6667, FALSE }};
+ struct server_t my_server[] = {
+ { "irc.mysrv.net", 7495, TRUE }};
+ struct server_t another_server[] = {
+ { "irc.anothersrv.be", 6660, FALSE }};
+ struct server_t undernet_servers[] = {
+ { "eu.undernet.org", 6667, FALSE }};
+ gboolean network_checked[5];
+ gchar *global_file_orig, *user_file_orig;
+
+ global_file_orig = get_xml_file (GLOBAL_SAMPLE);
+ user_file_orig = get_user_xml_file (USER_FILE);
+ mgr = empathy_irc_network_manager_new (global_file_orig, user_file_orig);
+
+ g_object_get (mgr,
+ "global-file", &global_file,
+ "user-file", &user_file,
+ NULL);
+ fail_if (global_file == NULL || strcmp (global_file, global_file_orig) != 0);
+ fail_if (user_file == NULL || strcmp (user_file, user_file_orig) != 0);
+ g_free (global_file);
+ g_free (global_file_orig);
+ g_free (user_file);
+ g_free (user_file_orig);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (g_slist_length (networks) != 5);
+
+ network_checked[0] = network_checked[1] = network_checked[2] =
+ network_checked[3] = network_checked[4] = FALSE;
+ /* check networks and servers */
+ for (l = networks; l != NULL; l = g_slist_next (l))
+ {
+ gchar *name;
+
+ g_object_get (l->data, "name", &name, NULL);
+ fail_if (name == NULL);
+
+ if (strcmp (name, "Freenode") == 0)
+ {
+ check_network (l->data, "Freenode", "UTF-8", freenode_servers, 2);
+ network_checked[0] = TRUE;
+ }
+ else if (strcmp (name, "GIMPNet") == 0)
+ {
+ check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 3);
+ network_checked[1] = TRUE;
+ }
+ else if (strcmp (name, "My Server") == 0)
+ {
+ check_network (l->data, "My Server", "UTF-8", my_server, 1);
+ network_checked[2] = TRUE;
+ }
+ else if (strcmp (name, "Another Server") == 0)
+ {
+ check_network (l->data, "Another Server", "UTF-8", another_server, 1);
+ network_checked[3] = TRUE;
+ }
+ else if (strcmp (name, "Undernet") == 0)
+ {
+ check_network (l->data, "Undernet", "UTF-8", undernet_servers, 1);
+ network_checked[4] = TRUE;
+ }
+ else
+ {
+ fail_if (TRUE);
+ }
+
+ g_free (name);
+ }
+ fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2] ||
+ !network_checked[3] || !network_checked[4]);
+
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+ g_object_unref (mgr);
+}
+END_TEST
+
+START_TEST (test_modify_user_file)
+{
+ EmpathyIrcNetworkManager *mgr;
+ EmpathyIrcNetwork *network;
+ EmpathyIrcServer *server;
+ gchar *global_file, *user_file;
+ GSList *networks, *l;
+ struct server_t gimpnet_servers[] = {
+ { "irc.gimp.org", 6667, TRUE },
+ { "irc.us.gimp.org", 6668, FALSE }};
+ struct server_t great_server[] = {
+ { "irc.greatserver.com", 7873, TRUE }};
+ struct server_t another_server[] = {
+ { "irc.anothersrv.be", 6660, FALSE }};
+ gboolean network_modified[2];
+ gboolean network_checked[3];
+ gchar *user_file_orig;
+
+ copy_user_file ();
+ user_file_orig = get_user_xml_file (USER_FILE);
+ mgr = empathy_irc_network_manager_new (NULL, user_file_orig);
+
+ g_object_get (mgr,
+ "global-file", &global_file,
+ "user-file", &user_file,
+ NULL);
+ fail_if (global_file != NULL);
+ fail_if (user_file == NULL || strcmp (user_file, user_file_orig) != 0);
+ g_free (global_file);
+ g_free (user_file);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (g_slist_length (networks) != 3);
+
+ network_modified[0] = network_modified[1] = FALSE;
+ /* check networks and servers */
+ for (l = networks; l != NULL; l = g_slist_next (l))
+ {
+ EmpathyIrcNetwork *network;
+ gchar *name;
+
+ network = l->data;
+ g_object_get (network, "name", &name, NULL);
+ fail_if (name == NULL);
+
+ if (strcmp (name, "GIMPNet") == 0)
+ {
+ GSList *servers, *ll;
+
+ /* change charset */
+ g_object_set (network, "charset", "ISO-8859-1", NULL);
+
+ servers = empathy_irc_network_get_servers (network);
+ for (ll = servers; ll != NULL; ll = g_slist_next (ll))
+ {
+ EmpathyIrcServer *server;
+ gchar *address;
+
+ server = ll->data;
+ g_object_get (server, "address", &address, NULL);
+ if (strcmp (address, "irc.gimp.org") == 0)
+ {
+ /* change SSL */
+ g_object_set (server, "ssl", TRUE, NULL);
+ }
+ else if (strcmp (address, "irc.us.gimp.org") == 0)
+ {
+ /* change port */
+ g_object_set (server, "port", 6668, NULL);
+ }
+ else if (strcmp (address, "irc.au.gimp.org") == 0)
+ {
+ /* remove this server */
+ empathy_irc_network_remove_server (network, server);
+ }
+ else
+ {
+ fail_if (TRUE);
+ }
+
+ g_free (address);
+ }
+
+ network_modified[0] = TRUE;
+
+ g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
+ g_slist_free (servers);
+ }
+ else if (strcmp (name, "My Server") == 0)
+ {
+ /* remove this network */
+ empathy_irc_network_manager_remove (mgr, network);
+ network_modified[1] = TRUE;
+ }
+ else if (strcmp (name, "Another Server") == 0)
+ {
+ /* Don't change this one */
+ }
+ else
+ {
+ fail_if (TRUE);
+ }
+
+ g_free (name);
+ }
+ fail_if (!network_modified[0] || !network_modified[1]);
+
+ /* Add a new network */
+ network = empathy_irc_network_new ("Great Server");
+ server = empathy_irc_server_new ("irc.greatserver.com", 7873, TRUE);
+ empathy_irc_network_append_server (network, server);
+ empathy_irc_network_manager_add (mgr, network);
+ g_object_unref (server);
+ g_object_unref (network);
+
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+ g_object_unref (mgr);
+
+
+ /* Now let's reload the file and check its contain */
+ mgr = empathy_irc_network_manager_new (NULL, user_file_orig);
+ g_free (user_file_orig);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (g_slist_length (networks) != 3);
+
+ network_checked[0] = network_checked[1] = network_checked[2] = FALSE;
+ /* check networks and servers */
+ for (l = networks; l != NULL; l = g_slist_next (l))
+ {
+ gchar *name;
+
+ g_object_get (l->data, "name", &name, NULL);
+ fail_if (name == NULL);
+
+ if (strcmp (name, "GIMPNet") == 0)
+ {
+ check_network (l->data, "GIMPNet", "ISO-8859-1", gimpnet_servers, 2);
+ network_checked[0] = TRUE;
+ }
+ else if (strcmp (name, "Great Server") == 0)
+ {
+ check_network (l->data, "Great Server", "UTF-8", great_server, 1);
+ network_checked[1] = TRUE;
+ }
+ else if (strcmp (name, "Another Server") == 0)
+ {
+ check_network (l->data, "Another Server", "UTF-8", another_server, 1);
+ network_checked[2] = TRUE;
+ }
+ else
+ {
+ fail_if (TRUE);
+ }
+
+ g_free (name);
+ }
+ fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2]);
+
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+ g_object_unref (mgr);
+}
+END_TEST
+
+START_TEST (test_modify_both_files)
+{
+ EmpathyIrcNetworkManager *mgr;
+ EmpathyIrcNetwork *network;
+ EmpathyIrcServer *server;
+ gchar *global_file, *user_file;
+ GSList *networks, *l;
+ struct server_t gimpnet_servers[] = {
+ { "irc.gimp.org", 6667, TRUE },
+ { "irc.us.gimp.org", 6668, FALSE }};
+ struct server_t great_server[] = {
+ { "irc.greatserver.com", 7873, TRUE }};
+ struct server_t another_server[] = {
+ { "irc.anothersrv.be", 6660, FALSE }};
+ struct server_t undernet_servers[] = {
+ { "eu.undernet.org", 6667, FALSE },
+ { "us.undernet.org", 6667, FALSE }};
+ gboolean network_modified[4];
+ gboolean network_checked[4];
+ gchar *global_file_orig, *user_file_orig;
+
+ copy_user_file ();
+ global_file_orig = get_xml_file (GLOBAL_SAMPLE);
+ user_file_orig = get_user_xml_file (USER_FILE);
+ mgr = empathy_irc_network_manager_new (global_file_orig, user_file_orig);
+
+ g_object_get (mgr,
+ "global-file", &global_file,
+ "user-file", &user_file,
+ NULL);
+ fail_if (global_file == NULL || strcmp (global_file, global_file_orig) != 0);
+ fail_if (user_file == NULL || strcmp (user_file, user_file_orig) != 0);
+ g_free (global_file);
+ g_free (global_file_orig);
+ g_free (user_file);
+ g_free (user_file_orig);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (g_slist_length (networks) != 5);
+
+ network_modified[0] = network_modified[1] = network_modified[2] =
+ network_modified[3] = FALSE;
+ /* check networks and servers */
+ for (l = networks; l != NULL; l = g_slist_next (l))
+ {
+ EmpathyIrcNetwork *network;
+ gchar *name;
+
+ network = l->data;
+ g_object_get (network, "name", &name, NULL);
+ fail_if (name == NULL);
+
+ if (strcmp (name, "GIMPNet") == 0)
+ {
+ /* Modify user network */
+ GSList *servers, *ll;
+
+ servers = empathy_irc_network_get_servers (network);
+ for (ll = servers; ll != NULL; ll = g_slist_next (ll))
+ {
+ EmpathyIrcServer *server;
+ gchar *address;
+
+ server = ll->data;
+ g_object_get (server, "address", &address, NULL);
+ if (strcmp (address, "irc.gimp.org") == 0)
+ {
+ /* change SSL */
+ g_object_set (server, "ssl", TRUE, NULL);
+ }
+ else if (strcmp (address, "irc.us.gimp.org") == 0)
+ {
+ /* change port */
+ g_object_set (server, "port", 6668, NULL);
+ }
+ else if (strcmp (address, "irc.au.gimp.org") == 0)
+ {
+ /* remove this server */
+ empathy_irc_network_remove_server (network, server);
+ }
+ else
+ {
+ fail_if (TRUE);
+ }
+
+ g_free (address);
+ }
+
+ network_modified[0] = TRUE;
+
+ g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
+ g_slist_free (servers);
+ }
+ else if (strcmp (name, "My Server") == 0)
+ {
+ /* remove user network */
+ empathy_irc_network_manager_remove (mgr, network);
+ network_modified[1] = TRUE;
+ }
+ else if (strcmp (name, "Freenode") == 0)
+ {
+ /* remove global network */
+ empathy_irc_network_manager_remove (mgr, network);
+ network_modified[2] = TRUE;
+ }
+ else if (strcmp (name, "Undernet") == 0)
+ {
+ /* modify global network */
+ EmpathyIrcServer *server;
+
+ server = empathy_irc_server_new ("us.undernet.org", 6667, FALSE);
+ empathy_irc_network_append_server (network, server);
+ g_object_unref (server);
+
+ network_modified[3] = TRUE;
+ }
+ else if (strcmp (name, "Another Server") == 0)
+ {
+ /* Don't change this one */
+ }
+ else
+ {
+ fail_if (TRUE);
+ }
+
+ g_free (name);
+ }
+ fail_if (!network_modified[0] || !network_modified[1] || !network_modified[2]
+ || !network_modified[3]);
+
+ /* Add a new network */
+ network = empathy_irc_network_new ("Great Server");
+ server = empathy_irc_server_new ("irc.greatserver.com", 7873, TRUE);
+ empathy_irc_network_append_server (network, server);
+ empathy_irc_network_manager_add (mgr, network);
+ g_object_unref (server);
+ g_object_unref (network);
+
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+ g_object_unref (mgr);
+
+
+ /* Now let's reload the file and check its contain */
+ global_file_orig = get_xml_file (GLOBAL_SAMPLE);
+ user_file_orig = get_user_xml_file (USER_FILE);
+ mgr = empathy_irc_network_manager_new (global_file_orig, user_file_orig);
+ g_free (global_file_orig);
+ g_free (user_file_orig);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (g_slist_length (networks) != 4);
+
+ network_checked[0] = network_checked[1] = network_checked[2] =
+ network_checked[3] = FALSE;
+ /* check networks and servers */
+ for (l = networks; l != NULL; l = g_slist_next (l))
+ {
+ gchar *name;
+
+ g_object_get (l->data, "name", &name, NULL);
+ fail_if (name == NULL);
+
+ if (strcmp (name, "GIMPNet") == 0)
+ {
+ check_network (l->data, "GIMPNet", "UTF-8", gimpnet_servers, 2);
+ network_checked[0] = TRUE;
+ }
+ else if (strcmp (name, "Great Server") == 0)
+ {
+ check_network (l->data, "Great Server", "UTF-8", great_server, 1);
+ network_checked[1] = TRUE;
+ }
+ else if (strcmp (name, "Another Server") == 0)
+ {
+ check_network (l->data, "Another Server", "UTF-8", another_server, 1);
+ network_checked[2] = TRUE;
+ }
+ else if (strcmp (name, "Undernet") == 0)
+ {
+ check_network (l->data, "Undernet", "UTF-8", undernet_servers, 2);
+ network_checked[3] = TRUE;
+ }
+ else
+ {
+ fail_if (TRUE);
+ }
+
+ g_free (name);
+ }
+ fail_if (!network_checked[0] || !network_checked[1] || !network_checked[2] ||
+ !network_checked[3]);
+
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+ g_object_unref (mgr);
+}
+END_TEST
+
+START_TEST (test_empathy_irc_network_manager_find_network_by_address)
+{
+ EmpathyIrcNetworkManager *mgr;
+ EmpathyIrcNetwork *network;
+ struct server_t freenode_servers[] = {
+ { "irc.freenode.net", 6667, FALSE },
+ { "irc.eu.freenode.net", 6667, FALSE }};
+ gchar *global_file_orig;
+
+ global_file_orig = get_xml_file (GLOBAL_SAMPLE);
+ mgr = empathy_irc_network_manager_new (global_file_orig, NULL);
+ g_free (global_file_orig);
+
+ network = empathy_irc_network_manager_find_network_by_address (mgr,
+ "irc.freenode.net");
+ fail_if (network == NULL);
+ check_network (network, "Freenode", "UTF-8", freenode_servers, 2);
+
+ network = empathy_irc_network_manager_find_network_by_address (mgr,
+ "irc.eu.freenode.net");
+ fail_if (network == NULL);
+ check_network (network, "Freenode", "UTF-8", freenode_servers, 2);
+
+ network = empathy_irc_network_manager_find_network_by_address (mgr,
+ "unknown");
+ fail_if (network != NULL);
+
+ g_object_unref (mgr);
+}
+END_TEST
+
+START_TEST (test_no_modify_with_empty_user_file)
+{
+ EmpathyIrcNetworkManager *mgr;
+ GSList *networks;
+ gchar *global_file_orig;
+ gchar *user_file_orig;
+
+ /* user don't have a networks file yet */
+ user_file_orig = get_user_xml_file (USER_FILE);
+ g_unlink (user_file_orig);
+
+ global_file_orig = get_xml_file (GLOBAL_SAMPLE);
+ mgr = empathy_irc_network_manager_new (global_file_orig, user_file_orig);
+ g_free (global_file_orig);
+ g_object_unref (mgr);
+
+ /* We didn't modify anything so USER_FILE should be empty */
+ mgr = empathy_irc_network_manager_new (NULL, user_file_orig);
+ g_free (user_file_orig);
+
+ networks = empathy_irc_network_manager_get_networks (mgr);
+ fail_if (g_slist_length (networks) != 0);
+
+ g_slist_foreach (networks, (GFunc) g_object_unref, NULL);
+ g_slist_free (networks);
+ g_object_unref (mgr);
+}
+END_TEST
+
+TCase *
+make_empathy_irc_network_manager_tcase (void)
+{
+ TCase *tc = tcase_create ("empathy-irc-network-manager");
+ tcase_add_test (tc, test_empathy_irc_network_manager_add);
+ tcase_add_test (tc, test_load_global_file);
+ tcase_add_test (tc, test_empathy_irc_network_manager_remove);
+ tcase_add_test (tc, test_load_user_file);
+ tcase_add_test (tc, test_load_both_files);
+ tcase_add_test (tc, test_modify_user_file);
+ tcase_add_test (tc, test_modify_both_files);
+ tcase_add_test (tc, test_empathy_irc_network_manager_find_network_by_address);
+ tcase_add_test (tc, test_no_modify_with_empty_user_file);
+ return tc;
+}
diff --git a/trunk/tests/check-empathy-irc-network.c b/trunk/tests/check-empathy-irc-network.c
new file mode 100644
index 000000000..b8124a305
--- /dev/null
+++ b/trunk/tests/check-empathy-irc-network.c
@@ -0,0 +1,240 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <check.h>
+#include "check-helpers.h"
+#include "check-libempathy.h"
+#include "check-irc-helper.h"
+
+#include <libempathy/empathy-irc-network.h>
+
+START_TEST (test_empathy_irc_network_new)
+{
+ EmpathyIrcNetwork *network;
+
+ network = empathy_irc_network_new ("Network1");
+ check_network (network, "Network1", "UTF-8", NULL, 0);
+
+ g_object_unref (network);
+}
+END_TEST
+
+START_TEST (test_property_change)
+{
+ EmpathyIrcNetwork *network;
+
+ network = empathy_irc_network_new ("Network1");
+ check_network (network, "Network1", "UTF-8", NULL, 0);
+
+ g_object_set (network,
+ "name", "Network2",
+ "charset", "ISO-8859-1",
+ NULL);
+
+ check_network (network, "Network2", "ISO-8859-1", NULL, 0);
+
+ g_object_unref (network);
+
+}
+END_TEST
+
+static gboolean modified;
+
+static void
+modified_cb (EmpathyIrcNetwork *network,
+ gpointer unused)
+{
+ modified = TRUE;
+}
+
+START_TEST (test_modified_signal)
+{
+ EmpathyIrcNetwork *network;
+
+ network = empathy_irc_network_new ("Network1");
+ check_network (network, "Network1", "UTF-8", NULL, 0);
+
+ modified = FALSE;
+ g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
+
+ g_object_set (network, "name", "Network2", NULL);
+ fail_if (!modified);
+ modified = FALSE;
+ g_object_set (network, "name", "Network2", NULL);
+ fail_if (modified);
+
+ g_object_unref (network);
+}
+END_TEST
+
+static void
+add_servers (EmpathyIrcNetwork *network,
+ struct server_t *servers,
+ guint nb_servers)
+{
+ guint i;
+
+ for (i = 0; i < nb_servers; i ++)
+ {
+ EmpathyIrcServer *server;
+
+ server = empathy_irc_server_new (servers[i].address,
+ servers[i].port, servers[i].ssl);
+ modified = FALSE;
+ empathy_irc_network_append_server (network, server);
+ fail_if (!modified);
+ g_object_unref (server);
+ }
+}
+
+START_TEST (test_add_server)
+{
+ EmpathyIrcNetwork *network;
+ EmpathyIrcServer *server;
+ GSList *servers, *l;
+ struct server_t test_servers[] = {
+ { "server1", 6667, FALSE },
+ { "server2", 6668, TRUE },
+ { "server3", 6667, FALSE },
+ { "server4", 6669, TRUE }};
+ struct server_t servers_without_3[] = {
+ { "server1", 6667, FALSE },
+ { "server2", 6668, TRUE },
+ { "server4", 6669, TRUE }};
+
+ network = empathy_irc_network_new ("Network1");
+ check_network (network, "Network1", "UTF-8", NULL, 0);
+
+ modified = FALSE;
+ g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
+
+ check_network (network, "Network1", "UTF-8", NULL, 0);
+
+ /* add the servers */
+ add_servers (network, test_servers, 4);
+
+ check_network (network, "Network1", "UTF-8", test_servers, 4);
+
+ /* Now let's remove the 3rd server */
+ servers = empathy_irc_network_get_servers (network);
+ l = g_slist_nth (servers, 2);
+ fail_if (l == NULL);
+ server = l->data;
+ modified = FALSE;
+ empathy_irc_network_remove_server (network, server);
+ fail_if (!modified);
+
+ /* free the list */
+ g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
+ g_slist_free (servers);
+
+ /* The 3rd server should have disappear */
+ check_network (network, "Network1", "UTF-8", servers_without_3, 3);
+
+ g_object_unref (network);
+}
+END_TEST
+
+START_TEST (test_modified_signal_because_of_server)
+{
+ EmpathyIrcNetwork *network;
+ EmpathyIrcServer *server;
+
+ network = empathy_irc_network_new ("Network1");
+ check_network (network, "Network1", "UTF-8", NULL, 0);
+
+ g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
+
+ server = empathy_irc_server_new ("server1", 6667, FALSE);
+ empathy_irc_network_append_server (network, server);
+
+ /* Change server properties */
+ modified = FALSE;
+ g_object_set (server, "address", "server2", NULL);
+ fail_if (!modified);
+ modified = FALSE;
+ g_object_set (server, "port", 6668, NULL);
+ fail_if (!modified);
+ modified = FALSE;
+ g_object_set (server, "ssl", TRUE, NULL);
+ fail_if (!modified);
+
+ empathy_irc_network_remove_server (network, server);
+ modified = FALSE;
+ g_object_set (server, "address", "server3", NULL);
+ /* We removed the server so the network is not modified anymore */
+ fail_if (modified);
+
+ g_object_unref (network);
+}
+END_TEST
+
+START_TEST (test_empathy_irc_network_set_server_position)
+{
+ EmpathyIrcNetwork *network;
+ GSList *servers, *l;
+ struct server_t test_servers[] = {
+ { "server1", 6667, FALSE },
+ { "server2", 6668, TRUE },
+ { "server3", 6667, FALSE },
+ { "server4", 6669, TRUE }};
+ struct server_t test_servers_sorted[] = {
+ { "server2", 6668, TRUE },
+ { "server4", 6669, TRUE },
+ { "server3", 6667, FALSE },
+ { "server1", 6667, FALSE }};
+
+ network = empathy_irc_network_new ("Network1");
+ check_network (network, "Network1", "UTF-8", NULL, 0);
+
+ modified = FALSE;
+ g_signal_connect (network, "modified", G_CALLBACK (modified_cb), NULL);
+
+ /* add the servers */
+ add_servers (network, test_servers, 4);
+ check_network (network, "Network1", "UTF-8", test_servers, 4);
+
+ /* get servers list */
+ servers = empathy_irc_network_get_servers (network);
+ fail_if (g_slist_length (servers) != 4);
+ modified = FALSE;
+
+ /* server1 go to the last position */
+ empathy_irc_network_set_server_position (network, servers->data, -1);
+
+ /* server2 go to the first position */
+ l = servers->next;
+ empathy_irc_network_set_server_position (network, l->data, 0);
+
+ /* server3 go to the third position */
+ l = l->next;
+ empathy_irc_network_set_server_position (network, l->data, 2);
+
+ /* server4 go to the second position*/
+ l = l->next;
+ empathy_irc_network_set_server_position (network, l->data, 1);
+
+ fail_if (!modified);
+
+ /* free the list */
+ g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
+ g_slist_free (servers);
+
+ /* Check if servers are sorted */
+ check_network (network, "Network1", "UTF-8", test_servers_sorted, 4);
+}
+END_TEST
+
+TCase *
+make_empathy_irc_network_tcase (void)
+{
+ TCase *tc = tcase_create ("empathy-irc-network");
+ tcase_add_test (tc, test_empathy_irc_network_new);
+ tcase_add_test (tc, test_property_change);
+ tcase_add_test (tc, test_modified_signal);
+ tcase_add_test (tc, test_add_server);
+ tcase_add_test (tc, test_modified_signal_because_of_server);
+ tcase_add_test (tc, test_empathy_irc_network_set_server_position);
+ return tc;
+}
diff --git a/trunk/tests/check-empathy-irc-server.c b/trunk/tests/check-empathy-irc-server.c
new file mode 100644
index 000000000..52607f221
--- /dev/null
+++ b/trunk/tests/check-empathy-irc-server.c
@@ -0,0 +1,93 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <check.h>
+#include "check-helpers.h"
+#include "check-libempathy.h"
+#include "check-irc-helper.h"
+
+#include <libempathy/empathy-irc-server.h>
+
+START_TEST (test_empathy_irc_server_new)
+{
+ EmpathyIrcServer *server;
+
+ server = empathy_irc_server_new ("test.localhost", 6667, TRUE);
+ check_server (server, "test.localhost", 6667, TRUE);
+
+ g_object_unref (server);
+}
+END_TEST
+
+START_TEST (test_property_change)
+{
+ EmpathyIrcServer *server;
+
+ server = empathy_irc_server_new ("test.localhost", 6667, TRUE);
+ fail_if (server == NULL);
+
+ g_object_set (server,
+ "address", "test2.localhost",
+ "port", 6668,
+ "ssl", FALSE,
+ NULL);
+
+ check_server (server, "test2.localhost", 6668, FALSE);
+
+ g_object_unref (server);
+}
+END_TEST
+
+static gboolean modified = FALSE;
+
+static void
+modified_cb (EmpathyIrcServer *server,
+ gpointer unused)
+{
+ modified = TRUE;
+}
+
+START_TEST (test_modified_signal)
+{
+ EmpathyIrcServer *server;
+
+ server = empathy_irc_server_new ("test.localhost", 6667, TRUE);
+ fail_if (server == NULL);
+
+ g_signal_connect (server, "modified", G_CALLBACK (modified_cb), NULL);
+
+ /* address */
+ g_object_set (server, "address", "test2.localhost", NULL);
+ fail_if (!modified);
+ modified = FALSE;
+ g_object_set (server, "address", "test2.localhost", NULL);
+ fail_if (modified);
+
+ /* port */
+ g_object_set (server, "port", 6668, NULL);
+ fail_if (!modified);
+ modified = FALSE;
+ g_object_set (server, "port", 6668, NULL);
+ fail_if (modified);
+
+ /* ssl */
+ g_object_set (server, "ssl", FALSE, NULL);
+ fail_if (!modified);
+ modified = FALSE;
+ g_object_set (server, "ssl", FALSE, NULL);
+ fail_if (modified);
+
+ g_object_unref (server);
+}
+END_TEST
+
+TCase *
+make_empathy_irc_server_tcase (void)
+{
+ TCase *tc = tcase_create ("empathy-irc-server");
+ tcase_add_test (tc, test_empathy_irc_server_new);
+ tcase_add_test (tc, test_property_change);
+ tcase_add_test (tc, test_modified_signal);
+ return tc;
+}
diff --git a/trunk/tests/check-empathy-utils.c b/trunk/tests/check-empathy-utils.c
new file mode 100644
index 000000000..faf261058
--- /dev/null
+++ b/trunk/tests/check-empathy-utils.c
@@ -0,0 +1,29 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include <check.h>
+#include "check-helpers.h"
+#include "check-libempathy.h"
+
+#include <libempathy/empathy-utils.h>
+
+START_TEST (test_empathy_substring)
+{
+ gchar *tmp;
+
+ tmp = empathy_substring ("empathy", 2, 6);
+ fail_if (tmp == NULL);
+ fail_if (strcmp (tmp, "path") != 0);
+
+ g_free (tmp);
+}
+END_TEST
+
+TCase *
+make_empathy_utils_tcase (void)
+{
+ TCase *tc = tcase_create ("empathy-utils");
+ tcase_add_test (tc, test_empathy_substring);
+ return tc;
+}
diff --git a/trunk/tests/check-helpers.c b/trunk/tests/check-helpers.c
new file mode 100644
index 000000000..7a7663fce
--- /dev/null
+++ b/trunk/tests/check-helpers.c
@@ -0,0 +1,63 @@
+/*
+ * check-helpers.c - Source for some check helpers
+ * 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
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "check-helpers.h"
+
+static gboolean expecting_critical = FALSE;
+static gboolean received_critical = FALSE;
+
+static void
+check_helper_log_critical_func (const gchar *log_damain,
+ GLogLevelFlags log_level,
+ const gchar *message,
+ gpointer user_data)
+{
+
+ if (!expecting_critical)
+ {
+ fail("Unexpected critical message: %s\n", message);
+ }
+
+ g_assert (log_level & G_LOG_LEVEL_CRITICAL);
+
+ received_critical = TRUE;
+}
+
+gboolean
+got_critical (void)
+{
+ return received_critical;
+}
+
+void
+expect_critical (gboolean expected)
+{
+ expecting_critical = expected;
+ received_critical = FALSE;
+}
+
+void
+check_helpers_init (void)
+{
+ g_log_set_handler (NULL, G_LOG_LEVEL_CRITICAL,
+ check_helper_log_critical_func, NULL);
+}
diff --git a/trunk/tests/check-helpers.h b/trunk/tests/check-helpers.h
new file mode 100644
index 000000000..b71b3b65b
--- /dev/null
+++ b/trunk/tests/check-helpers.h
@@ -0,0 +1,43 @@
+/*
+ * check-helpers.c - Source for some check helpers
+ * Copyright (C) 2007 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 __CHECK_HELPERS_H__
+#define __CHECK_HELPERS_H__
+
+#include <glib.h>
+#include <check.h>
+
+void
+check_helpers_init (void);
+
+void
+expect_critical (gboolean expected);
+
+gboolean
+got_critical (void);
+
+#define fail_unless_critical(expr, ...) \
+G_STMT_START { \
+ expect_critical (TRUE); \
+ expr; \
+ _fail_unless (got_critical (), __FILE__, __LINE__, \
+ "Expected g_critical, got none", ## __VA_ARGS__, NULL); \
+ expect_critical (FALSE); \
+} G_STMT_END;
+
+#endif /* #ifndef __CHECK_HELPERS_H__ */
diff --git a/trunk/tests/check-irc-helper.c b/trunk/tests/check-irc-helper.c
new file mode 100644
index 000000000..477b134c2
--- /dev/null
+++ b/trunk/tests/check-irc-helper.c
@@ -0,0 +1,80 @@
+#include "check-irc-helper.h"
+
+void
+check_server (EmpathyIrcServer *server,
+ const gchar *_address,
+ guint _port,
+ gboolean _ssl)
+{
+ gchar *address;
+ guint port;
+ gboolean ssl;
+
+ fail_if (server == NULL);
+
+ g_object_get (server,
+ "address", &address,
+ "port", &port,
+ "ssl", &ssl,
+ NULL);
+
+ fail_if (address == NULL || strcmp (address, _address) != 0);
+ fail_if (port != _port);
+ fail_if (ssl != _ssl);
+
+ g_free (address);
+}
+
+void
+check_network (EmpathyIrcNetwork *network,
+ const gchar *_name,
+ const gchar *_charset,
+ struct server_t *_servers,
+ guint nb_servers)
+{
+ gchar *name, *charset;
+ GSList *servers, *l;
+ guint i;
+
+ fail_if (network == NULL);
+
+ g_object_get (network,
+ "name", &name,
+ "charset", &charset,
+ NULL);
+
+ fail_if (name == NULL || strcmp (name, _name) != 0);
+ fail_if (charset == NULL || strcmp (charset, _charset) != 0);
+
+ servers = empathy_irc_network_get_servers (network);
+ fail_if (g_slist_length (servers) != nb_servers);
+
+ /* Is that the right servers ? */
+ for (l = servers, i = 0; l != NULL; l = g_slist_next (l), i++)
+ {
+ EmpathyIrcServer *server;
+ gchar *address;
+ guint port;
+ gboolean ssl;
+
+ server = l->data;
+
+ g_object_get (server,
+ "address", &address,
+ "port", &port,
+ "ssl", &ssl,
+ NULL);
+
+ fail_if (address == NULL || strcmp (address, _servers[i].address)
+ != 0);
+ fail_if (port != _servers[i].port);
+ fail_if (ssl != _servers[i].ssl);
+
+ g_free (address);
+ }
+
+ g_slist_foreach (servers, (GFunc) g_object_unref, NULL);
+ g_slist_free (servers);
+ g_free (name);
+ g_free (charset);
+}
diff --git a/trunk/tests/check-irc-helper.h b/trunk/tests/check-irc-helper.h
new file mode 100644
index 000000000..32a34b60d
--- /dev/null
+++ b/trunk/tests/check-irc-helper.h
@@ -0,0 +1,27 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include <check.h>
+#include "check-helpers.h"
+
+#include <libempathy/empathy-irc-server.h>
+#include <libempathy/empathy-irc-network.h>
+#include <libempathy/empathy-irc-network-manager.h>
+
+#ifndef __CHECK_IRC_HELPER_H__
+#define __CHECK_IRC_HELPER_H__
+
+struct server_t
+{
+ gchar *address;
+ guint port;
+ gboolean ssl;
+};
+
+void check_server (EmpathyIrcServer *server, const gchar *_address,
+ guint _port, gboolean _ssl);
+
+void check_network (EmpathyIrcNetwork *network, const gchar *_name,
+ const gchar *_charset, struct server_t *_servers, guint nb_servers);
+
+#endif /* __CHECK_IRC_HELPER_H__ */
diff --git a/trunk/tests/check-libempathy.h b/trunk/tests/check-libempathy.h
new file mode 100644
index 000000000..0f9388dcf
--- /dev/null
+++ b/trunk/tests/check-libempathy.h
@@ -0,0 +1,9 @@
+#ifndef __CHECK_LIBEMPATHY__
+#define __CHECK_LIBEMPATHY__
+
+TCase * make_empathy_utils_tcase (void);
+TCase * make_empathy_irc_server_tcase (void);
+TCase * make_empathy_irc_network_tcase (void);
+TCase * make_empathy_irc_network_manager_tcase (void);
+
+#endif /* #ifndef __CHECK_LIBEMPATHY__ */
diff --git a/trunk/tests/check-main.c b/trunk/tests/check-main.c
new file mode 100644
index 000000000..f0e366d03
--- /dev/null
+++ b/trunk/tests/check-main.c
@@ -0,0 +1,43 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <glib-object.h>
+
+#include <check.h>
+
+#include "check-helpers.h"
+#include "check-libempathy.h"
+
+#include "config.h"
+
+static Suite *
+make_libempathy_suite (void)
+{
+ Suite *s = suite_create ("libempathy");
+
+ suite_add_tcase (s, make_empathy_utils_tcase ());
+ suite_add_tcase (s, make_empathy_irc_server_tcase ());
+ suite_add_tcase (s, make_empathy_irc_network_tcase ());
+ suite_add_tcase (s, make_empathy_irc_network_manager_tcase ());
+
+ return s;
+}
+
+int
+main (void)
+{
+ int number_failed = 0;
+ Suite *s;
+ SRunner *sr;
+
+ check_helpers_init ();
+ g_type_init ();
+
+ s = make_libempathy_suite ();
+ sr = srunner_create (s);
+ srunner_run_all (sr, CK_NORMAL);
+ number_failed += srunner_ntests_failed (sr);
+ srunner_free (sr);
+
+ return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/trunk/tests/contact-manager.c b/trunk/tests/contact-manager.c
new file mode 100644
index 000000000..75bfc7fae
--- /dev/null
+++ b/trunk/tests/contact-manager.c
@@ -0,0 +1,34 @@
+#include <stdlib.h>
+
+#include <glib.h>
+#include <libempathy/empathy-contact-manager.h>
+
+static gboolean
+time_out (gpointer main_loop)
+{
+ g_main_loop_quit (main_loop);
+
+ return FALSE;
+}
+
+int
+main (int argc, char **argv)
+{
+ EmpathyContactManager *manager;
+ GMainLoop *main_loop;
+
+ g_type_init ();
+
+ main_loop = g_main_loop_new (NULL, FALSE);
+ manager = empathy_contact_manager_new ();
+
+ g_timeout_add_seconds (5, time_out, main_loop);
+
+ g_main_loop_run (main_loop);
+
+ g_object_unref (manager);
+ g_main_loop_unref (main_loop);
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/trunk/tests/contact-run-until-ready-2.c b/trunk/tests/contact-run-until-ready-2.c
new file mode 100644
index 000000000..03c7e8a64
--- /dev/null
+++ b/trunk/tests/contact-run-until-ready-2.c
@@ -0,0 +1,63 @@
+#include <stdlib.h>
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <libempathy/empathy-contact-factory.h>
+#include <libempathy/empathy-contact-manager.h>
+#include <libmissioncontrol/mc-account.h>
+
+static void
+pending_cb (EmpathyContactManager *manager,
+ EmpathyContact *contact,
+ EmpathyContact *actor,
+ guint reason,
+ gchar *message,
+ gboolean is_pending,
+ gpointer data)
+{
+ if (!is_pending) {
+ return;
+ }
+
+ g_print ("Contact handle=%d alias=%s\n",
+ empathy_contact_get_handle (contact),
+ empathy_contact_get_name (contact));
+
+ empathy_contact_run_until_ready (contact,
+ EMPATHY_CONTACT_READY_NAME,
+ NULL);
+
+ g_print ("Contact ready: handle=%d alias=%s ready=%d\n",
+ empathy_contact_get_handle (contact),
+ empathy_contact_get_name (contact),
+ empathy_contact_get_ready (contact));
+
+ g_object_unref (manager);
+ gtk_main_quit ();
+}
+
+static gboolean
+callback (gpointer data)
+{
+ EmpathyContactManager *manager;
+
+ manager = empathy_contact_manager_new ();
+ g_signal_connect (manager, "pendings-changed",
+ G_CALLBACK (pending_cb),
+ NULL);
+
+ return FALSE;
+}
+
+int
+main (int argc, char **argv)
+{
+ gtk_init (&argc, &argv);
+
+ g_idle_add (callback, NULL);
+
+ gtk_main ();
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/trunk/tests/contact-run-until-ready.c b/trunk/tests/contact-run-until-ready.c
new file mode 100644
index 000000000..1d263dd05
--- /dev/null
+++ b/trunk/tests/contact-run-until-ready.c
@@ -0,0 +1,53 @@
+#include <stdlib.h>
+
+#include <glib.h>
+#include <gtk/gtk.h>
+#include <libempathy/empathy-contact-factory.h>
+#include <libmissioncontrol/mc-account.h>
+
+static gboolean
+callback (gpointer data)
+{
+ EmpathyContactFactory *factory;
+ McAccount *account;
+ EmpathyContact *contact;
+ EmpathyContactReady ready_flags;
+
+ factory = empathy_contact_factory_new ();
+ account = mc_account_lookup ("jabber0");
+ contact = empathy_contact_factory_get_from_handle (factory, account, 2);
+
+ g_print ("Contact handle=%d alias=%s\n",
+ empathy_contact_get_handle (contact),
+ empathy_contact_get_name (contact));
+
+ ready_flags = EMPATHY_CONTACT_READY_HANDLE | EMPATHY_CONTACT_READY_NAME;
+ empathy_contact_run_until_ready (contact, ready_flags, NULL);
+
+ g_print ("Contact ready: handle=%d alias=%s ready=%d needed-ready=%d\n",
+ empathy_contact_get_handle (contact),
+ empathy_contact_get_name (contact),
+ empathy_contact_get_ready (contact),
+ ready_flags);
+
+ g_object_unref (factory);
+ g_object_unref (account);
+ g_object_unref (contact);
+
+ gtk_main_quit ();
+
+ return FALSE;
+}
+
+int
+main (int argc, char **argv)
+{
+ gtk_init (&argc, &argv);
+
+ g_idle_add (callback, NULL);
+
+ gtk_main ();
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/trunk/tests/dlopen.supp b/trunk/tests/dlopen.supp
new file mode 100644
index 000000000..f6300a3a7
--- /dev/null
+++ b/trunk/tests/dlopen.supp
@@ -0,0 +1,127 @@
+{
+ <dlopen>
+ Addrcheck,Memcheck:Cond
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ fun:dlopen
+}
+{
+ <dlopen>
+ Addrcheck,Memcheck:Addr4
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ fun:dlopen
+}
+{
+ <dlopen>
+ Addrcheck,Memcheck:Cond
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ fun:dlopen
+}
+{
+ <dlsym>
+ Addrcheck,Memcheck:Addr4
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libc-2.5.so
+ fun:_dl_sym
+ obj:/lib/i686/cmov/libdl-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ fun:dlsym
+}
+{
+ <dlsym>
+ Addrcheck,Memcheck:Cond
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libc-2.5.so
+ fun:_dl_sym
+ obj:/lib/i686/cmov/libdl-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ fun:dlsym
+}
+{
+ <dlopen>
+ Addrcheck,Memcheck:Addr1
+ fun:malloc
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ fun:dlopen
+}
+{
+ <dlopen>
+ Addrcheck,Memcheck:Addr1
+ fun:malloc
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ fun:dlopen
+}
+{
+ <dlopen>
+ Addrcheck,Memcheck:Addr1
+ fun:malloc
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ fun:dlopen
+}
+{
+ <libdl>
+ Addrcheck,Memcheck:Addr4
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+ obj:/lib/ld-2.5.so
+ obj:/lib/i686/cmov/libdl-2.5.so
+}
diff --git a/trunk/tests/valgrind.supp b/trunk/tests/valgrind.supp
new file mode 100644
index 000000000..29bb04547
--- /dev/null
+++ b/trunk/tests/valgrind.supp
@@ -0,0 +1,711 @@
+### this file contains suppressions for valgrind when running
+### the gibber/telepathy-salut unit tests based on the gstreamer one
+
+### syscall suppressions
+
+{
+ <clone on Wim's Debian>
+ Memcheck:Param
+ clone(parent_tidptr)
+ fun:clone
+ fun:clone
+}
+
+{
+ <clone on Wim's Debian>
+ Memcheck:Param
+ clone(child_tidptr)
+ fun:clone
+ fun:clone
+}
+
+{
+ <clone on Wim's Debian>
+ Memcheck:Param
+ clone(tlsinfo)
+ fun:clone
+ fun:clone
+}
+
+### glibc suppressions
+
+{
+ <conditional jump on wim's debian 2/2/06>
+ Memcheck:Cond
+ obj:/lib/ld-2.3.*.so
+ fun:dl_open_worker
+ obj:/lib/ld-2.3.*.so
+ fun:_dl_open
+ fun:dlopen_doit
+ obj:/lib/ld-2.3.*.so
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+
+# glibc does not deallocate thread-local storage
+
+{
+ <tls>
+ Memcheck:Leak
+ fun:calloc
+ fun:_dl_allocate_tls
+ fun:pthread_create@@*
+}
+
+# I get an extra stack entry on x86/dapper
+{
+ <tls>
+ Memcheck:Leak
+ fun:calloc
+ obj:/lib/ld-2.3.*.so
+ fun:_dl_allocate_tls
+ fun:pthread_create@@*
+}
+
+
+{
+ <pthread strstr>
+ Memcheck:Cond
+ fun:strstr
+ fun:__pthread_initialize_minimal
+ obj:/lib/libpthread-*.so
+ obj:/lib/libpthread-*.so
+ fun:call_init
+ fun:_dl_init
+ obj:/lib/ld-*.so
+}
+
+# a thread-related free problem in glibc from Edgard
+{
+ __libc_freeres_rw_acess
+ Memcheck:Addr4
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ obj:*
+ fun:__libc_freeres
+}
+
+{
+ <a conditional jump on wim's debian>
+ Memcheck:Cond
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+}
+
+# g_module_open-related problems
+{
+ <started showing up on fc4-quick>
+ Memcheck:Addr2
+ fun:memcpy
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+
+{
+ <started showing up on fc4-quick>
+ Memcheck:Addr4
+ fun:memcpy
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+
+{
+ <g_module_open on wim's debian>
+ Memcheck:Cond
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ fun:do_sym
+ fun:_dl_sym
+ fun:dlsym_doit
+ obj:/lib/ld-2.3.*.so
+ fun:_dlerror_run
+ fun:dlsym
+ fun:g_module_symbol
+ fun:g_module_open
+}
+
+{
+ <g_module_open on wim's debian>
+ Memcheck:Cond
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ fun:dl_open_worker
+ obj:/lib/ld-2.3.*.so
+ fun:_dl_open
+ fun:dlopen_doit
+ obj:/lib/ld-2.3.*.so
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+{
+ <g_module_open on wim's debian>
+ Memcheck:Cond
+ obj:/lib/ld-2.3.*.so
+ fun:dl_open_worker
+ obj:/lib/ld-2.3.*.so
+ fun:_dl_open
+ fun:dlopen_doit
+ obj:/lib/ld-2.3.*.so
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+
+{
+ <leak on wim's debian in g_module_open>
+ Memcheck:Leak
+ fun:malloc
+ obj:/lib/ld-2.3.*.so
+ fun:dl_open_worker
+ obj:/lib/ld-2.3.*.so
+ fun:_dl_open
+ fun:dlopen_doit
+ obj:/lib/ld-2.3.*.so
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+
+{
+ <invalid read on wim's debian>
+ Memcheck:Addr4
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ fun:dl_open_worker
+ obj:/lib/ld-2.3.*.so
+ fun:_dl_open
+ fun:dlopen_doit
+ obj:/lib/ld-2.3.*.so
+}
+
+{
+ <invalid read on wim's debian>
+ Memcheck:Addr4
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ fun:dl_open_worker
+ obj:/lib/ld-2.3.*.so
+ fun:_dl_open
+ fun:dlopen_doit
+ obj:/lib/ld-2.3.*.so
+ fun:_dlerror_run
+}
+
+{
+ <invalid read on wim's debian - 2006-02-02>
+ Memcheck:Addr4
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ fun:dl_open_worker
+ obj:/lib/ld-2.3.*.so
+ fun:_dl_open
+ fun:dlopen_doit
+ obj:/lib/ld-2.3.*.so
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+
+{
+ <invalid read on wim's debian - 2006-02-02>
+ Memcheck:Addr4
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ fun:dl_open_worker
+ obj:/lib/ld-2.3.*.so
+ fun:_dl_open
+ fun:dlopen_doit
+ obj:/lib/ld-2.3.*.so
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+
+{
+ <invalid read on wim's debian - 2006-02-02>
+ Memcheck:Addr4
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ fun:do_sym
+ fun:_dl_sym
+ fun:dlsym_doit
+ obj:/lib/ld-2.3.*.so
+ fun:_dlerror_run
+ fun:dlsym
+ fun:g_module_symbol
+ fun:g_module_open
+}
+
+{
+ <futex on Andy's 64-bit ubuntu>
+ Memcheck:Param
+ futex(uaddr2)
+ fun:pthread_once
+ obj:/lib/libc-2.3.*.so
+ obj:/lib/libc-2.3.*.so
+ fun:mbsnrtowcs
+ fun:vfprintf
+ fun:vsprintf
+ fun:sprintf
+ obj:/lib/libc-2.3.*.so
+}
+
+# valgrind doesn't allow me to specify a suppression for Addr1, Addr2, Addr4
+# as Addr*, so 3 copies for that; and then 2 of each for that pesky memcpy
+{
+ <Invalid read of size 1, 2, 4 on thomas's FC4>
+ Memcheck:Addr1
+ fun:_dl_signal_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+
+{
+ <Invalid read of size 1, 2, 4 on thomas's FC4>
+ Memcheck:Addr2
+ fun:_dl_signal_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+{
+ <Invalid read of size 1, 2, 4 on thomas's FC4>
+ Memcheck:Addr4
+ fun:_dl_signal_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+
+{
+ <Invalid read of size 1, 2, 4 on thomas's FC4>
+ Memcheck:Addr1
+ fun:memcpy
+ fun:_dl_signal_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+
+{
+ <Invalid read of size 1, 2, 4 on thomas's FC4>
+ Memcheck:Addr2
+ fun:memcpy
+ fun:_dl_signal_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+{
+ <Invalid read of size 1, 2, 4 on thomas's FC4>
+ Memcheck:Addr4
+ fun:memcpy
+ fun:_dl_signal_error
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+ fun:_dl_open
+ fun:dlopen_doit
+ fun:_dl_catch_error
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+ fun:g_module_open
+}
+
+{
+ <Addr8 on Andy's AMD64 ubuntu in dl_open>
+ Memcheck:Addr8
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/libc-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ fun:_dl_open
+ obj:/lib/libdl-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+}
+
+{
+ <Conditional jump on Andy's AMD64 ubuntu>
+ Memcheck:Cond
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/libc-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ fun:_dl_open
+ obj:/lib/libdl-2.3.*.so
+ obj:/lib/ld-2.3.*.so
+ obj:/lib/libdl-2.3.*.so
+ fun:dlopen
+ fun:g_module_open
+}
+
+{
+ <Mike's x86 dapper>
+ Memcheck:Addr4
+ obj:/lib/ld-2.3.6.so
+ obj:/lib/ld-2.3.6.so
+ obj:/lib/tls/i686/cmov/libc-2.3.6.so
+ obj:/lib/ld-2.3.6.so
+ fun:_dl_open
+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+ obj:/lib/ld-2.3.6.so
+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+ fun:dlopen
+}
+
+{
+ <Mike's x86 dapper>
+ Memcheck:Cond
+ obj:/lib/ld-2.3.6.so
+ obj:/lib/tls/i686/cmov/libc-2.3.6.so
+ obj:/lib/ld-2.3.6.so
+ fun:_dl_open
+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+ obj:/lib/ld-2.3.6.so
+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+ fun:dlopen
+}
+
+{
+ <Another dapper one>
+ Memcheck:Cond
+ obj:/lib/ld-2.3.6.so
+ obj:/lib/ld-2.3.6.so
+ obj:/lib/ld-2.3.6.so
+ obj:/lib/tls/i686/cmov/libc-2.3.6.so
+ obj:/lib/ld-2.3.6.so
+ fun:_dl_open
+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+ obj:/lib/ld-2.3.6.so
+ obj:/lib/tls/i686/cmov/libdl-2.3.6.so
+ fun:dlopen
+}
+
+### glib suppressions
+{
+ <g_parse_debug_string>
+ Memcheck:Cond
+ fun:g_parse_debug_string
+ obj:/usr/lib*/libglib-2.0.so.*
+ fun:g_slice_alloc
+ fun:g_slice_alloc0
+}
+
+{
+ <g_type_init malloc>
+ Memcheck:Leak
+ fun:malloc
+ fun:g_malloc
+ fun:g_strdup
+ fun:g_quark_from_string
+ obj:*
+ obj:*
+ fun:g_type_register_fundamental
+ obj:*
+ fun:g_type_init_with_debug_flags
+ fun:g_type_init
+}
+
+{
+ <g_type_init calloc>
+ Memcheck:Leak
+ fun:calloc
+ fun:g_malloc0
+ obj:*
+ obj:*
+ fun:g_type_register_fundamental
+}
+
+{
+ <g_type_init calloc 2>
+ Memcheck:Leak
+ fun:calloc
+ fun:g_malloc0
+ obj:*
+ obj:*
+ fun:g_type_init_with_debug_flags
+}
+
+{
+ <g_type_init calloc 3, GSlice version>
+ Memcheck:Leak
+ fun:calloc
+ fun:g_malloc0
+ fun:g_slice_alloc
+ obj:*
+ obj:*
+ fun:g_type_init_with_debug_flags
+}
+
+#pthread memleaks
+
+{
+ Thread creation leak
+ Memcheck:Leak
+ fun:calloc
+ fun:allocate_dtv
+ fun:_dl_allocate*
+ fun:_dl_allocate*
+ fun:__pthread_initialize_minimal
+}
+
+{
+ Thread management leak
+ Memcheck:Leak
+ fun:calloc
+ fun:allocate_dtv
+ fun:_dl_allocate*
+ fun:_dl_allocate*
+ fun:__pthread_*
+}
+
+{
+ Thread management leak 2
+ Memcheck:Leak
+ fun:memalign
+ fun:_dl_allocate*
+ fun:_dl_allocate*
+ fun:__pthread_*
+}
+
+{
+ pthread_create Syscall param write(buf) points to uninitialised byte(s)
+ Memcheck:Param
+ write(buf)
+ fun:pthread_create@@GLIBC_2.2.5
+ fun:g_thread_create*
+
+}
+
+# nss_parse_* memleak (used by g_option_context_parse)
+{
+ nss_parse_* memleak
+ Memcheck:Leak
+ fun:malloc
+ fun:nss_parse_service_list
+ fun:__nss_database_lookup
+}
+
+{
+ <annoying read error inside dlopen stuff on Ubuntu Dapper x86_64>
+ Memcheck:Addr8
+ obj:/lib/ld-2.3.6.so
+}
+
+{
+ <Ubuntu Dapper x86_64>
+ Memcheck:Param
+ futex(uaddr2)
+ fun:pthread_once
+ obj:/lib/libc-2.3.6.so
+ obj:/lib/libc-2.3.6.so
+ fun:setlocale
+ fun:init_pre
+ fun:g_option_context_parse
+}
+
+{
+ <Ubuntu Dapper x86_64 dlopen stuff again>
+ Memcheck:Cond
+ obj:/lib/ld-2.3.6.so
+ obj:/lib/ld-2.3.6.so
+ fun:_dl_open
+ obj:/lib/libdl-2.3.6.so
+ obj:/lib/ld-2.3.6.so
+ obj:/lib/libdl-2.3.6.so
+ fun:dlopen
+ fun:g_module_open
+}
+# this exists in a bunch of different variations, hence the short tail/trace
+{
+ <dlopen invalid read of size 4 suppression on tpm's Ubuntu edgy/x86>
+ Memcheck:Addr4
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+}
+{
+ <and the same for 64bit systems>
+ Memcheck:Addr8
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+}
+
+# More edgy suppressions (Mike)
+{
+ <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
+ Memcheck:Cond
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ fun:dlopen_doit
+ obj:/lib/ld-2.4.so
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+}
+
+{
+ <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
+ Memcheck:Cond
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ fun:dlopen_doit
+ obj:/lib/ld-2.4.so
+ fun:_dlerror_run
+ fun:dlopen@@GLIBC_2.1
+}
+
+{
+ <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
+ Memcheck:Cond
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ fun:do_sym
+ fun:_dl_sym
+}
+
+# This one's overly general, but there's zero other information in the stack
+# trace - just these five lines!
+{
+ <dlopen Condition jump suppressions for Ubuntu Edgy/x86>
+ Memcheck:Cond
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+ obj:/lib/ld-2.4.so
+}
+
+{
+ <tls leaks on Edgy/x86>
+ Memcheck:Leak
+ fun:calloc
+ obj:/lib/ld-2.4.so
+ fun:_dl_allocate_tls
+ fun:pthread_create@@GLIBC_2.1
+}
+
+{
+ <libcdio 0.76 leak>
+ Memcheck:Leak
+ fun:calloc
+ obj:/usr/lib/libcdio.so.6.0.1
+ fun:cdio_open_am_linux
+ obj:/usr/lib/libcdio.so.6.0.1
+ fun:cdio_open_am
+}
+
+# TLS leaks for feisty/x86
+{
+ <tls leaks on Feisty/x86>
+ Memcheck:Leak
+ fun:calloc
+ fun:allocate_dtv
+ fun:_dl_allocate_tls
+ fun:pthread_create@@GLIBC_2.1
+}
+
+{
+ <Addr8 on Jan's AMD64 ubuntu Feisty in dl_open>
+ Memcheck:Addr8
+ obj:/lib/ld-2.5.so
+}
+
+{
+ <GLib caching the home dir>
+ Memcheck:Leak
+ fun:malloc
+ obj:/lib/libc-*.so
+ fun:__nss_database_lookup
+ obj:*
+ obj:*
+ fun:getpwnam_r
+ fun:g_get_any_init_do
+ fun:g_get_home_dir
+}
+{
+ <GLib caching the user name>
+ Memcheck:Leak
+ fun:malloc
+ obj:/lib/libc-*.so
+ fun:__nss_database_lookup
+ obj:*
+ obj:*
+ fun:getpwnam_r
+ fun:g_get_any_init_do
+ fun:g_get_user_name
+}
diff --git a/trunk/tests/xml/.gitignore b/trunk/tests/xml/.gitignore
new file mode 100644
index 000000000..01af91dc1
--- /dev/null
+++ b/trunk/tests/xml/.gitignore
@@ -0,0 +1 @@
+user-irc-networks.xml
diff --git a/trunk/tests/xml/Makefile.am b/trunk/tests/xml/Makefile.am
new file mode 100644
index 000000000..eafe8de6c
--- /dev/null
+++ b/trunk/tests/xml/Makefile.am
@@ -0,0 +1,3 @@
+EXTRA_DIST = \
+ default-irc-networks-sample.xml \
+ user-irc-networks-sample.xml
diff --git a/trunk/tests/xml/default-irc-networks-sample.xml b/trunk/tests/xml/default-irc-networks-sample.xml
new file mode 100644
index 000000000..257919c27
--- /dev/null
+++ b/trunk/tests/xml/default-irc-networks-sample.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<networks>
+ <network id="freenode" name="Freenode">
+ <servers>
+ <server address="irc.freenode.net" port="6667" ssl="FALSE" />
+ <server address="irc.eu.freenode.net" port="6667" ssl="FALSE" />
+ </servers>
+ </network>
+
+ <network id="gimpnet" name="GIMPNet">
+ <servers>
+ <server address="irc.gimp.org" port="6667" ssl="FALSE" />
+ <server address="irc.us.gimp.org" port="6667" ssl="FALSE" />
+ </servers>
+ </network>
+
+ <network id="testsrv" name="Test Server" network_charset="ISO-8859-1">
+ <servers>
+ <server address="irc.test.org" port="6669" ssl="TRUE" />
+ </servers>
+ </network>
+
+ <network id="undernet" name="Undernet">
+ <servers>
+ <server address="eu.undernet.org" port="6667" ssl="FALSE" />
+ </servers>
+ </network>
+
+</networks>
diff --git a/trunk/tests/xml/user-irc-networks-sample.xml b/trunk/tests/xml/user-irc-networks-sample.xml
new file mode 100644
index 000000000..9e4f08693
--- /dev/null
+++ b/trunk/tests/xml/user-irc-networks-sample.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<networks>
+ <network id="gimpnet" name="GIMPNet">
+ <servers>
+ <server address="irc.gimp.org" port="6667" ssl="FALSE" />
+ <server address="irc.us.gimp.org" port="6667" ssl="FALSE" />
+ <server address="irc.au.gimp.org" port="6667" ssl="FALSE" />
+ </servers>
+ </network>
+
+ <network id="testsrv" name="Test Server" dropped="1"/>
+
+ <network id="mysrv" name="My Server">
+ <servers>
+ <server address="irc.mysrv.net" port="7495" ssl="TRUE" />
+ </servers>
+ </network>
+
+ <network id="anothersrv" name="Another Server">
+ <servers>
+ <server address="irc.anothersrv.be" port="6660" ssl="FALSE" />
+ </servers>
+ </network>
+
+</networks>
diff --git a/trunk/tools/.gitignore b/trunk/tools/.gitignore
new file mode 100644
index 000000000..2d3ab864e
--- /dev/null
+++ b/trunk/tools/.gitignore
@@ -0,0 +1,2 @@
+.py[co]
+telepathy-glib-env
diff --git a/trunk/tools/Makefile.am b/trunk/tools/Makefile.am
new file mode 100644
index 000000000..bd1f4c002
--- /dev/null
+++ b/trunk/tools/Makefile.am
@@ -0,0 +1,55 @@
+abs_top_builddir = @abs_top_builddir@
+
+noinst_SCRIPTS = telepathy-glib-env
+
+telepathy-glib-env: telepathy-glib-env.in Makefile
+ sed -e 's![@]abs_top_builddir[@]!$(abs_top_builddir)!' $< > $@
+ chmod +x $@
+
+EXTRA_DIST = \
+ c-constants-generator.xsl \
+ check-coding-style.mk \
+ check-c-style.sh \
+ check-misc.sh \
+ check-whitespace.sh \
+ c-interfaces-generator.xsl \
+ doc-generator.xsl \
+ glib-client-gen.py \
+ glib-client-marshaller-gen.py \
+ glib-errors-enum-body.xsl \
+ glib-errors-enum-header.xsl \
+ glib-interfaces-generator.xsl \
+ glib-interfaces-body-generator.xsl \
+ glib-ginterface-gen.py \
+ glib-gtypes-generator.py \
+ glib-signals-marshal-gen.py \
+ gobject-foo.py \
+ identity.xsl \
+ libglibcodegen.py \
+ ls-interfaces.xsl \
+ make-all-async.xsl \
+ spec-to-introspect.xsl \
+ telepathy-glib-env.in \
+ with-session-bus.sh
+
+CLEANFILES = libglibcodegen.pyc libglibcodegen.pyo $(noinst_SCRIPTS)
+
+all: $(EXTRA_DIST)
+
+glib-client-marshaller-gen.py: libglibcodegen.py
+ touch $@
+glib-ginterface-gen.py: libglibcodegen.py
+ touch $@
+glib-gtypes-generator.py: libglibcodegen.py
+ touch $@
+glib-signals-marshal-gen.py: libglibcodegen.py
+ touch $@
+
+TELEPATHY_SPEC_SRCDIR = $(top_srcdir)/../telepathy-spec
+maintainer-update-from-telepathy-spec:
+ set -e && cd $(srcdir) && \
+ for x in $(EXTRA_DIST); do \
+ if test -f $(TELEPATHY_SPEC_SRCDIR)/tools/$$x; then \
+ cp $(TELEPATHY_SPEC_SRCDIR)/tools/$$x $$x; \
+ fi; \
+ done
diff --git a/trunk/tools/c-constants-generator.xsl b/trunk/tools/c-constants-generator.xsl
new file mode 100644
index 000000000..18b2e495d
--- /dev/null
+++ b/trunk/tools/c-constants-generator.xsl
@@ -0,0 +1,299 @@
+<!-- Stylesheet to extract C enumerations from the Telepathy spec.
+The master copy of this stylesheet is in telepathy-glib - please make any
+changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+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.
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+ exclude-result-prefixes="tp">
+
+ <xsl:output method="text" indent="no" encoding="ascii"/>
+
+ <xsl:param name="mixed-case-prefix" select="''"/>
+
+ <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
+ <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
+
+ <xsl:variable name="upper-case-prefix" select="concat(translate($mixed-case-prefix, $lower, $upper), '_')"/>
+ <xsl:variable name="lower-case-prefix" select="concat(translate($mixed-case-prefix, $upper, $lower), '_')"/>
+
+
+ <xsl:template match="tp:flags">
+ <xsl:variable name="name">
+ <xsl:choose>
+ <xsl:when test="@plural">
+ <xsl:value-of select="@plural"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="value-prefix">
+ <xsl:choose>
+ <xsl:when test="@singular">
+ <xsl:value-of select="@singular"/>
+ </xsl:when>
+ <xsl:when test="@value-prefix">
+ <xsl:value-of select="@value-prefix"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:text>/**&#10;</xsl:text>
+ <xsl:text> *&#10;</xsl:text>
+ <xsl:value-of select="translate(concat($mixed-case-prefix, $name), '_', '')"/>
+ <xsl:text>:&#10;</xsl:text>
+ <xsl:apply-templates mode="flag-or-enumvalue-gtkdoc">
+ <xsl:with-param name="value-prefix" select="$value-prefix"/>
+ </xsl:apply-templates>
+ <xsl:text> *&#10;</xsl:text>
+ <xsl:if test="tp:docstring">
+ <xsl:text> * &lt;![CDATA[</xsl:text>
+ <xsl:value-of select="translate(string (tp:docstring), '&#13;&#10;', ' ')"/>
+ <xsl:text>]]&gt;&#10;</xsl:text>
+ <xsl:text> *&#10;</xsl:text>
+ </xsl:if>
+ <xsl:text> * Bitfield/set of flags generated from the Telepathy specification.&#10;</xsl:text>
+ <xsl:text> */&#10;</xsl:text>
+ <xsl:text>typedef enum {&#10;</xsl:text>
+ <xsl:apply-templates>
+ <xsl:with-param name="value-prefix" select="$value-prefix"/>
+ </xsl:apply-templates>
+ <xsl:text>} </xsl:text>
+ <xsl:value-of select="translate(concat($mixed-case-prefix, $name), '_', '')"/>
+ <xsl:text>;&#10;</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="text()" mode="flag-or-enumvalue-gtkdoc"/>
+
+ <xsl:template match="tp:enumvalue" mode="flag-or-enumvalue-gtkdoc">
+ <xsl:param name="value-prefix"/>
+ <xsl:text> * @</xsl:text>
+ <xsl:value-of select="translate(concat($upper-case-prefix, $value-prefix, '_', @suffix), $lower, $upper)"/>
+ <xsl:text>: &lt;![CDATA[</xsl:text>
+ <xsl:value-of select="translate(string(tp:docstring), '&#13;&#10;', ' ')"/>
+ <xsl:text>]]&gt;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="tp:flag" mode="flag-or-enumvalue-gtkdoc">
+ <xsl:param name="value-prefix"/>
+ <xsl:text> * @</xsl:text>
+ <xsl:value-of select="translate(concat($upper-case-prefix, $value-prefix, '_', @suffix), $lower, $upper)"/>
+ <xsl:text>: &lt;![CDATA[</xsl:text>
+ <xsl:value-of select="translate(string(tp:docstring), '&#13;&#10;', ' ')"/>
+ <xsl:text>]]&gt;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="tp:enum">
+ <xsl:variable name="name">
+ <xsl:choose>
+ <xsl:when test="@singular">
+ <xsl:value-of select="@singular"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="value-prefix">
+ <xsl:choose>
+ <xsl:when test="@singular">
+ <xsl:value-of select="@singular"/>
+ </xsl:when>
+ <xsl:when test="@value-prefix">
+ <xsl:value-of select="@value-prefix"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="name-plural">
+ <xsl:choose>
+ <xsl:when test="@plural">
+ <xsl:value-of select="@plural"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/><xsl:text>s</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:text>/**&#10;</xsl:text>
+ <xsl:text> *&#10;</xsl:text>
+ <xsl:value-of select="translate(concat($mixed-case-prefix, $name), '_', '')"/>
+ <xsl:text>:&#10;</xsl:text>
+ <xsl:apply-templates mode="flag-or-enumvalue-gtkdoc">
+ <xsl:with-param name="value-prefix" select="$value-prefix"/>
+ </xsl:apply-templates>
+ <xsl:text> *&#10;</xsl:text>
+ <xsl:if test="tp:docstring">
+ <xsl:text> * &lt;![CDATA[</xsl:text>
+ <xsl:value-of select="translate(string (tp:docstring), '&#13;&#10;', ' ')"/>
+ <xsl:text>]]&gt;&#10;</xsl:text>
+ <xsl:text> *&#10;</xsl:text>
+ </xsl:if>
+ <xsl:text> * Bitfield/set of flags generated from the Telepathy specification.&#10;</xsl:text>
+ <xsl:text> */&#10;</xsl:text>
+ <xsl:text>typedef enum {&#10;</xsl:text>
+ <xsl:apply-templates>
+ <xsl:with-param name="value-prefix" select="$value-prefix"/>
+ </xsl:apply-templates>
+ <xsl:text>} </xsl:text>
+ <xsl:value-of select="translate(concat($mixed-case-prefix, $name), '_', '')"/>
+ <xsl:text>;&#10;</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>/**&#10;</xsl:text>
+ <xsl:text> * NUM_</xsl:text>
+ <xsl:value-of select="translate(concat($upper-case-prefix, $name-plural), $lower, $upper)"/>
+ <xsl:text>:&#10;</xsl:text>
+ <xsl:text> *&#10;</xsl:text>
+ <xsl:text> * 1 higher than the highest valid value of #</xsl:text>
+ <xsl:value-of select="translate(concat($mixed-case-prefix, $name), '_', '')"/>
+ <xsl:text>.&#10;</xsl:text>
+ <xsl:text> */&#10;</xsl:text>
+ <xsl:text>#define NUM_</xsl:text>
+ <xsl:value-of select="translate(concat($upper-case-prefix, $name-plural), $lower, $upper)"/>
+ <xsl:text> (</xsl:text>
+ <xsl:value-of select="tp:enumvalue[position() = last()]/@value"/>
+ <xsl:text>+1)&#10;</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="tp:flags/tp:flag">
+ <xsl:param name="value-prefix"/>
+ <xsl:variable name="suffix">
+ <xsl:choose>
+ <xsl:when test="@suffix">
+ <xsl:value-of select="@suffix"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="name" select="translate(concat($upper-case-prefix, $value-prefix, '_', $suffix), $lower, $upper)"/>
+
+ <xsl:if test="@name and @suffix and @name != @suffix">
+ <xsl:message terminate="yes">
+ <xsl:text>Flag name </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text> != suffix </xsl:text>
+ <xsl:value-of select="@suffix"/>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:message>
+ </xsl:if>
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text>,&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="tp:enum/tp:enumvalue">
+ <xsl:param name="value-prefix"/>
+ <xsl:variable name="suffix">
+ <xsl:choose>
+ <xsl:when test="@suffix">
+ <xsl:value-of select="@suffix"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="name" select="translate(concat($upper-case-prefix, $value-prefix, '_', $suffix), $lower, $upper)"/>
+
+ <xsl:if test="@name and @suffix and @name != @suffix">
+ <xsl:message terminate="yes">
+ <xsl:text>Enumvalue name </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text> != suffix </xsl:text>
+ <xsl:value-of select="@suffix"/>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:message>
+ </xsl:if>
+
+ <xsl:if test="preceding-sibling::tp:enumvalue and number(preceding-sibling::tp:enumvalue[1]/@value) > number(@value)">
+ <xsl:message terminate="yes">
+ <xsl:text>Enum values must be in ascending numeric order, but </xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text> is less than the previous value</xsl:text>
+ </xsl:message>
+ </xsl:if>
+
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text>,&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="tp:flag">
+ <xsl:message terminate="yes">tp:flag found outside tp:flags&#10;</xsl:message>
+ </xsl:template>
+
+ <xsl:template match="tp:enumvalue">
+ <xsl:message terminate="yes">tp:enumvalue found outside tp:enum&#10;</xsl:message>
+ </xsl:template>
+
+ <xsl:template match="text()"/>
+
+ <xsl:template match="/tp:spec">
+ <xsl:if test="$mixed-case-prefix = ''">
+ <xsl:message terminate="yes">
+ <xsl:text>mixed-case-prefix param must be set&#10;</xsl:text>
+ </xsl:message>
+ </xsl:if>
+
+ <xsl:text>/* Generated from </xsl:text>
+ <xsl:value-of select="tp:title"/>
+ <xsl:if test="tp:version">
+ <xsl:text>, version </xsl:text>
+ <xsl:value-of select="tp:version"/>
+ </xsl:if>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:for-each select="tp:copyright">
+ <xsl:value-of select="."/>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:for-each>
+ <xsl:value-of select="tp:license"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:value-of select="tp:docstring"/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text> */&#10;</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>#ifdef __cplusplus&#10;</xsl:text>
+ <xsl:text>extern "C" {&#10;</xsl:text>
+ <xsl:text>#endif&#10;</xsl:text>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:apply-templates/>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>#ifdef __cplusplus&#10;</xsl:text>
+ <xsl:text>}&#10;</xsl:text>
+ <xsl:text>#endif&#10;</xsl:text>
+ </xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et noai noci: -->
diff --git a/trunk/tools/c-interfaces-generator.xsl b/trunk/tools/c-interfaces-generator.xsl
new file mode 100644
index 000000000..f965a7051
--- /dev/null
+++ b/trunk/tools/c-interfaces-generator.xsl
@@ -0,0 +1,84 @@
+<!-- Stylesheet to extract C enumerations from the Telepathy spec.
+The master copy of this stylesheet is in telepathy-glib - please make any
+changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+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.
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+ exclude-result-prefixes="tp">
+
+ <xsl:param name="mixed-case-prefix" select="''"/>
+
+ <xsl:variable name="PREFIX"
+ select="translate($mixed-case-prefix, $lower, $upper)"/>
+ <xsl:variable name="Prefix" select="$mixed-case-prefix"/>
+ <xsl:variable name="prefix"
+ select="translate($mixed-case-prefix, $upper, $lower)"/>
+
+ <xsl:output method="text" indent="no" encoding="ascii"/>
+
+ <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
+ <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
+
+ <xsl:template match="interface">
+ <xsl:text>/**&#10; * </xsl:text>
+ <xsl:value-of select="$PREFIX"/>
+ <xsl:text>_IFACE_</xsl:text>
+ <xsl:value-of select="translate(../@name, concat($lower, '/'), $upper)"/>
+ <xsl:text>:&#10; * &#10; * The interface name "</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>"&#10; */&#10;#define </xsl:text>
+ <xsl:value-of select="$PREFIX"/>
+ <xsl:text>_IFACE_</xsl:text>
+ <xsl:value-of select="translate(../@name, concat($lower, '/'), $upper)"/>
+ <xsl:text> \&#10;"</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>"&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="text()"/>
+
+ <xsl:template match="/tp:spec">
+ <xsl:if test="$mixed-case-prefix = ''">
+ <xsl:message terminate="yes">
+ <xsl:text>mixed-case-prefix param must be set&#10;</xsl:text>
+ </xsl:message>
+ </xsl:if>
+
+ <xsl:text>/* Generated from: </xsl:text>
+ <xsl:value-of select="tp:title"/>
+ <xsl:if test="tp:version">
+ <xsl:text> version </xsl:text>
+ <xsl:value-of select="tp:version"/>
+ </xsl:if>
+ <xsl:text>&#10;&#10;</xsl:text>
+ <xsl:for-each select="tp:copyright">
+ <xsl:value-of select="."/>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>&#10;</xsl:text>
+ <xsl:value-of select="tp:license"/>
+ <xsl:value-of select="tp:docstring"/>
+ <xsl:text>&#10; */&#10;&#10;</xsl:text>
+ <xsl:apply-templates/>
+ </xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et noai noci: -->
diff --git a/trunk/tools/check-c-style.sh b/trunk/tools/check-c-style.sh
new file mode 100644
index 000000000..357fdb365
--- /dev/null
+++ b/trunk/tools/check-c-style.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+fail=0
+
+( . "${tools_dir}"/check-misc.sh ) || fail=$?
+
+if grep -n '^ *GError *\*[[:alpha:]_][[:alnum:]_]* *;' "$@"
+then
+ echo "^^^ The above files contain uninitialized GError*s - they should be"
+ echo " initialized to NULL"
+ fail=1
+fi
+
+# The first regex finds function calls like foo() (as opposed to foo ()).
+# It attempts to ignore string constants (may cause false negatives).
+# The second and third ignore block comments (gtkdoc uses foo() as markup).
+# The fourth ignores cpp so you can
+# #define foo(bar) (_real_foo (__FUNC__, bar)) (cpp insists on foo() style).
+if grep -n '^[^"]*[[:lower:]](' "$@" \
+ | grep -v '^[-[:alnum:]_./]*:[[:digit:]]*: *\*' \
+ | grep -v '^[-[:alnum:]_./]*:[[:digit:]]*: */\*' \
+ | grep -v '^[-[:alnum:]_./]*:[[:digit:]]*: *#'
+then
+ echo "^^^ Our coding style is to use function calls like foo (), not foo()"
+ fail=1
+fi
+
+if test -n "$CHECK_FOR_LONG_LINES"
+then
+ if egrep -n '.{80,}' "$@"
+ then
+ echo "^^^ The above files contain long lines"
+ fail=1
+ fi
+fi
+
+exit $fail
diff --git a/trunk/tools/check-coding-style.mk b/trunk/tools/check-coding-style.mk
new file mode 100644
index 000000000..1499f2f05
--- /dev/null
+++ b/trunk/tools/check-coding-style.mk
@@ -0,0 +1,17 @@
+check-local::
+ @fail=0; \
+ if test -n "$(check_misc_sources)"; then \
+ tools_dir=$(top_srcdir)/tools \
+ sh $(top_srcdir)/tools/check-misc.sh \
+ $(check_misc_sources) || fail=1; \
+ fi; \
+ if test -n "$(check_c_sources)"; then \
+ tools_dir=$(top_srcdir)/tools \
+ sh $(top_srcdir)/tools/check-c-style.sh \
+ $(check_c_sources) || fail=1; \
+ fi;\
+ if test yes = "$(ENABLE_CODING_STYLE_CHECKS)"; then \
+ exit "$$fail";\
+ else \
+ exit 0;\
+ fi
diff --git a/trunk/tools/check-misc.sh b/trunk/tools/check-misc.sh
new file mode 100644
index 000000000..89e8e871a
--- /dev/null
+++ b/trunk/tools/check-misc.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+fail=0
+
+( . "${tools_dir}"/check-whitespace.sh ) || fail=$?
+
+if egrep '(Free\s*Software\s*Foundation.*02139|02111-1307)' "$@"
+then
+ echo "^^^ The above files contain the FSF's old address in GPL headers"
+ fail=1
+fi
+
+exit $fail
diff --git a/trunk/tools/check-whitespace.sh b/trunk/tools/check-whitespace.sh
new file mode 100644
index 000000000..534833126
--- /dev/null
+++ b/trunk/tools/check-whitespace.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+fail=0
+
+if grep -n ' $' "$@"
+then
+ echo "^^^ The above files contain unwanted trailing spaces"
+ fail=1
+fi
+
+if grep -n ' ' "$@"
+then
+ echo "^^^ The above files contain tabs"
+ fail=1
+fi
+
+exit $fail
diff --git a/trunk/tools/doc-generator.xsl b/trunk/tools/doc-generator.xsl
new file mode 100644
index 000000000..8fd4dd3a4
--- /dev/null
+++ b/trunk/tools/doc-generator.xsl
@@ -0,0 +1,753 @@
+<!-- Generate HTML documentation from the Telepathy specification.
+The master copy of this stylesheet is in the Telepathy spec repository -
+please make any changes there.
+
+Copyright (C) 2006-2008 Collabora Limited
+
+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
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+ xmlns:html="http://www.w3.org/1999/xhtml"
+ exclude-result-prefixes="tp html">
+ <!--Don't move the declaration of the HTML namespace up here - XMLNSs
+ don't work ideally in the presence of two things that want to use the
+ absence of a prefix, sadly. -->
+
+ <xsl:template match="html:*" mode="html">
+ <xsl:copy>
+ <xsl:apply-templates mode="html"/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="*" mode="identity">
+ <xsl:copy>
+ <xsl:apply-templates mode="identity"/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="tp:docstring">
+ <xsl:apply-templates select="text() | html:*" mode="html"/>
+ <xsl:apply-templates select="tp:rationale"/>
+ </xsl:template>
+
+ <xsl:template match="tp:rationale">
+ <div xmlns="http://www.w3.org/1999/xhtml" class="rationale">
+ <xsl:apply-templates select="node()" mode="html"/>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="tp:errors">
+ <h1 xmlns="http://www.w3.org/1999/xhtml">Errors</h1>
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="tp:generic-types">
+ <h1 xmlns="http://www.w3.org/1999/xhtml">Generic types</h1>
+ <xsl:call-template name="do-types"/>
+ </xsl:template>
+
+ <xsl:template name="do-types">
+ <xsl:if test="tp:simple-type">
+ <h2 xmlns="http://www.w3.org/1999/xhtml">Simple types</h2>
+ <xsl:apply-templates select="tp:simple-type"/>
+ </xsl:if>
+
+ <xsl:if test="tp:enum">
+ <h2 xmlns="http://www.w3.org/1999/xhtml">Enumerated types:</h2>
+ <xsl:apply-templates select="tp:enum"/>
+ </xsl:if>
+
+ <xsl:if test="tp:flags">
+ <h2 xmlns="http://www.w3.org/1999/xhtml">Sets of flags:</h2>
+ <xsl:apply-templates select="tp:flags"/>
+ </xsl:if>
+
+ <xsl:if test="tp:struct">
+ <h2 xmlns="http://www.w3.org/1999/xhtml">Structure types</h2>
+ <xsl:apply-templates select="tp:struct"/>
+ </xsl:if>
+
+ <xsl:if test="tp:mapping">
+ <h2 xmlns="http://www.w3.org/1999/xhtml">Mapping types</h2>
+ <xsl:apply-templates select="tp:mapping"/>
+ </xsl:if>
+
+ <xsl:if test="tp:external-type">
+ <h2 xmlns="http://www.w3.org/1999/xhtml">Types defined elsewhere</h2>
+ <dl><xsl:apply-templates select="tp:external-type"/></dl>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="tp:error">
+ <h2 xmlns="http://www.w3.org/1999/xhtml"><a name="{concat(../@namespace, '.', translate(@name, ' ', ''))}"></a><xsl:value-of select="concat(../@namespace, '.', translate(@name, ' ', ''))"/></h2>
+ <xsl:apply-templates select="tp:docstring"/>
+ </xsl:template>
+
+ <xsl:template match="/tp:spec/tp:copyright">
+ <div xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates/>
+ </div>
+ </xsl:template>
+ <xsl:template match="/tp:spec/tp:license">
+ <div xmlns="http://www.w3.org/1999/xhtml" class="license">
+ <xsl:apply-templates mode="html"/>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="tp:copyright"/>
+ <xsl:template match="tp:license"/>
+
+ <xsl:template match="interface">
+ <h1 xmlns="http://www.w3.org/1999/xhtml"><a name="{@name}"></a><xsl:value-of select="@name"/></h1>
+
+ <xsl:if test="@tp:causes-havoc">
+ <p xmlns="http://www.w3.org/1999/xhtml" class="causes-havoc">
+ This interface is <xsl:value-of select="@tp:causes-havoc"/>
+ and is likely to cause havoc to your API/ABI if bindings are generated.
+ Don't include it in libraries that care about compatibility.
+ </p>
+ </xsl:if>
+
+ <xsl:if test="tp:requires">
+ <p>Implementations of this interface must also implement:</p>
+ <ul xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:for-each select="tp:requires">
+ <li><code><a href="#{@interface}"><xsl:value-of select="@interface"/></a></code></li>
+ </xsl:for-each>
+ </ul>
+ </xsl:if>
+
+ <xsl:apply-templates select="tp:docstring" />
+
+ <xsl:choose>
+ <xsl:when test="method">
+ <h2 xmlns="http://www.w3.org/1999/xhtml">Methods:</h2>
+ <xsl:apply-templates select="method"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <p xmlns="http://www.w3.org/1999/xhtml">Interface has no methods.</p>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="signal">
+ <h2 xmlns="http://www.w3.org/1999/xhtml">Signals:</h2>
+ <xsl:apply-templates select="signal"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <p xmlns="http://www.w3.org/1999/xhtml">Interface has no signals.</p>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="tp:property">
+ <h2 xmlns="http://www.w3.org/1999/xhtml">Telepathy Properties:</h2>
+ <p xmlns="http://www.w3.org/1999/xhtml">Accessed using the
+ <a href="#org.freedesktop.Telepathy.Properties">Telepathy
+ Properties</a> interface.</p>
+ <dl xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="tp:property"/>
+ </dl>
+ </xsl:when>
+ <xsl:otherwise>
+ <p xmlns="http://www.w3.org/1999/xhtml">Interface has no Telepathy
+ properties.</p>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:choose>
+ <xsl:when test="property">
+ <h2 xmlns="http://www.w3.org/1999/xhtml">D-Bus core Properties:</h2>
+ <p xmlns="http://www.w3.org/1999/xhtml">Accessed using the
+ org.freedesktop.DBus.Properties interface.</p>
+ <dl xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="property"/>
+ </dl>
+ </xsl:when>
+ <xsl:otherwise>
+ <p xmlns="http://www.w3.org/1999/xhtml">Interface has no D-Bus core
+ properties.</p>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ <xsl:call-template name="do-types"/>
+
+ </xsl:template>
+
+ <xsl:template match="tp:flags">
+ <h3>
+ <a name="type-{@name}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </h3>
+ <xsl:apply-templates select="tp:docstring" />
+ <dl xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:variable name="value-prefix">
+ <xsl:choose>
+ <xsl:when test="@value-prefix">
+ <xsl:value-of select="@value-prefix"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:for-each select="tp:flag">
+ <dt xmlns="http://www.w3.org/1999/xhtml"><code><xsl:value-of select="concat($value-prefix, '_', @suffix)"/> = <xsl:value-of select="@value"/></code></dt>
+ <xsl:choose>
+ <xsl:when test="tp:docstring">
+ <dd xmlns="http://www.w3.org/1999/xhtml"><xsl:apply-templates select="tp:docstring" /></dd>
+ </xsl:when>
+ <xsl:otherwise>
+ <dd xmlns="http://www.w3.org/1999/xhtml">(Undocumented)</dd>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </dl>
+ </xsl:template>
+
+ <xsl:template match="tp:enum">
+ <h3 xmlns="http://www.w3.org/1999/xhtml">
+ <a name="type-{@name}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </h3>
+ <xsl:apply-templates select="tp:docstring" />
+ <dl xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:variable name="value-prefix">
+ <xsl:choose>
+ <xsl:when test="@value-prefix">
+ <xsl:value-of select="@value-prefix"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:for-each select="tp:enumvalue">
+ <dt xmlns="http://www.w3.org/1999/xhtml"><code><xsl:value-of select="concat($value-prefix, '_', @suffix)"/> = <xsl:value-of select="@value"/></code></dt>
+ <xsl:choose>
+ <xsl:when test="tp:docstring">
+ <dd xmlns="http://www.w3.org/1999/xhtml"><xsl:apply-templates select="tp:docstring" /></dd>
+ </xsl:when>
+ <xsl:otherwise>
+ <dd xmlns="http://www.w3.org/1999/xhtml">(Undocumented)</dd>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </dl>
+ </xsl:template>
+
+ <xsl:template match="property">
+ <dt xmlns="http://www.w3.org/1999/xhtml">
+ <a name="{concat(../@name, '.', @name)}">
+ <code><xsl:value-of select="@name"/></code>
+ </a>
+ <xsl:text> - </xsl:text>
+ <code><xsl:value-of select="@type"/></code>
+ <xsl:call-template name="parenthesized-tp-type"/>
+ <xsl:text>, </xsl:text>
+ <xsl:choose>
+ <xsl:when test="@access = 'read'">
+ <xsl:text>read-only</xsl:text>
+ </xsl:when>
+ <xsl:when test="@access = 'write'">
+ <xsl:text>write-only</xsl:text>
+ </xsl:when>
+ <xsl:when test="@access = 'readwrite'">
+ <xsl:text>read/write</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>access: </xsl:text>
+ <code><xsl:value-of select="@access"/></code>
+ </xsl:otherwise>
+ </xsl:choose>
+ </dt>
+ <dd xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="tp:docstring"/>
+ </dd>
+ </xsl:template>
+
+ <xsl:template match="tp:property">
+ <dt xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:if test="@name">
+ <code><xsl:value-of select="@name"/></code> -
+ </xsl:if>
+ <code><xsl:value-of select="@type"/></code>
+ </dt>
+ <dd xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="tp:docstring"/>
+ </dd>
+ </xsl:template>
+
+ <xsl:template match="tp:mapping">
+ <div xmlns="http://www.w3.org/1999/xhtml" class="struct">
+ <h3>
+ <a name="type-{@name}">
+ <xsl:value-of select="@name"/>
+ </a> - a{
+ <xsl:for-each select="tp:member">
+ <xsl:value-of select="@type"/>
+ <xsl:text>: </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:if test="position() != last()"> &#x2192; </xsl:if>
+ </xsl:for-each>
+ }
+ </h3>
+ <div class="docstring">
+ <xsl:apply-templates select="tp:docstring"/>
+ </div>
+ <div>
+ <h4>Members</h4>
+ <dl>
+ <xsl:apply-templates select="tp:member" mode="members-in-docstring"/>
+ </dl>
+ </div>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="tp:docstring" mode="in-index"/>
+
+ <xsl:template match="tp:simple-type | tp:enum | tp:flags | tp:external-type"
+ mode="in-index">
+ - <xsl:value-of select="@type"/>
+ </xsl:template>
+
+ <xsl:template match="tp:simple-type">
+ <div xmlns="http://www.w3.org/1999/xhtml" class="simple-type">
+ <h3>
+ <a name="type-{@name}">
+ <xsl:value-of select="@name"/>
+ </a> - <xsl:value-of select="@type"/>
+ </h3>
+ <div class="docstring">
+ <xsl:apply-templates select="tp:docstring"/>
+ </div>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="tp:external-type">
+ <div xmlns="http://www.w3.org/1999/xhtml" class="external-type">
+ <dt>
+ <a name="type-{@name}">
+ <xsl:value-of select="@name"/>
+ </a> - <xsl:value-of select="@type"/>
+ </dt>
+ <dd>Defined by: <xsl:value-of select="@from"/></dd>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="tp:struct" mode="in-index">
+ - ( <xsl:for-each select="tp:member">
+ <xsl:value-of select="@type"/>
+ <xsl:if test="position() != last()">, </xsl:if>
+ </xsl:for-each> )
+ </xsl:template>
+
+ <xsl:template match="tp:mapping" mode="in-index">
+ - a{ <xsl:for-each select="tp:member">
+ <xsl:value-of select="@type"/>
+ <xsl:if test="position() != last()"> &#x2192; </xsl:if>
+ </xsl:for-each> }
+ </xsl:template>
+
+ <xsl:template match="tp:struct">
+ <div xmlns="http://www.w3.org/1999/xhtml" class="struct">
+ <h3>
+ <a name="type-{@name}">
+ <xsl:value-of select="@name"/>
+ </a> - (
+ <xsl:for-each select="tp:member">
+ <xsl:value-of select="@type"/>
+ <xsl:text>: </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:if test="position() != last()">, </xsl:if>
+ </xsl:for-each>
+ )
+ </h3>
+ <div class="docstring">
+ <xsl:apply-templates select="tp:docstring"/>
+ </div>
+ <xsl:choose>
+ <xsl:when test="string(@array-name) != ''">
+ <p>In bindings that need a separate name, arrays of
+ <xsl:value-of select="@name"/> should be called
+ <xsl:value-of select="@array-name"/>.</p>
+ </xsl:when>
+ <xsl:otherwise>
+ <p>Arrays of <xsl:value-of select="@name"/> don't generally
+ make sense.</p>
+ </xsl:otherwise>
+ </xsl:choose>
+ <div>
+ <h4>Members</h4>
+ <dl>
+ <xsl:apply-templates select="tp:member" mode="members-in-docstring"/>
+ </dl>
+ </div>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="method">
+ <div xmlns="http://www.w3.org/1999/xhtml" class="method">
+ <h3 xmlns="http://www.w3.org/1999/xhtml">
+ <a name="{concat(../@name, concat('.', @name))}">
+ <xsl:value-of select="@name"/>
+ </a> (
+ <xsl:for-each xmlns="" select="arg[@direction='in']">
+ <xsl:value-of select="@type"/>: <xsl:value-of select="@name"/>
+ <xsl:if test="position() != last()">, </xsl:if>
+ </xsl:for-each>
+ ) &#x2192;
+ <xsl:choose>
+ <xsl:when test="arg[@direction='out']">
+ <xsl:for-each xmlns="" select="arg[@direction='out']">
+ <xsl:value-of select="@type"/>
+ <xsl:if test="position() != last()">, </xsl:if>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>nothing</xsl:otherwise>
+ </xsl:choose>
+ </h3>
+ <div xmlns="http://www.w3.org/1999/xhtml" class="docstring">
+ <xsl:apply-templates select="tp:docstring" />
+ </div>
+
+ <xsl:if test="arg[@direction='in']">
+ <div xmlns="http://www.w3.org/1999/xhtml">
+ <h4>Parameters</h4>
+ <dl xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="arg[@direction='in']"
+ mode="parameters-in-docstring"/>
+ </dl>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="arg[@direction='out']">
+ <div xmlns="http://www.w3.org/1999/xhtml">
+ <h4>Returns</h4>
+ <dl xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="arg[@direction='out']"
+ mode="returns-in-docstring"/>
+ </dl>
+ </div>
+ </xsl:if>
+
+ <xsl:if test="tp:possible-errors">
+ <div xmlns="http://www.w3.org/1999/xhtml">
+ <h4>Possible errors</h4>
+ <dl xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="tp:possible-errors/tp:error"/>
+ </dl>
+ </div>
+ </xsl:if>
+
+ </div>
+ </xsl:template>
+
+ <xsl:template name="parenthesized-tp-type">
+ <xsl:if test="@tp:type">
+ <xsl:variable name="tp-type" select="@tp:type"/>
+ <xsl:variable name="single-type">
+ <xsl:choose>
+ <xsl:when test="contains($tp-type, '[]')">
+ <xsl:value-of select="substring-before($tp-type, '[]')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$tp-type"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="//tp:simple-type[@name=$tp-type]" />
+ <xsl:when test="//tp:simple-type[concat(@name, '[]')=$tp-type]" />
+ <xsl:when test="//tp:struct[concat(@name, '[]')=$tp-type][string(@array-name) != '']" />
+ <xsl:when test="//tp:struct[@name=$tp-type]" />
+ <xsl:when test="//tp:enum[@name=$tp-type]" />
+ <xsl:when test="//tp:enum[concat(@name, '[]')=$tp-type]" />
+ <xsl:when test="//tp:flags[@name=$tp-type]" />
+ <xsl:when test="//tp:flags[concat(@name, '[]')=$tp-type]" />
+ <xsl:when test="//tp:mapping[@name=$tp-type]" />
+ <xsl:when test="//tp:external-type[concat(@name, '[]')=$tp-type]" />
+ <xsl:when test="//tp:external-type[@name=$tp-type]" />
+ <xsl:otherwise>
+ <xsl:message terminate="yes">
+ <xsl:text>ERR: Unable to find type '</xsl:text>
+ <xsl:value-of select="$tp-type"/>
+ <xsl:text>'&#10;</xsl:text>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ (<a href="#type-{$single-type}"><xsl:value-of select="$tp-type"/></a>)
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="tp:member" mode="members-in-docstring">
+ <dt xmlns="http://www.w3.org/1999/xhtml">
+ <code><xsl:value-of select="@name"/></code> -
+ <code><xsl:value-of select="@type"/></code>
+ <xsl:call-template name="parenthesized-tp-type"/>
+ </dt>
+ <dd xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:choose>
+ <xsl:when test="tp:docstring">
+ <xsl:apply-templates select="tp:docstring" />
+ </xsl:when>
+ <xsl:otherwise>
+ <em>(undocumented)</em>
+ </xsl:otherwise>
+ </xsl:choose>
+ </dd>
+ </xsl:template>
+
+ <xsl:template match="arg" mode="parameters-in-docstring">
+ <dt xmlns="http://www.w3.org/1999/xhtml">
+ <code><xsl:value-of select="@name"/></code> -
+ <code><xsl:value-of select="@type"/></code>
+ <xsl:call-template name="parenthesized-tp-type"/>
+ </dt>
+ <dd xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="tp:docstring" />
+ </dd>
+ </xsl:template>
+
+ <xsl:template match="arg" mode="returns-in-docstring">
+ <dt xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:if test="@name">
+ <code><xsl:value-of select="@name"/></code> -
+ </xsl:if>
+ <code><xsl:value-of select="@type"/></code>
+ <xsl:call-template name="parenthesized-tp-type"/>
+ </dt>
+ <dd xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="tp:docstring"/>
+ </dd>
+ </xsl:template>
+
+ <xsl:template match="tp:possible-errors/tp:error">
+ <dt xmlns="http://www.w3.org/1999/xhtml">
+ <code><xsl:value-of select="@name"/></code>
+ </dt>
+ <dd xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:choose>
+ <xsl:when test="tp:docstring">
+ <xsl:apply-templates select="tp:docstring"/>
+ </xsl:when>
+ <xsl:when test="//tp:errors/tp:error[concat(../@namespace, '.', translate(@name, ' ', ''))=$name]/tp:docstring">
+ <xsl:apply-templates select="//tp:errors/tp:error[concat(../@namespace, '.', translate(@name, ' ', ''))=$name]/tp:docstring"/> <em xmlns="http://www.w3.org/1999/xhtml">(generic description)</em>
+ </xsl:when>
+ <xsl:otherwise>
+ (Undocumented.)
+ </xsl:otherwise>
+ </xsl:choose>
+ </dd>
+ </xsl:template>
+
+ <xsl:template match="signal">
+ <div xmlns="http://www.w3.org/1999/xhtml" class="signal">
+ <h3 xmlns="http://www.w3.org/1999/xhtml">
+ <a name="{concat(../@name, concat('.', @name))}">
+ <xsl:value-of select="@name"/>
+ </a> (
+ <xsl:for-each xmlns="" select="arg">
+ <xsl:value-of select="@type"/>: <xsl:value-of select="@name"/>
+ <xsl:if test="position() != last()">, </xsl:if>
+ </xsl:for-each>
+ )</h3>
+ <div xmlns="http://www.w3.org/1999/xhtml" class="docstring">
+ <xsl:apply-templates select="tp:docstring"/>
+ </div>
+
+ <xsl:if test="arg">
+ <div xmlns="http://www.w3.org/1999/xhtml">
+ <h4>Parameters</h4>
+ <dl xmlns="http://www.w3.org/1999/xhtml">
+ <xsl:apply-templates select="arg" mode="parameters-in-docstring"/>
+ </dl>
+ </div>
+ </xsl:if>
+ </div>
+ </xsl:template>
+
+ <xsl:output method="xml" indent="no" encoding="ascii"
+ omit-xml-declaration="yes"
+ doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+ doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />
+
+ <xsl:template match="/tp:spec">
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>
+ <xsl:value-of select="tp:title"/>
+ <xsl:if test="tp:version">
+ <xsl:text> version </xsl:text>
+ <xsl:value-of select="tp:version"/>
+ </xsl:if>
+ </title>
+ <style type="text/css">
+
+ body {
+ font-family: sans-serif;
+ margin: 2em;
+ height: 100%;
+ font-size: 1.2em;
+ }
+ h1 {
+ padding-top: 5px;
+ padding-bottom: 5px;
+ font-size: 1.6em;
+ background: #dadae2;
+ }
+ h2 {
+ font-size: 1.3em;
+ }
+ h3 {
+ font-size: 1.2em;
+ }
+ a:link, a:visited, a:link:hover, a:visited:hover {
+ font-weight: bold;
+ }
+ .topbox {
+ padding-top: 10px;
+ padding-left: 10px;
+ border-bottom: black solid 1px;
+ padding-bottom: 10px;
+ background: #dadae2;
+ font-size: 2em;
+ font-weight: bold;
+ color: #5c5c5c;
+ }
+ .topnavbox {
+ padding-left: 10px;
+ padding-top: 5px;
+ padding-bottom: 5px;
+ background: #abacba;
+ border-bottom: black solid 1px;
+ font-size: 1.2em;
+ }
+ .topnavbox a{
+ color: black;
+ font-weight: normal;
+ }
+ .sidebar {
+ float: left;
+ /* width:9em;
+ border-right:#abacba solid 1px;
+ border-left: #abacba solid 1px;
+ height:100%; */
+ border: #abacba solid 1px;
+ padding-left: 10px;
+ margin-left: 10px;
+ padding-right: 10px;
+ margin-right: 10px;
+ color: #5d5d5d;
+ background: #dadae2;
+ }
+ .sidebar a {
+ text-decoration: none;
+ border-bottom: #e29625 dotted 1px;
+ color: #e29625;
+ font-weight: normal;
+ }
+ .sidebar h1 {
+ font-size: 1.2em;
+ color: black;
+ }
+ .sidebar ul {
+ padding-left: 25px;
+ padding-bottom: 10px;
+ border-bottom: #abacba solid 1px;
+ }
+ .sidebar li {
+ padding-top: 2px;
+ padding-bottom: 2px;
+ }
+ .sidebar h2 {
+ font-style:italic;
+ font-size: 0.81em;
+ padding-left: 5px;
+ padding-right: 5px;
+ font-weight: normal;
+ }
+ .date {
+ font-size: 0.6em;
+ float: right;
+ font-style: italic;
+ }
+ .method, .signal, .property {
+ margin-left: 1em;
+ margin-right: 4em;
+ }
+ .rationale {
+ font-style: italic;
+ border-left: 0.25em solid #808080;
+ padding-left: 0.5em;
+ }
+
+ </style>
+ </head>
+ <body>
+ <h1 class="topbox">
+ <xsl:value-of select="tp:title" />
+ </h1>
+ <xsl:if test="tp:version">
+ <h2>Version <xsl:apply-templates select="tp:version"/></h2>
+ </xsl:if>
+ <xsl:apply-templates select="tp:copyright"/>
+ <xsl:apply-templates select="tp:license"/>
+ <xsl:apply-templates select="tp:docstring"/>
+
+ <h2>Interfaces</h2>
+ <ul>
+ <xsl:for-each select="//node/interface">
+ <li><code><a href="#{@name}"><xsl:value-of select="@name"/></a></code></li>
+ </xsl:for-each>
+ </ul>
+
+ <xsl:apply-templates select="//node"/>
+ <xsl:apply-templates select="tp:generic-types"/>
+ <xsl:apply-templates select="tp:errors"/>
+
+ <h1>Index</h1>
+ <h2>Index of interfaces</h2>
+ <ul>
+ <xsl:for-each select="//node/interface">
+ <li><code><a href="#{@name}"><xsl:value-of select="@name"/></a></code></li>
+ </xsl:for-each>
+ </ul>
+ <h2>Index of types</h2>
+ <ul>
+ <xsl:for-each select="//tp:simple-type | //tp:enum | //tp:flags | //tp:mapping | //tp:struct | //tp:external-type">
+ <xsl:sort select="@name"/>
+ <li>
+ <code>
+ <a href="#type-{@name}">
+ <xsl:value-of select="@name"/>
+ </a>
+ </code>
+ <xsl:apply-templates mode="in-index" select="."/>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </body>
+ </html>
+ </xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et: -->
diff --git a/trunk/tools/glib-client-gen.py b/trunk/tools/glib-client-gen.py
new file mode 100644
index 000000000..fede212dc
--- /dev/null
+++ b/trunk/tools/glib-client-gen.py
@@ -0,0 +1,1138 @@
+#!/usr/bin/python
+
+# glib-client-gen.py: "I Can't Believe It's Not dbus-binding-tool"
+#
+# Generate GLib client wrappers from the Telepathy specification.
+# The master copy of this program is in the telepathy-glib repository -
+# please make any changes there.
+#
+# Copyright (C) 2006-2008 Collabora Ltd. <http://www.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
+
+import sys
+import os.path
+import xml.dom.minidom
+from getopt import gnu_getopt
+
+from libglibcodegen import Signature, type_to_gtype, cmp_by_name, \
+ camelcase_to_lower, get_docstring, xml_escape
+
+
+NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+
+class Generator(object):
+
+ def __init__(self, dom, prefix, basename, opts):
+ self.dom = dom
+ self.__header = []
+ self.__body = []
+
+ self.prefix_lc = prefix.lower()
+ self.prefix_uc = prefix.upper()
+ self.prefix_mc = prefix.replace('_', '')
+ self.basename = basename
+ self.group = opts.get('--group', None)
+ self.iface_quark_prefix = opts.get('--iface-quark-prefix', None)
+ self.tp_proxy_api = tuple(map(int,
+ opts.get('--tp-proxy-api', '0').split('.')))
+ self.proxy_cls = opts.get('--subclass', 'TpProxy') + ' *'
+ self.proxy_arg = opts.get('--subclass', 'void') + ' *'
+ self.proxy_assert = opts.get('--subclass-assert', 'TP_IS_PROXY')
+ self.proxy_doc = ('A #%s or subclass'
+ % opts.get('--subclass', 'TpProxy'))
+ if self.proxy_arg == 'void *':
+ self.proxy_arg = 'gpointer '
+
+ def h(self, s):
+ self.__header.append(s)
+
+ def b(self, s):
+ self.__body.append(s)
+
+ def get_iface_quark(self):
+ assert self.iface_dbus is not None
+ assert self.iface_uc is not None
+ if self.iface_quark_prefix is None:
+ return 'g_quark_from_static_string (\"%s\")' % self.iface_dbus
+ else:
+ return '%s_%s' % (self.iface_quark_prefix, self.iface_uc)
+
+ def do_signal(self, iface, signal):
+ iface_lc = iface.lower()
+
+ member = signal.getAttribute('name')
+ member_lc = camelcase_to_lower(member)
+ member_uc = member_lc.upper()
+
+ arg_count = 0
+ args = []
+ out_args = []
+
+ for arg in signal.getElementsByTagName('arg'):
+ name = arg.getAttribute('name')
+ type = arg.getAttribute('type')
+ tp_type = arg.getAttribute('tp:type')
+
+ if not name:
+ name = 'arg%u' % arg_count
+ arg_count += 1
+ else:
+ name = 'arg_%s' % name
+
+ info = type_to_gtype(type)
+ args.append((name, info, tp_type, arg))
+
+ callback_name = ('%s_%s_signal_callback_%s'
+ % (self.prefix_lc, iface_lc, member_lc))
+ collect_name = ('_%s_%s_collect_args_of_%s'
+ % (self.prefix_lc, iface_lc, member_lc))
+ invoke_name = ('_%s_%s_invoke_callback_for_%s'
+ % (self.prefix_lc, iface_lc, member_lc))
+
+ # Example:
+ #
+ # typedef void (*tp_cli_connection_signal_callback_new_channel)
+ # (TpConnection *proxy, const gchar *arg_object_path,
+ # const gchar *arg_channel_type, guint arg_handle_type,
+ # guint arg_handle, gboolean arg_suppress_handler,
+ # gpointer user_data, GObject *weak_object);
+
+ self.b('/**')
+ self.b(' * %s:' % callback_name)
+ self.b(' * @proxy: The proxy on which %s_%s_connect_to_%s ()'
+ % (self.prefix_lc, iface_lc, member_lc))
+ self.b(' * was called')
+
+ for arg in args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ self.b(' * @%s: %s' % (name,
+ xml_escape(get_docstring(elt) or '(Undocumented)')))
+
+ self.b(' * @user_data: User-supplied data')
+ self.b(' * @weak_object: User-supplied weakly referenced object')
+ self.b(' *')
+ self.b(' * Represents the signature of a callback for the signal %s.'
+ % member)
+ self.b(' */')
+ self.h('typedef void (*%s) (%sproxy,'
+ % (callback_name, self.proxy_cls))
+
+ for arg in args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ const = pointer and 'const ' or ''
+
+ self.h(' %s%s%s,' % (const, ctype, name))
+
+ self.h(' gpointer user_data, GObject *weak_object);')
+
+ if args:
+ self.b('static void')
+ self.b('%s (DBusGProxy *proxy G_GNUC_UNUSED,' % collect_name)
+
+ for arg in args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ const = pointer and 'const ' or ''
+
+ self.b(' %s%s%s,' % (const, ctype, name))
+
+ self.b(' TpProxySignalConnection *sc)')
+ self.b('{')
+ self.b(' GValueArray *args = g_value_array_new (%d);' % len(args))
+ self.b(' GValue blank = { 0 };')
+ self.b(' guint i;')
+ self.b('')
+ self.b(' g_value_init (&blank, G_TYPE_INT);')
+ self.b('')
+ self.b(' for (i = 0; i < %d; i++)' % len(args))
+ self.b(' g_value_array_append (args, &blank);')
+ self.b('')
+
+ for i, arg in enumerate(args):
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ self.b(' g_value_unset (args->values + %d);' % i)
+ self.b(' g_value_init (args->values + %d, %s);' % (i, gtype))
+
+ if gtype == 'G_TYPE_STRING':
+ self.b(' g_value_set_string (args->values + %d, %s);'
+ % (i, name))
+ elif marshaller == 'BOXED':
+ self.b(' g_value_set_boxed (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_UCHAR':
+ self.b(' g_value_set_uchar (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_BOOLEAN':
+ self.b(' g_value_set_boolean (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_INT':
+ self.b(' g_value_set_int (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_UINT':
+ self.b(' g_value_set_uint (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_INT64':
+ self.b(' g_value_set_int (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_UINT64':
+ self.b(' g_value_set_uint (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_DOUBLE':
+ self.b(' g_value_set_double (args->values + %d, %s);'
+ % (i, name))
+ else:
+ assert False, ("Don't know how to put %s in a GValue"
+ % gtype)
+ self.b('')
+
+ self.b(' tp_proxy_signal_connection_v0_take_results (sc, args);')
+ self.b('}')
+
+ self.b('static void')
+ self.b('%s (TpProxy *tpproxy,' % invoke_name)
+ self.b(' GError *error G_GNUC_UNUSED,')
+ self.b(' GValueArray *args,')
+ self.b(' GCallback generic_callback,')
+ self.b(' gpointer user_data,')
+ self.b(' GObject *weak_object)')
+ self.b('{')
+ self.b(' %s callback =' % callback_name)
+ self.b(' (%s) generic_callback;' % callback_name)
+ self.b('')
+ self.b(' if (callback != NULL)')
+ self.b(' callback (g_object_ref (tpproxy),')
+
+ # FIXME: factor out into a function
+ for i, arg in enumerate(args):
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ if marshaller == 'BOXED':
+ self.b(' g_value_get_boxed (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_STRING':
+ self.b(' g_value_get_string (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_UCHAR':
+ self.b(' g_value_get_uchar (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_BOOLEAN':
+ self.b(' g_value_get_boolean (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_UINT':
+ self.b(' g_value_get_uint (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_INT':
+ self.b(' g_value_get_int (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_UINT64':
+ self.b(' g_value_get_uint64 (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_INT64':
+ self.b(' g_value_get_int64 (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_DOUBLE':
+ self.b(' g_value_get_double (args->values + %d),' % i)
+ else:
+ assert False, "Don't know how to get %s from a GValue" % gtype
+
+ self.b(' user_data,')
+ self.b(' weak_object);')
+ self.b('')
+
+ if len(args) > 0:
+ self.b(' g_value_array_free (args);')
+ else:
+ self.b(' if (args != NULL)')
+ self.b(' g_value_array_free (args);')
+ self.b('')
+
+ self.b(' g_object_unref (tpproxy);')
+ self.b('}')
+
+ # Example:
+ #
+ # TpProxySignalConnection *
+ # tp_cli_connection_connect_to_new_channel
+ # (TpConnection *proxy,
+ # tp_cli_connection_signal_callback_new_channel callback,
+ # gpointer user_data,
+ # GDestroyNotify destroy);
+ #
+ # destroy is invoked when the signal becomes disconnected. This
+ # is either because the signal has been disconnected explicitly
+ # by the user, because the TpProxy has become invalid and
+ # emitted the 'invalidated' signal, or because the weakly referenced
+ # object has gone away.
+
+ self.b('/**')
+ self.b(' * %s_%s_connect_to_%s:'
+ % (self.prefix_lc, iface_lc, member_lc))
+ self.b(' * @proxy: %s' % self.proxy_doc)
+ self.b(' * @callback: Callback to be called when the signal is')
+ self.b(' * received')
+ self.b(' * @user_data: User-supplied data for the callback')
+ self.b(' * @destroy: Destructor for the user-supplied data, which')
+ self.b(' * will be called when this signal is disconnected, or')
+ self.b(' * before this function returns %NULL')
+ self.b(' * @weak_object: A #GObject which will be weakly referenced; ')
+ self.b(' * if it is destroyed, this callback will automatically be')
+ self.b(' * disconnected')
+ self.b(' * @error: If not %NULL, used to raise an error if %NULL is')
+ self.b(' * returned')
+ self.b(' *')
+ self.b(' * Connect a handler to the signal %s.' % member)
+ self.b(' *')
+ self.b(' * %s' % xml_escape(get_docstring(signal) or '(Undocumented)'))
+ self.b(' *')
+ self.b(' * Returns: a #TpProxySignalConnection containing all of the')
+ self.b(' * above, which can be used to disconnect the signal; or')
+ self.b(' * %NULL if the proxy does not have the desired interface')
+ self.b(' * or has become invalid.')
+ self.b(' */')
+ self.h('TpProxySignalConnection *%s_%s_connect_to_%s (%sproxy,'
+ % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg))
+ self.h(' %s callback,' % callback_name)
+ self.h(' gpointer user_data,')
+ self.h(' GDestroyNotify destroy,')
+ self.h(' GObject *weak_object,')
+ self.h(' GError **error);')
+
+ self.b('TpProxySignalConnection *')
+ self.b('%s_%s_connect_to_%s (%sproxy,'
+ % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg))
+ self.b(' %s callback,' % callback_name)
+ self.b(' gpointer user_data,')
+ self.b(' GDestroyNotify destroy,')
+ self.b(' GObject *weak_object,')
+ self.b(' GError **error)')
+ self.b('{')
+ self.b(' GType expected_types[%d] = {' % (len(args) + 1))
+
+ for arg in args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ self.b(' %s,' % gtype)
+
+ self.b(' G_TYPE_INVALID };')
+ self.b('')
+ self.b(' g_return_val_if_fail (%s (proxy), NULL);'
+ % self.proxy_assert)
+ self.b(' g_return_val_if_fail (callback != NULL, NULL);')
+ self.b('')
+ self.b(' return tp_proxy_signal_connection_v0_new ((TpProxy *) proxy,')
+ self.b(' %s, \"%s\",' % (self.get_iface_quark(), member))
+ self.b(' expected_types,')
+
+ if args:
+ self.b(' G_CALLBACK (%s),' % collect_name)
+ else:
+ self.b(' NULL, /* no args => no collector function */')
+
+ self.b(' %s,' % invoke_name)
+ self.b(' G_CALLBACK (callback), user_data, destroy,')
+ self.b(' weak_object, error);')
+ self.b('}')
+ self.b('')
+
+ self.h('')
+
+ def do_method(self, iface, method):
+ iface_lc = iface.lower()
+
+ member = method.getAttribute('name')
+ member_lc = camelcase_to_lower(member)
+ member_uc = member_lc.upper()
+
+ in_count = 0
+ ret_count = 0
+ in_args = []
+ out_args = []
+
+ for arg in method.getElementsByTagName('arg'):
+ name = arg.getAttribute('name')
+ direction = arg.getAttribute('direction')
+ type = arg.getAttribute('type')
+ tp_type = arg.getAttribute('tp:type')
+
+ if direction != 'out':
+ if not name:
+ name = 'in%u' % in_count
+ in_count += 1
+ else:
+ name = 'in_%s' % name
+ else:
+ if not name:
+ name = 'out%u' % ret_count
+ ret_count += 1
+ else:
+ name = 'out_%s' % name
+
+ info = type_to_gtype(type)
+ if direction != 'out':
+ in_args.append((name, info, tp_type, arg))
+ else:
+ out_args.append((name, info, tp_type, arg))
+
+ # Async reply callback type
+
+ # Example:
+ # void (*tp_cli_properties_interface_callback_for_get_properties)
+ # (TpProxy *proxy,
+ # const GPtrArray *out0,
+ # const GError *error,
+ # gpointer user_data,
+ # GObject *weak_object);
+
+ self.b('/**')
+ self.b(' * %s_%s_callback_for_%s:'
+ % (self.prefix_lc, iface_lc, member_lc))
+ self.b(' * @proxy: the proxy on which the call was made')
+
+ for arg in out_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ self.b(' * @%s: Used to return an \'out\' argument if @error is '
+ '%%NULL: %s'
+ % (name, xml_escape(get_docstring(elt) or '(Undocumented)')))
+
+ self.b(' * @error: %NULL on success, or an error on failure')
+ self.b(' * @user_data: user-supplied data')
+ self.b(' * @weak_object: user-supplied object')
+ self.b(' *')
+ self.b(' * Signature of the callback called when a %s method call'
+ % member)
+ self.b(' * succeeds or fails.')
+ self.b(' */')
+
+ callback_name = '%s_%s_callback_for_%s' % (self.prefix_lc, iface_lc,
+ member_lc)
+
+ self.h('typedef void (*%s) (%sproxy,'
+ % (callback_name, self.proxy_cls))
+
+ for arg in out_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+ const = pointer and 'const ' or ''
+
+ self.h(' %s%s%s,' % (const, ctype, name))
+
+ self.h(' const GError *error, gpointer user_data,')
+ self.h(' GObject *weak_object);')
+ self.h('')
+
+ # Async callback implementation
+
+ invoke_callback = '_%s_%s_invoke_callback_%s' % (self.prefix_lc,
+ iface_lc,
+ member_lc)
+
+ collect_callback = '_%s_%s_collect_callback_%s' % (self.prefix_lc,
+ iface_lc,
+ member_lc)
+
+ # The callback called by dbus-glib; this ends the call and collects
+ # the results into a GValueArray.
+ self.b('static void')
+ self.b('%s (DBusGProxy *proxy,' % collect_callback)
+ self.b(' DBusGProxyCall *call,')
+ self.b(' gpointer user_data)')
+ self.b('{')
+ self.b(' GError *error = NULL;')
+
+ if len(out_args) > 0:
+ self.b(' GValueArray *args;')
+ self.b(' GValue blank = { 0 };')
+ self.b(' guint i;')
+
+ for arg in out_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ # "We handle variants specially; the caller is expected to
+ # have already allocated storage for them". Thanks,
+ # dbus-glib...
+ if gtype == 'G_TYPE_VALUE':
+ self.b(' GValue *%s = g_new0 (GValue, 1);' % name)
+ else:
+ self.b(' %s%s;' % (ctype, name))
+
+ self.b('')
+ self.b(' dbus_g_proxy_end_call (proxy, call, &error,')
+
+ for arg in out_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ if gtype == 'G_TYPE_VALUE':
+ self.b(' %s, %s,' % (gtype, name))
+ else:
+ self.b(' %s, &%s,' % (gtype, name))
+
+ self.b(' G_TYPE_INVALID);')
+
+ if len(out_args) == 0:
+ self.b(' tp_proxy_pending_call_v0_take_results (user_data, error,'
+ 'NULL);')
+ else:
+ self.b('')
+ self.b(' if (error != NULL)')
+ self.b(' {')
+ self.b(' tp_proxy_pending_call_v0_take_results (user_data, error,')
+ self.b(' NULL);')
+
+ for arg in out_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+ if gtype == 'G_TYPE_VALUE':
+ self.b(' g_free (%s);' % name)
+
+ self.b(' return;')
+ self.b(' }')
+ self.b('')
+ self.b(' args = g_value_array_new (%d);' % len(out_args))
+ self.b(' g_value_init (&blank, G_TYPE_INT);')
+ self.b('')
+ self.b(' for (i = 0; i < %d; i++)' % len(out_args))
+ self.b(' g_value_array_append (args, &blank);')
+
+ for i, arg in enumerate(out_args):
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ self.b('')
+ self.b(' g_value_unset (args->values + %d);' % i)
+ self.b(' g_value_init (args->values + %d, %s);' % (i, gtype))
+
+ if gtype == 'G_TYPE_STRING':
+ self.b(' g_value_take_string (args->values + %d, %s);'
+ % (i, name))
+ elif marshaller == 'BOXED':
+ self.b(' g_value_take_boxed (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_UCHAR':
+ self.b(' g_value_set_uchar (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_BOOLEAN':
+ self.b(' g_value_set_boolean (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_INT':
+ self.b(' g_value_set_int (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_UINT':
+ self.b(' g_value_set_uint (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_INT64':
+ self.b(' g_value_set_int (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_UINT64':
+ self.b(' g_value_set_uint (args->values + %d, %s);'
+ % (i, name))
+ elif gtype == 'G_TYPE_DOUBLE':
+ self.b(' g_value_set_double (args->values + %d, %s);'
+ % (i, name))
+ else:
+ assert False, ("Don't know how to put %s in a GValue"
+ % gtype)
+
+ self.b(' tp_proxy_pending_call_v0_take_results (user_data, '
+ 'NULL, args);')
+
+ self.b('}')
+
+ self.b('static void')
+ self.b('%s (TpProxy *self,' % invoke_callback)
+ self.b(' GError *error,')
+ self.b(' GValueArray *args,')
+ self.b(' GCallback generic_callback,')
+ self.b(' gpointer user_data,')
+ self.b(' GObject *weak_object)')
+ self.b('{')
+ self.b(' %s callback = (%s) generic_callback;'
+ % (callback_name, callback_name))
+ self.b('')
+ self.b(' if (error != NULL)')
+ self.b(' {')
+ self.b(' callback ((%s) self,' % self.proxy_cls)
+
+ for arg in out_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ if marshaller == 'BOXED' or pointer:
+ self.b(' NULL,')
+ elif gtype == 'G_TYPE_DOUBLE':
+ self.b(' 0.0,')
+ else:
+ self.b(' 0,')
+
+ self.b(' error, user_data, weak_object);')
+ self.b(' g_error_free (error);')
+ self.b(' return;')
+ self.b(' }')
+
+ self.b(' callback ((%s) self,' % self.proxy_cls)
+
+ # FIXME: factor out into a function
+ for i, arg in enumerate(out_args):
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ if marshaller == 'BOXED':
+ self.b(' g_value_get_boxed (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_STRING':
+ self.b(' g_value_get_string (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_UCHAR':
+ self.b(' g_value_get_uchar (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_BOOLEAN':
+ self.b(' g_value_get_boolean (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_UINT':
+ self.b(' g_value_get_uint (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_INT':
+ self.b(' g_value_get_int (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_UINT64':
+ self.b(' g_value_get_uint64 (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_INT64':
+ self.b(' g_value_get_int64 (args->values + %d),' % i)
+ elif gtype == 'G_TYPE_DOUBLE':
+ self.b(' g_value_get_double (args->values + %d),' % i)
+ else:
+ assert False, "Don't know how to get %s from a GValue" % gtype
+
+ self.b(' error, user_data, weak_object);')
+ self.b('')
+
+ if len(out_args) > 0:
+ self.b(' g_value_array_free (args);')
+ else:
+ self.b(' if (args != NULL)')
+ self.b(' g_value_array_free (args);')
+
+ self.b('}')
+ self.b('')
+
+ # Async stub
+
+ # Example:
+ # TpProxyPendingCall *
+ # tp_cli_properties_interface_call_get_properties
+ # (gpointer proxy,
+ # gint timeout_ms,
+ # const GArray *in_properties,
+ # tp_cli_properties_interface_callback_for_get_properties callback,
+ # gpointer user_data,
+ # GDestroyNotify *destructor);
+
+ self.h('TpProxyPendingCall *%s_%s_call_%s (%sproxy,'
+ % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg))
+ self.h(' gint timeout_ms,')
+
+ self.b('/**')
+ self.b(' * %s_%s_call_%s:'
+ % (self.prefix_lc, iface_lc, member_lc))
+ self.b(' * @proxy: the #TpProxy')
+ self.b(' * @timeout_ms: the timeout in milliseconds, or -1 to use the')
+ self.b(' * default')
+
+ for arg in in_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ self.b(' * @%s: Used to pass an \'in\' argument: %s'
+ % (name, xml_escape(get_docstring(elt) or '(Undocumented)')))
+
+ self.b(' * @callback: called when the method call succeeds or fails')
+ self.b(' * @user_data: user-supplied data passed to the callback')
+ self.b(' * @destroy: called with the user_data as argument, after the')
+ self.b(' * call has succeeded, failed or been cancelled')
+ self.b(' * @weak_object: A #GObject which will be weakly referenced; ')
+ self.b(' * if it is destroyed, this callback will automatically be')
+ self.b(' * disconnected')
+ self.b(' *')
+ self.b(' * Start a %s method call.' % member)
+ self.b(' *')
+ self.b(' * %s' % xml_escape(get_docstring(method) or '(Undocumented)'))
+ self.b(' *')
+ self.b(' * Returns: a #TpProxyPendingCall representing the call in')
+ self.b(' * progress. It is borrowed from the object, and will become')
+ self.b(' * invalid when the callback is called, the call is')
+ self.b(' * cancelled or the #TpProxy becomes invalid.')
+ self.b(' */')
+ self.b('TpProxyPendingCall *\n%s_%s_call_%s (%sproxy,'
+ % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg))
+ self.b(' gint timeout_ms,')
+
+ for arg in in_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ const = pointer and 'const ' or ''
+
+ self.h(' %s%s%s,' % (const, ctype, name))
+ self.b(' %s%s%s,' % (const, ctype, name))
+
+ self.h(' %s callback,' % callback_name)
+ self.h(' gpointer user_data,')
+ self.h(' GDestroyNotify destroy,')
+ self.h(' GObject *weak_object);')
+ self.h('')
+
+ self.b(' %s callback,' % callback_name)
+ self.b(' gpointer user_data,')
+ self.b(' GDestroyNotify destroy,')
+ self.b(' GObject *weak_object)')
+ self.b('{')
+ self.b(' GError *error = NULL;')
+ self.b(' GQuark interface = %s;' % self.get_iface_quark())
+ self.b(' DBusGProxy *iface;')
+ self.b('')
+ self.b(' g_return_val_if_fail (%s (proxy), NULL);'
+ % self.proxy_assert)
+ self.b('')
+ self.b(' iface = tp_proxy_borrow_interface_by_id (')
+ self.b(' (TpProxy *) proxy,')
+ self.b(' interface, &error);')
+ self.b('')
+ self.b(' if (iface == NULL)')
+ self.b(' {')
+ self.b(' if (callback != NULL)')
+ self.b(' callback (proxy,')
+
+ for arg in out_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ if pointer:
+ self.b(' NULL,')
+ else:
+ self.b(' 0,')
+
+ self.b(' error, user_data, weak_object);')
+ self.b(' g_error_free (error);')
+ self.b(' return NULL;')
+ self.b(' }')
+ self.b('')
+ self.b(' if (callback == NULL)')
+ self.b(' {')
+ self.b(' dbus_g_proxy_call_no_reply (iface, "%s",' % member)
+
+ for arg in in_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ const = pointer and 'const ' or ''
+
+ self.b(' %s, %s,' % (gtype, name))
+
+ self.b(' G_TYPE_INVALID);')
+ self.b(' return NULL;')
+ self.b(' }')
+ self.b(' else')
+ self.b(' {')
+ self.b(' TpProxyPendingCall *data;')
+ self.b('')
+ self.b(' data = tp_proxy_pending_call_v0_new ((TpProxy *) proxy,')
+ self.b(' interface, "%s", iface,' % member)
+ self.b(' %s,' % invoke_callback)
+ self.b(' G_CALLBACK (callback), user_data, destroy,')
+ self.b(' weak_object, FALSE);')
+ self.b(' tp_proxy_pending_call_v0_take_pending_call (data,')
+ self.b(' dbus_g_proxy_begin_call_with_timeout (iface,')
+ self.b(' "%s",' % member)
+ self.b(' %s,' % collect_callback)
+ self.b(' data,')
+ self.b(' tp_proxy_pending_call_v0_completed,')
+ self.b(' timeout_ms,')
+
+ for arg in in_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ const = pointer and 'const ' or ''
+
+ self.b(' %s, %s,' % (gtype, name))
+
+ self.b(' G_TYPE_INVALID));')
+ self.b('')
+ self.b(' return data;')
+ self.b(' }')
+ self.b('}')
+ self.b('')
+
+ # Reentrant blocking calls
+ # Example:
+ # gboolean tp_cli_properties_interface_run_get_properties
+ # (gpointer proxy,
+ # gint timeout_ms,
+ # const GArray *in_properties,
+ # GPtrArray **out0,
+ # GError **error,
+ # GMainLoop **loop);
+
+ self.b('typedef struct {')
+ self.b(' GMainLoop *loop;')
+ self.b(' GError **error;')
+
+ for arg in out_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ self.b(' %s*%s;' % (ctype, name))
+
+ self.b(' gboolean success:1;')
+ self.b(' gboolean completed:1;')
+ self.b('} _%s_%s_run_state_%s;'
+ % (self.prefix_lc, iface_lc, member_lc))
+
+ reentrant_invoke = '_%s_%s_finish_running_%s' % (self.prefix_lc,
+ iface_lc,
+ member_lc)
+
+ self.b('static void')
+ self.b('%s (TpProxy *self G_GNUC_UNUSED,' % reentrant_invoke)
+ self.b(' GError *error,')
+ self.b(' GValueArray *args,')
+ self.b(' GCallback unused G_GNUC_UNUSED,')
+ self.b(' gpointer user_data G_GNUC_UNUSED,')
+ self.b(' GObject *unused2 G_GNUC_UNUSED)')
+ self.b('{')
+ self.b(' _%s_%s_run_state_%s *state = user_data;'
+ % (self.prefix_lc, iface_lc, member_lc))
+ self.b('')
+ self.b(' state->success = (error == NULL);')
+ self.b(' state->completed = TRUE;')
+ self.b(' g_main_loop_quit (state->loop);')
+ self.b('')
+ self.b(' if (error != NULL)')
+ self.b(' {')
+ self.b(' if (state->error != NULL)')
+ self.b(' *state->error = error;')
+ self.b(' else')
+ self.b(' g_error_free (error);')
+ self.b('')
+ self.b(' return;')
+ self.b(' }')
+ self.b('')
+
+ for i, arg in enumerate(out_args):
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ self.b(' if (state->%s != NULL)' % name)
+ if marshaller == 'BOXED':
+ self.b(' *state->%s = g_value_dup_boxed ('
+ 'args->values + %d);' % (name, i))
+ elif marshaller == 'STRING':
+ self.b(' *state->%s = g_value_dup_string '
+ '(args->values + %d);' % (name, i))
+ elif marshaller in ('UCHAR', 'BOOLEAN', 'INT', 'UINT',
+ 'INT64', 'UINT64', 'DOUBLE'):
+ self.b(' *state->%s = g_value_get_%s (args->values + %d);'
+ % (name, marshaller.lower(), i))
+ else:
+ assert False, "Don't know how to copy %s" % gtype
+
+ self.b('')
+
+ if len(out_args) > 0:
+ self.b(' g_value_array_free (args);')
+ else:
+ self.b(' if (args != NULL)')
+ self.b(' g_value_array_free (args);')
+
+ self.b('}')
+ self.b('')
+
+ self.h('gboolean %s_%s_run_%s (%sproxy,'
+ % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg))
+ self.h(' gint timeout_ms,')
+
+ self.b('/**')
+ self.b(' * %s_%s_run_%s:' % (self.prefix_lc, iface_lc, member_lc))
+ self.b(' * @proxy: %s' % self.proxy_doc)
+ self.b(' * @timeout_ms: Timeout in milliseconds, or -1 for default')
+
+ for arg in in_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ self.b(' * @%s: Used to pass an \'in\' argument: %s'
+ % (name, xml_escape(get_docstring(elt) or '(Undocumented)')))
+
+ for arg in out_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ self.b(' * @%s: Used to return an \'out\' argument if %%TRUE is '
+ 'returned: %s'
+ % (name, xml_escape(get_docstring(elt) or '(Undocumented)')))
+
+ self.b(' * @error: If not %NULL, used to return errors if %FALSE ')
+ self.b(' * is returned')
+ self.b(' * @loop: If not %NULL, set before re-entering ')
+ self.b(' * the main loop, to point to a #GMainLoop ')
+ self.b(' * which can be used to cancel this call with ')
+ self.b(' * g_main_loop_quit(), causing a return of ')
+ self.b(' * %FALSE with @error set to %TP_DBUS_ERROR_CANCELLED')
+ self.b(' *')
+ self.b(' * Call the method %s and run the main loop' % member)
+ self.b(' * until it returns. Before calling this method, you must')
+ self.b(' * add a reference to any borrowed objects you need to keep,')
+ self.b(' * and generally ensure that everything is in a consistent')
+ self.b(' * state.')
+ self.b(' *')
+ self.b(' * %s' % xml_escape(get_docstring(method) or '(Undocumented)'))
+ self.b(' *')
+ self.b(' * Returns: TRUE on success, FALSE and sets @error on error')
+ self.b(' */')
+ self.b('gboolean\n%s_%s_run_%s (%sproxy,'
+ % (self.prefix_lc, iface_lc, member_lc, self.proxy_arg))
+ self.b(' gint timeout_ms,')
+
+ for arg in in_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ const = pointer and 'const ' or ''
+
+ self.h(' %s%s%s,' % (const, ctype, name))
+ self.b(' %s%s%s,' % (const, ctype, name))
+
+ for arg in out_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ self.h(' %s*%s,' % (ctype, name))
+ self.b(' %s*%s,' % (ctype, name))
+
+ self.h(' GError **error,')
+ self.h(' GMainLoop **loop);')
+ self.h('')
+
+ self.b(' GError **error,')
+ self.b(' GMainLoop **loop)')
+ self.b('{')
+ self.b(' DBusGProxy *iface;')
+ self.b(' GQuark interface = %s;' % self.get_iface_quark())
+ self.b(' TpProxyPendingCall *pc;')
+ self.b(' _%s_%s_run_state_%s state = {'
+ % (self.prefix_lc, iface_lc, member_lc))
+ self.b(' NULL /* loop */, error,')
+
+ for arg in out_args:
+ name, info, tp_type, elt = arg
+
+ self.b(' %s,' % name)
+
+ self.b(' FALSE /* completed */, FALSE /* success */ };')
+ self.b('')
+ self.b(' g_return_val_if_fail (%s (proxy), FALSE);'
+ % self.proxy_assert)
+ self.b('')
+ self.b(' iface = tp_proxy_borrow_interface_by_id')
+ self.b(' ((TpProxy *) proxy, interface, error);')
+ self.b('')
+ self.b(' if (iface == NULL)')
+ self.b(' return FALSE;')
+ self.b('')
+ self.b(' state.loop = g_main_loop_new (NULL, FALSE);')
+ self.b('')
+ self.b(' pc = tp_proxy_pending_call_v0_new ((TpProxy *) proxy,')
+ self.b(' interface, "%s", iface,' % member)
+ self.b(' %s,' % reentrant_invoke)
+ self.b(' NULL, &state, NULL, NULL, TRUE);')
+ self.b('')
+ self.b(' if (loop != NULL)')
+ self.b(' *loop = state.loop;')
+ self.b('')
+ self.b(' tp_proxy_pending_call_v0_take_pending_call (pc,')
+ self.b(' dbus_g_proxy_begin_call_with_timeout (iface,')
+ self.b(' "%s",' % member)
+ self.b(' %s,' % collect_callback)
+ self.b(' pc,')
+ self.b(' tp_proxy_pending_call_v0_completed,')
+ self.b(' timeout_ms,')
+
+ for arg in in_args:
+ name, info, tp_type, elt = arg
+ ctype, gtype, marshaller, pointer = info
+
+ const = pointer and 'const ' or ''
+
+ self.b(' %s, %s,' % (gtype, name))
+
+ self.b(' G_TYPE_INVALID));')
+ self.b('')
+ self.b(' if (!state.completed)')
+ self.b(' g_main_loop_run (state.loop);')
+ self.b('')
+ self.b(' if (!state.completed)')
+ self.b(' tp_proxy_pending_call_cancel (pc);')
+ self.b('')
+ self.b(' if (loop != NULL)')
+ self.b(' *loop = NULL;')
+ self.b('')
+ self.b(' g_main_loop_unref (state.loop);')
+ self.b('')
+ self.b(' return state.success;')
+ self.b('}')
+ self.b('')
+
+ # leave a gap for the end of the method
+ self.b('')
+ self.h('')
+
+ def do_signal_add(self, signal):
+ marshaller_items = []
+ gtypes = []
+
+ for i in signal.getElementsByTagName('arg'):
+ name = i.getAttribute('name')
+ type = i.getAttribute('type')
+ info = type_to_gtype(type)
+ # type, GType, STRING, is a pointer
+ gtypes.append(info[1])
+
+ self.b(' dbus_g_proxy_add_signal (proxy, "%s",'
+ % signal.getAttribute('name'))
+ for gtype in gtypes:
+ self.b(' %s,' % gtype)
+ self.b(' G_TYPE_INVALID);')
+
+ def do_interface(self, node):
+ ifaces = node.getElementsByTagName('interface')
+ assert len(ifaces) == 1
+ iface = ifaces[0]
+ name = node.getAttribute('name').replace('/', '')
+
+ self.iface = name
+ self.iface_lc = name.lower()
+ self.iface_uc = name.upper()
+ self.iface_mc = name.replace('_', '')
+ self.iface_dbus = iface.getAttribute('name')
+
+ signals = node.getElementsByTagName('signal')
+ methods = node.getElementsByTagName('method')
+
+ if signals:
+ self.b('static inline void')
+ self.b('%s_add_signals_for_%s (DBusGProxy *proxy)'
+ % (self.prefix_lc, name.lower()))
+ self.b('{')
+
+ if self.tp_proxy_api >= (0, 7, 6):
+ self.b(' if (!tp_proxy_dbus_g_proxy_claim_for_signal_adding '
+ '(proxy))')
+ self.b(' return;')
+
+ for signal in signals:
+ self.do_signal_add(signal)
+
+ self.b('}')
+ self.b('')
+ self.b('')
+
+ for signal in signals:
+ self.do_signal(name, signal)
+
+ for method in methods:
+ self.do_method(name, method)
+
+ self.iface_dbus = None
+
+ def __call__(self):
+
+ self.h('G_BEGIN_DECLS')
+ self.h('')
+
+ self.b('/* We don\'t want gtkdoc scanning this file, it\'ll get')
+ self.b(' * confused by seeing function definitions, so mark it as: */')
+ self.b('/*<private_header>*/')
+ self.b('')
+
+ nodes = self.dom.getElementsByTagName('node')
+ nodes.sort(cmp_by_name)
+
+ for node in nodes:
+ self.do_interface(node)
+
+ if self.group is not None:
+
+ self.b('/*')
+ self.b(' * %s_%s_add_signals:' % (self.prefix_lc, self.group))
+ self.b(' * @self: the #TpProxy')
+ self.b(' * @quark: a quark whose string value is the interface')
+ self.b(' * name whose signals should be added')
+ self.b(' * @proxy: the D-Bus proxy to which to add the signals')
+ self.b(' * @unused: not used for anything')
+ self.b(' *')
+ self.b(' * Tell dbus-glib that @proxy has the signatures of all')
+ self.b(' * signals on the given interface, if it\'s one we')
+ self.b(' * support.')
+ self.b(' *')
+ self.b(' * This function should be used as a signal handler for')
+ self.b(' * #TpProxy::interface-added.')
+ self.b(' */')
+ self.b('static void')
+ self.b('%s_%s_add_signals (TpProxy *self G_GNUC_UNUSED,'
+ % (self.prefix_lc, self.group))
+ self.b(' guint quark,')
+ self.b(' DBusGProxy *proxy,')
+ self.b(' gpointer unused G_GNUC_UNUSED)')
+
+ self.b('{')
+
+ for node in nodes:
+ iface = node.getElementsByTagName('interface')[0]
+ self.iface_dbus = iface.getAttribute('name')
+ signals = node.getElementsByTagName('signal')
+ if not signals:
+ continue
+ name = node.getAttribute('name').replace('/', '').lower()
+ self.iface_uc = name.upper()
+ self.b(' if (quark == %s)' % self.get_iface_quark())
+ self.b(' %s_add_signals_for_%s (proxy);'
+ % (self.prefix_lc, name))
+
+ self.b('}')
+ self.b('')
+
+ self.h('G_END_DECLS')
+ self.h('')
+
+ open(self.basename + '.h', 'w').write('\n'.join(self.__header))
+ open(self.basename + '-body.h', 'w').write('\n'.join(self.__body))
+
+
+def types_to_gtypes(types):
+ return [type_to_gtype(t)[1] for t in types]
+
+
+if __name__ == '__main__':
+ options, argv = gnu_getopt(sys.argv[1:], '',
+ ['group=', 'subclass=', 'subclass-assert=',
+ 'iface-quark-prefix=', 'tp-proxy-api='])
+
+ opts = {}
+
+ for option, value in options:
+ opts[option] = value
+
+ dom = xml.dom.minidom.parse(argv[0])
+
+ Generator(dom, argv[1], argv[2], opts)()
diff --git a/trunk/tools/glib-client-marshaller-gen.py b/trunk/tools/glib-client-marshaller-gen.py
new file mode 100644
index 000000000..54447255b
--- /dev/null
+++ b/trunk/tools/glib-client-marshaller-gen.py
@@ -0,0 +1,59 @@
+#!/usr/bin/python
+
+import sys
+import xml.dom.minidom
+from string import ascii_letters, digits
+
+
+from libglibcodegen import signal_to_marshal_name
+
+
+NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+
+class Generator(object):
+
+ def __init__(self, dom, prefix):
+ self.dom = dom
+ self.marshallers = {}
+ self.prefix = prefix
+
+ def do_signal(self, signal):
+ marshaller = signal_to_marshal_name(signal, self.prefix)
+
+ assert '__' in marshaller
+ rhs = marshaller.split('__', 1)[1].split('_')
+
+ self.marshallers[marshaller] = rhs
+
+ def __call__(self):
+ signals = self.dom.getElementsByTagName('signal')
+
+ for signal in signals:
+ self.do_signal(signal)
+
+ print 'void'
+ print '%s_register_dbus_glib_marshallers (void)' % self.prefix
+ print '{'
+
+ all = self.marshallers.keys()
+ all.sort()
+ for marshaller in all:
+ rhs = self.marshallers[marshaller]
+
+ print ' dbus_g_object_register_marshaller (%s,' % marshaller
+ print ' G_TYPE_NONE, /* return */'
+ for type in rhs:
+ print ' G_TYPE_%s,' % type.replace('VOID', 'NONE')
+ print ' G_TYPE_INVALID);'
+
+ print '}'
+
+
+def types_to_gtypes(types):
+ return [type_to_gtype(t)[1] for t in types]
+
+if __name__ == '__main__':
+ argv = sys.argv[1:]
+ dom = xml.dom.minidom.parse(argv[0])
+
+ Generator(dom, argv[1])()
diff --git a/trunk/tools/glib-errors-enum-body.xsl b/trunk/tools/glib-errors-enum-body.xsl
new file mode 100644
index 000000000..17054b765
--- /dev/null
+++ b/trunk/tools/glib-errors-enum-body.xsl
@@ -0,0 +1,72 @@
+<!-- Stylesheet to extract GLib error enumerations from the Telepathy spec.
+The master copy of this stylesheet is in telepathy-glib - please make any
+changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+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.
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+ exclude-result-prefixes="tp">
+
+ <xsl:output method="text" indent="no" encoding="ascii"/>
+
+ <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
+ <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
+
+ <xsl:template match="tp:error" mode="values">
+ <!-- CHANNEL_BANNED -->
+ <xsl:variable name="name" select="translate(@name, concat($lower, '. '),
+ concat($upper, '__'))"/>
+ <!-- Channel.Banned -->
+ <xsl:variable name="nick" select="translate(@name, ' ', '')"/>
+ /* <xsl:value-of select="concat(../@namespace, '.', $name)"/>
+ <xsl:value-of select="tp:docstring"/> */
+ { TP_ERROR_<xsl:value-of select="$name"/>, "TP_ERROR_<xsl:value-of select="$name"/>", "<xsl:value-of select="$nick"/>" },
+</xsl:template>
+
+ <xsl:template match="text()"/>
+
+ <xsl:template match="//tp:errors">/* Generated from the Telepathy spec
+
+<xsl:for-each select="tp:copyright">
+<xsl:value-of select="."/><xsl:text>
+</xsl:text></xsl:for-each><xsl:text>
+</xsl:text><xsl:value-of select="tp:license"/>
+*/
+
+#include &lt;_gen/telepathy-errors.h&gt;
+
+GType
+tp_error_get_type (void)
+{
+ static GType etype = 0;
+ if (G_UNLIKELY (etype == 0))
+ {
+ static const GEnumValue values[] = {
+<xsl:apply-templates select="tp:error" mode="values"/> };
+
+ etype = g_enum_register_static ("TpError", values);
+ }
+ return etype;
+}
+
+</xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et noai noci: -->
diff --git a/trunk/tools/glib-errors-enum-header.xsl b/trunk/tools/glib-errors-enum-header.xsl
new file mode 100644
index 000000000..5275041cd
--- /dev/null
+++ b/trunk/tools/glib-errors-enum-header.xsl
@@ -0,0 +1,73 @@
+<!-- Stylesheet to extract GLib error enumerations from the Telepathy spec.
+The master copy of this stylesheet is in telepathy-glib - please make any
+changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+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.
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+ exclude-result-prefixes="tp">
+
+ <xsl:output method="text" indent="no" encoding="ascii"/>
+
+ <xsl:template match="tp:error" mode="gtkdoc">
+ * @TP_ERROR_<xsl:value-of select="translate(@name, 'abcdefghijklmnopqrstuvwxyz .', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ__')"/>: <xsl:value-of select="concat(../@namespace, '.', translate(@name, ' ', ''))"/>:
+ * <xsl:value-of select="translate(tp:docstring, '&#13;&#10;', '')"/>
+ </xsl:template>
+
+ <xsl:template match="tp:error" mode="enum">
+<xsl:text> TP_ERROR_</xsl:text><xsl:value-of select="translate(@name, 'abcdefghijklmnopqrstuvwxyz .', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ__')"/>,
+</xsl:template>
+
+ <xsl:template match="text()"/>
+
+ <xsl:template match="//tp:errors">/* Generated from the Telepathy spec
+
+<xsl:for-each select="tp:copyright">
+<xsl:value-of select="."/><xsl:text>
+</xsl:text></xsl:for-each><xsl:text>
+</xsl:text><xsl:value-of select="tp:license"/>
+*/
+
+#include &lt;glib-object.h&gt;
+
+G_BEGIN_DECLS
+
+GType tp_error_get_type (void);
+
+/**
+ * TP_TYPE_ERROR:
+ *
+ * The GType of the Telepathy error enumeration.
+ */
+#define TP_TYPE_ERROR (tp_error_get_type())
+
+/**
+ * TpError:<xsl:apply-templates select="tp:error" mode="gtkdoc"/>
+ *
+ * Enumerated type representing the Telepathy D-Bus errors.
+ */
+typedef enum {
+<xsl:apply-templates select="tp:error" mode="enum"/>} TpError;
+
+G_END_DECLS
+</xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et noai noci: -->
diff --git a/trunk/tools/glib-ginterface-gen.py b/trunk/tools/glib-ginterface-gen.py
new file mode 100644
index 000000000..36f3242b0
--- /dev/null
+++ b/trunk/tools/glib-ginterface-gen.py
@@ -0,0 +1,711 @@
+#!/usr/bin/python
+
+# glib-ginterface-gen.py: service-side interface generator
+#
+# Generate dbus-glib 0.x service GInterfaces from the Telepathy specification.
+# The master copy of this program is in the telepathy-glib repository -
+# please make any changes there.
+#
+# Copyright (C) 2006, 2007 Collabora Limited
+#
+# 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
+
+import sys
+import os.path
+import xml.dom.minidom
+
+from libglibcodegen import Signature, type_to_gtype, cmp_by_name, \
+ camelcase_to_lower, NS_TP, dbus_gutils_wincaps_to_uscore, \
+ signal_to_marshal_name, method_to_glue_marshal_name
+
+
+NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+
+class Generator(object):
+
+ def __init__(self, dom, prefix, basename, signal_marshal_prefix,
+ headers, end_headers, not_implemented_func,
+ allow_havoc):
+ self.dom = dom
+ self.__header = []
+ self.__body = []
+
+ assert prefix.endswith('_')
+ assert not signal_marshal_prefix.endswith('_')
+
+ # The main_prefix, sub_prefix thing is to get:
+ # FOO_ -> (FOO_, _)
+ # FOO_SVC_ -> (FOO_, _SVC_)
+ # but
+ # FOO_BAR/ -> (FOO_BAR_, _)
+ # FOO_BAR/SVC_ -> (FOO_BAR_, _SVC_)
+
+ if '/' in prefix:
+ main_prefix, sub_prefix = prefix.upper().split('/', 1)
+ prefix = prefix.replace('/', '_')
+ else:
+ main_prefix, sub_prefix = prefix.upper().split('_', 1)
+
+ self.MAIN_PREFIX_ = main_prefix + '_'
+ self._SUB_PREFIX_ = '_' + sub_prefix
+
+ self.Prefix_ = prefix
+ self.Prefix = prefix.replace('_', '')
+ self.prefix_ = prefix.lower()
+ self.PREFIX_ = prefix.upper()
+
+ self.signal_marshal_prefix = signal_marshal_prefix
+ self.headers = headers
+ self.end_headers = end_headers
+ self.not_implemented_func = not_implemented_func
+ self.allow_havoc = allow_havoc
+
+ def h(self, s):
+ self.__header.append(s)
+
+ def b(self, s):
+ self.__body.append(s)
+
+ def do_node(self, node):
+ node_name = node.getAttribute('name').replace('/', '')
+ node_name_mixed = self.node_name_mixed = node_name.replace('_', '')
+ node_name_lc = self.node_name_lc = node_name.lower()
+ node_name_uc = self.node_name_uc = node_name.upper()
+
+ interfaces = node.getElementsByTagName('interface')
+ assert len(interfaces) == 1, interfaces
+ interface = interfaces[0]
+ self.iface_name = interface.getAttribute('name')
+
+ tmp = interface.getAttribute('tp:implement-service')
+ if tmp == "no":
+ return
+
+ tmp = interface.getAttribute('tp:causes-havoc')
+ if tmp and not self.allow_havoc:
+ raise AssertionError('%s is %s' % (self.iface_name, tmp))
+
+ self.b('static const DBusGObjectInfo _%s%s_object_info;'
+ % (self.prefix_, node_name_lc))
+ self.b('')
+
+ methods = interface.getElementsByTagName('method')
+ signals = interface.getElementsByTagName('signal')
+ properties = interface.getElementsByTagName('property')
+ # Don't put properties in dbus-glib glue
+ glue_properties = []
+
+ self.b('struct _%s%sClass {' % (self.Prefix, node_name_mixed))
+ self.b(' GTypeInterface parent_class;')
+ for method in methods:
+ self.b(' %s %s;' % self.get_method_impl_names(method))
+ self.b('};')
+ self.b('')
+
+ if signals:
+ self.b('enum {')
+ for signal in signals:
+ self.b(' %s,' % self.get_signal_const_entry(signal))
+ self.b(' N_%s_SIGNALS' % node_name_uc)
+ self.b('};')
+ self.b('static guint %s_signals[N_%s_SIGNALS] = {0};'
+ % (node_name_lc, node_name_uc))
+ self.b('')
+
+ self.b('static void %s%s_base_init (gpointer klass);'
+ % (self.prefix_, node_name_lc))
+ self.b('')
+
+ self.b('GType')
+ self.b('%s%s_get_type (void)'
+ % (self.prefix_, node_name_lc))
+ self.b('{')
+ self.b(' static GType type = 0;')
+ self.b('')
+ self.b(' if (G_UNLIKELY (type == 0))')
+ self.b(' {')
+ self.b(' static const GTypeInfo info = {')
+ self.b(' sizeof (%s%sClass),' % (self.Prefix, node_name_mixed))
+ self.b(' %s%s_base_init, /* base_init */'
+ % (self.prefix_, node_name_lc))
+ self.b(' NULL, /* base_finalize */')
+ self.b(' NULL, /* class_init */')
+ self.b(' NULL, /* class_finalize */')
+ self.b(' NULL, /* class_data */')
+ self.b(' 0,')
+ self.b(' 0, /* n_preallocs */')
+ self.b(' NULL /* instance_init */')
+ self.b(' };')
+ self.b('')
+ self.b(' type = g_type_register_static (G_TYPE_INTERFACE,')
+ self.b(' "%s%s", &info, 0);' % (self.Prefix, node_name_mixed))
+ self.b(' }')
+ self.b('')
+ self.b(' return type;')
+ self.b('}')
+ self.b('')
+
+ self.h('/**')
+ self.h(' * %s%s:' % (self.Prefix, node_name_mixed))
+ self.h(' *')
+ self.h(' * Dummy typedef representing any implementation of this '
+ 'interface.')
+ self.h(' */')
+ self.h('typedef struct _%s%s %s%s;'
+ % (self.Prefix, node_name_mixed, self.Prefix, node_name_mixed))
+ self.h('')
+ self.h('/**')
+ self.h(' * %s%sClass:' % (self.Prefix, node_name_mixed))
+ self.h(' *')
+ self.h(' * The class of %s%s.' % (self.Prefix, node_name_mixed))
+ self.h(' */')
+ self.h('typedef struct _%s%sClass %s%sClass;'
+ % (self.Prefix, node_name_mixed, self.Prefix, node_name_mixed))
+ self.h('')
+ self.h('GType %s%s_get_type (void);'
+ % (self.prefix_, node_name_lc))
+
+ gtype = self.current_gtype = \
+ self.MAIN_PREFIX_ + 'TYPE' + self._SUB_PREFIX_ + node_name_uc
+ classname = self.Prefix + node_name_mixed
+
+ self.h('#define %s \\\n (%s%s_get_type ())'
+ % (gtype, self.prefix_, node_name_lc))
+ self.h('#define %s%s(obj) \\\n'
+ ' (G_TYPE_CHECK_INSTANCE_CAST((obj), %s, %s))'
+ % (self.PREFIX_, node_name_uc, gtype, classname))
+ self.h('#define %sIS%s%s(obj) \\\n'
+ ' (G_TYPE_CHECK_INSTANCE_TYPE((obj), %s))'
+ % (self.MAIN_PREFIX_, self._SUB_PREFIX_, node_name_uc, gtype))
+ self.h('#define %s%s_GET_CLASS(obj) \\\n'
+ ' (G_TYPE_INSTANCE_GET_INTERFACE((obj), %s, %sClass))'
+ % (self.PREFIX_, node_name_uc, gtype, classname))
+ self.h('')
+ self.h('')
+
+ base_init_code = []
+
+ for method in methods:
+ self.do_method(method)
+
+ for signal in signals:
+ base_init_code.extend(self.do_signal(signal))
+
+ self.b('static inline void')
+ self.b('%s%s_base_init_once (gpointer klass G_GNUC_UNUSED)'
+ % (self.prefix_, node_name_lc))
+ self.b('{')
+ self.b(' static TpDBusPropertiesMixinPropInfo properties[%d] = {'
+ % (len(properties) + 1))
+
+ for m in properties:
+ access = m.getAttribute('access')
+ assert access in ('read', 'write', 'readwrite')
+
+ if access == 'read':
+ flags = 'TP_DBUS_PROPERTIES_MIXIN_FLAG_READ'
+ elif access == 'write':
+ flags = 'TP_DBUS_PROPERTIES_MIXIN_FLAG_WRITE'
+ else:
+ flags = ('TP_DBUS_PROPERTIES_MIXIN_FLAG_READ | '
+ 'TP_DBUS_PROPERTIES_MIXIN_FLAG_WRITE')
+
+ self.b(' { 0, %s, "%s", 0, NULL, NULL }, /* %s */'
+ % (flags, m.getAttribute('type'), m.getAttribute('name')))
+
+ self.b(' { 0, 0, NULL, 0, NULL, NULL }')
+ self.b(' };')
+ self.b(' static TpDBusPropertiesMixinIfaceInfo interface =')
+ self.b(' { 0, properties, NULL, NULL };')
+ self.b('')
+ self.b(' interface.dbus_interface = g_quark_from_static_string '
+ '("%s");' % self.iface_name)
+
+ for i, m in enumerate(properties):
+ self.b(' properties[%d].name = g_quark_from_static_string ("%s");'
+ % (i, m.getAttribute('name')))
+ self.b(' properties[%d].type = %s;'
+ % (i, type_to_gtype(m.getAttribute('type'))[1]))
+
+ self.b(' tp_svc_interface_set_dbus_properties_info (%s, &interface);'
+ % self.current_gtype)
+
+ self.b('')
+ for s in base_init_code:
+ self.b(s)
+ self.b(' dbus_g_object_type_install_info (%s%s_get_type (),'
+ % (self.prefix_, node_name_lc))
+ self.b(' &_%s%s_object_info);'
+ % (self.prefix_, node_name_lc))
+ self.b('}')
+
+ self.b('static void')
+ self.b('%s%s_base_init (gpointer klass)'
+ % (self.prefix_, node_name_lc))
+ self.b('{')
+ self.b(' static gboolean initialized = FALSE;')
+ self.b('')
+ self.b(' if (!initialized)')
+ self.b(' {')
+ self.b(' initialized = TRUE;')
+ self.b(' %s%s_base_init_once (klass);'
+ % (self.prefix_, node_name_lc))
+ self.b(' }')
+ # insert anything we need to do per implementation here
+ self.b('}')
+
+ self.h('')
+
+ self.b('static const DBusGMethodInfo _%s%s_methods[] = {'
+ % (self.prefix_, node_name_lc))
+
+ method_blob, offsets = self.get_method_glue(methods)
+
+ for method, offset in zip(methods, offsets):
+ self.do_method_glue(method, offset)
+
+ self.b('};')
+ self.b('')
+
+ self.b('static const DBusGObjectInfo _%s%s_object_info = {'
+ % (self.prefix_, node_name_lc))
+ self.b(' 0,') # version
+ self.b(' _%s%s_methods,' % (self.prefix_, node_name_lc))
+ self.b(' %d,' % len(methods))
+ self.b('"' + method_blob.replace('\0', '\\0') + '",')
+ self.b('"' + self.get_signal_glue(signals).replace('\0', '\\0') + '",')
+ self.b('"' +
+ self.get_property_glue(glue_properties).replace('\0', '\\0') +
+ '",')
+ self.b('};')
+ self.b('')
+
+ self.node_name_mixed = None
+ self.node_name_lc = None
+ self.node_name_uc = None
+
+ def get_method_glue(self, methods):
+ info = []
+ offsets = []
+
+ for method in methods:
+ offsets.append(len(''.join(info)))
+
+ info.append(self.iface_name + '\0')
+ info.append(method.getAttribute('name') + '\0')
+
+ info.append('A\0') # async
+
+ counter = 0
+ for arg in method.getElementsByTagName('arg'):
+ out = arg.getAttribute('direction') == 'out'
+
+ name = arg.getAttribute('name')
+ if not name:
+ assert out
+ name = 'arg%u' % counter
+ counter += 1
+
+ info.append(name + '\0')
+
+ if out:
+ info.append('O\0')
+ else:
+ info.append('I\0')
+
+ if out:
+ info.append('F\0') # not const
+ info.append('N\0') # not error or return
+ info.append(arg.getAttribute('type') + '\0')
+
+ info.append('\0')
+
+ return ''.join(info) + '\0', offsets
+
+ def do_method_glue(self, method, offset):
+ lc_name = camelcase_to_lower(method.getAttribute('name'))
+
+ marshaller = method_to_glue_marshal_name(method,
+ self.signal_marshal_prefix)
+ wrapper = self.prefix_ + self.node_name_lc + '_' + lc_name
+
+ self.b(" { (GCallback) %s, %s, %d }," % (wrapper, marshaller, offset))
+
+ def get_signal_glue(self, signals):
+ info = []
+
+ for signal in signals:
+ info.append(self.iface_name)
+ info.append(signal.getAttribute('name'))
+
+ return '\0'.join(info) + '\0\0'
+
+ # the implementation can be the same
+ get_property_glue = get_signal_glue
+
+ def get_method_impl_names(self, method):
+ dbus_method_name = method.getAttribute('name')
+ class_member_name = camelcase_to_lower(dbus_method_name)
+ stub_name = (self.prefix_ + self.node_name_lc + '_' +
+ class_member_name)
+ return (stub_name + '_impl', class_member_name)
+
+ def do_method(self, method):
+ assert self.node_name_mixed is not None
+
+ in_class = []
+
+ # Examples refer to Thing.DoStuff (su) -> ii
+
+ # DoStuff
+ dbus_method_name = method.getAttribute('name')
+ # do_stuff
+ class_member_name = camelcase_to_lower(dbus_method_name)
+ # void tp_svc_thing_do_stuff (TpSvcThing *, const char *, guint,
+ # DBusGMethodInvocation *);
+ stub_name = (self.prefix_ + self.node_name_lc + '_' +
+ class_member_name)
+ # typedef void (*tp_svc_thing_do_stuff_impl) (TpSvcThing *,
+ # const char *, guint, DBusGMethodInvocation);
+ impl_name = stub_name + '_impl'
+ # void tp_svc_thing_return_from_do_stuff (DBusGMethodInvocation *,
+ # gint, gint);
+ ret_name = (self.prefix_ + self.node_name_lc + '_return_from_' +
+ class_member_name)
+
+ # Gather arguments
+ in_args = []
+ out_args = []
+ for i in method.getElementsByTagName('arg'):
+ name = i.getAttribute('name')
+ direction = i.getAttribute('direction') or 'in'
+ dtype = i.getAttribute('type')
+
+ assert direction in ('in', 'out')
+
+ if name:
+ name = direction + '_' + name
+ elif direction == 'in':
+ name = direction + str(len(in_args))
+ else:
+ name = direction + str(len(out_args))
+
+ ctype, gtype, marshaller, pointer = type_to_gtype(dtype)
+
+ if pointer:
+ ctype = 'const ' + ctype
+
+ struct = (ctype, name)
+
+ if direction == 'in':
+ in_args.append(struct)
+ else:
+ out_args.append(struct)
+
+ # Implementation type declaration (in header, docs in body)
+ self.b('/**')
+ self.b(' * %s:' % impl_name)
+ self.b(' * @self: The object implementing this interface')
+ for (ctype, name) in in_args:
+ self.b(' * @%s: %s (FIXME, generate documentation)'
+ % (name, ctype))
+ self.b(' * @context: Used to return values or throw an error')
+ self.b(' *')
+ self.b(' * The signature of an implementation of the D-Bus method')
+ self.b(' * %s on interface %s.' % (dbus_method_name, self.iface_name))
+ self.b(' */')
+ self.h('typedef void (*%s) (%s%s *self,'
+ % (impl_name, self.Prefix, self.node_name_mixed))
+ for (ctype, name) in in_args:
+ self.h(' %s%s,' % (ctype, name))
+ self.h(' DBusGMethodInvocation *context);')
+
+ # Class member (in class definition)
+ in_class.append(' %s %s;' % (impl_name, class_member_name))
+
+ # Stub definition (in body only - it's static)
+ self.b('static void')
+ self.b('%s (%s%s *self,'
+ % (stub_name, self.Prefix, self.node_name_mixed))
+ for (ctype, name) in in_args:
+ self.b(' %s%s,' % (ctype, name))
+ self.b(' DBusGMethodInvocation *context)')
+ self.b('{')
+ self.b(' %s impl = (%s%s_GET_CLASS (self)->%s);'
+ % (impl_name, self.PREFIX_, self.node_name_uc, class_member_name))
+ self.b('')
+ self.b(' if (impl != NULL)')
+ tmp = ['self'] + [name for (ctype, name) in in_args] + ['context']
+ self.b(' {')
+ self.b(' (impl) (%s);' % ',\n '.join(tmp))
+ self.b(' }')
+ self.b(' else')
+ self.b(' {')
+ if self.not_implemented_func:
+ self.b(' %s (context);' % self.not_implemented_func)
+ else:
+ self.b(' GError e = { DBUS_GERROR, ')
+ self.b(' DBUS_GERROR_UNKNOWN_METHOD,')
+ self.b(' "Method not implemented" };')
+ self.b('')
+ self.b(' dbus_g_method_return_error (context, &e);')
+ self.b(' }')
+ self.b('}')
+ self.b('')
+
+ # Implementation registration (in both header and body)
+ self.h('void %s%s_implement_%s (%s%sClass *klass, %s impl);'
+ % (self.prefix_, self.node_name_lc, class_member_name,
+ self.Prefix, self.node_name_mixed, impl_name))
+
+ self.b('/**')
+ self.b(' * %s%s_implement_%s:'
+ % (self.prefix_, self.node_name_lc, class_member_name))
+ self.b(' * @klass: A class whose instances implement this interface')
+ self.b(' * @impl: A callback used to implement the %s D-Bus method'
+ % dbus_method_name)
+ self.b(' *')
+ self.b(' * Register an implementation for the %s method in the vtable'
+ % dbus_method_name)
+ self.b(' * of an implementation of this interface. To be called from')
+ self.b(' * the interface init function.')
+ self.b(' */')
+ self.b('void')
+ self.b('%s%s_implement_%s (%s%sClass *klass, %s impl)'
+ % (self.prefix_, self.node_name_lc, class_member_name,
+ self.Prefix, self.node_name_mixed, impl_name))
+ self.b('{')
+ self.b(' klass->%s = impl;' % class_member_name)
+ self.b('}')
+ self.b('')
+
+ # Return convenience function (static inline, in header)
+ self.h('/**')
+ self.h(' * %s:' % ret_name)
+ self.h(' * @context: The D-Bus method invocation context')
+ for (ctype, name) in out_args:
+ self.h(' * @%s: %s (FIXME, generate documentation)'
+ % (name, ctype))
+ self.h(' *')
+ self.h(' * Return successfully by calling dbus_g_method_return().')
+ self.h(' * This inline function exists only to provide type-safety.')
+ self.h(' */')
+ tmp = (['DBusGMethodInvocation *context'] +
+ [ctype + name for (ctype, name) in out_args])
+ self.h('static inline')
+ self.h('/* this comment is to stop gtkdoc realising this is static */')
+ self.h(('void %s (' % ret_name) + (',\n '.join(tmp)) + ');')
+ self.h('static inline void')
+ self.h(('%s (' % ret_name) + (',\n '.join(tmp)) + ')')
+ self.h('{')
+ tmp = ['context'] + [name for (ctype, name) in out_args]
+ self.h(' dbus_g_method_return (' + ',\n '.join(tmp) + ');')
+ self.h('}')
+ self.h('')
+
+ return in_class
+
+ def get_signal_const_entry(self, signal):
+ assert self.node_name_uc is not None
+ return ('SIGNAL_%s_%s'
+ % (self.node_name_uc, signal.getAttribute('name')))
+
+ def do_signal(self, signal):
+ assert self.node_name_mixed is not None
+
+ in_base_init = []
+
+ # for signal: Thing::StuffHappened (s, u)
+ # we want to emit:
+ # void tp_svc_thing_emit_stuff_happened (gpointer instance,
+ # const char *arg0, guint arg1);
+
+ dbus_name = signal.getAttribute('name')
+ stub_name = (self.prefix_ + self.node_name_lc + '_emit_' +
+ camelcase_to_lower(dbus_name))
+ const_name = self.get_signal_const_entry(signal)
+
+ # Gather arguments
+ args = []
+ for i in signal.getElementsByTagName('arg'):
+ name = i.getAttribute('name')
+ dtype = i.getAttribute('type')
+ tp_type = i.getAttribute('tp:type')
+
+ if name:
+ name = 'arg_' + name
+ else:
+ name = 'arg' + str(len(args))
+
+ ctype, gtype, marshaller, pointer = type_to_gtype(dtype)
+
+ if pointer:
+ ctype = 'const ' + ctype
+
+ struct = (ctype, name, gtype)
+ args.append(struct)
+
+ tmp = (['gpointer instance'] +
+ [ctype + name for (ctype, name, gtype) in args])
+
+ self.h(('void %s (' % stub_name) + (',\n '.join(tmp)) + ');')
+
+ # FIXME: emit docs
+
+ self.b('/**')
+ self.b(' * %s:' % stub_name)
+ self.b(' * @instance: The object implementing this interface')
+ for (ctype, name, gtype) in args:
+ self.b(' * @%s: %s (FIXME, generate documentation)'
+ % (name, ctype))
+ self.b(' *')
+ self.b(' * Type-safe wrapper around g_signal_emit to emit the')
+ self.b(' * %s signal on interface %s.'
+ % (dbus_name, self.iface_name))
+ self.b(' */')
+
+ self.b('void')
+ self.b(('%s (' % stub_name) + (',\n '.join(tmp)) + ')')
+ self.b('{')
+ self.b(' g_assert (instance != NULL);')
+ self.b(' g_assert (G_TYPE_CHECK_INSTANCE_TYPE (instance, %s));'
+ % (self.current_gtype))
+ tmp = (['instance', '%s_signals[%s]' % (self.node_name_lc, const_name),
+ '0'] + [name for (ctype, name, gtype) in args])
+ self.b(' g_signal_emit (' + ',\n '.join(tmp) + ');')
+ self.b('}')
+ self.b('')
+
+ in_base_init.append(' %s_signals[%s] ='
+ % (self.node_name_lc, const_name))
+ in_base_init.append(' g_signal_new ("%s",'
+ % (dbus_gutils_wincaps_to_uscore(dbus_name).replace('_', '-')))
+ in_base_init.append(' G_OBJECT_CLASS_TYPE (klass),')
+ in_base_init.append(' G_SIGNAL_RUN_LAST|G_SIGNAL_DETAILED,')
+ in_base_init.append(' 0,')
+ in_base_init.append(' NULL, NULL,')
+ in_base_init.append(' %s,'
+ % signal_to_marshal_name(signal, self.signal_marshal_prefix))
+ in_base_init.append(' G_TYPE_NONE,')
+ tmp = ['%d' % len(args)] + [gtype for (ctype, name, gtype) in args]
+ in_base_init.append(' %s);' % ',\n '.join(tmp))
+ in_base_init.append('')
+
+ return in_base_init
+
+ def __call__(self):
+ self.h('#include <glib-object.h>')
+ self.h('#include <dbus/dbus-glib.h>')
+ self.h('#include <telepathy-glib/dbus-properties-mixin.h>')
+ self.h('')
+ self.h('G_BEGIN_DECLS')
+ self.h('')
+
+ self.b('#include "%s.h"' % basename)
+ self.b('')
+ for header in self.headers:
+ self.b('#include %s' % header)
+ self.b('')
+
+ nodes = self.dom.getElementsByTagName('node')
+ nodes.sort(cmp_by_name)
+
+ for node in nodes:
+ self.do_node(node)
+
+ self.h('')
+ self.h('G_END_DECLS')
+
+ self.b('')
+ for header in self.end_headers:
+ self.b('#include %s' % header)
+
+ self.h('')
+ self.b('')
+ open(basename + '.h', 'w').write('\n'.join(self.__header))
+ open(basename + '.c', 'w').write('\n'.join(self.__body))
+
+
+def cmdline_error():
+ print """\
+usage:
+ gen-ginterface [OPTIONS] xmlfile Prefix_
+options:
+ --include='<header.h>' (may be repeated)
+ --include='"header.h"' (ditto)
+ --include-end='"header.h"' (ditto)
+ Include extra headers in the generated .c file
+ --signal-marshal-prefix='prefix'
+ Use the given prefix on generated signal marshallers (default is
+ prefix.lower()).
+ --filename='BASENAME'
+ Set the basename for the output files (default is prefix.lower()
+ + 'ginterfaces')
+ --not-implemented-func='symbol'
+ Set action when methods not implemented in the interface vtable are
+ called. symbol must have signature
+ void symbol (DBusGMethodInvocation *context)
+ and return some sort of "not implemented" error via
+ dbus_g_method_return_error (context, ...)
+"""
+ sys.exit(1)
+
+
+if __name__ == '__main__':
+ from getopt import gnu_getopt
+
+ options, argv = gnu_getopt(sys.argv[1:], '',
+ ['filename=', 'signal-marshal-prefix=',
+ 'include=', 'include-end=',
+ 'allow-unstable',
+ 'not-implemented-func='])
+
+ try:
+ prefix = argv[1]
+ except IndexError:
+ cmdline_error()
+
+ basename = prefix.lower() + 'ginterfaces'
+ signal_marshal_prefix = prefix.lower().rstrip('_')
+ headers = []
+ end_headers = []
+ not_implemented_func = ''
+ allow_havoc = False
+
+ for option, value in options:
+ if option == '--filename':
+ basename = value
+ elif option == '--signal-marshal-prefix':
+ signal_marshal_prefix = value
+ elif option == '--include':
+ if value[0] not in '<"':
+ value = '"%s"' % value
+ headers.append(value)
+ elif option == '--include-end':
+ if value[0] not in '<"':
+ value = '"%s"' % value
+ end_headers.append(value)
+ elif option == '--not-implemented-func':
+ not_implemented_func = value
+ elif option == '--allow-unstable':
+ allow_havoc = True
+
+ try:
+ dom = xml.dom.minidom.parse(argv[0])
+ except IndexError:
+ cmdline_error()
+
+ Generator(dom, prefix, basename, signal_marshal_prefix, headers,
+ end_headers, not_implemented_func, allow_havoc)()
diff --git a/trunk/tools/glib-gtypes-generator.py b/trunk/tools/glib-gtypes-generator.py
new file mode 100644
index 000000000..fcb46e841
--- /dev/null
+++ b/trunk/tools/glib-gtypes-generator.py
@@ -0,0 +1,230 @@
+#!/usr/bin/python
+
+# Generate GLib GInterfaces from the Telepathy specification.
+# The master copy of this program is in the telepathy-glib repository -
+# please make any changes there.
+#
+# Copyright (C) 2006, 2007 Collabora Limited
+#
+# 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
+
+import sys
+import xml.dom.minidom
+
+from libglibcodegen import escape_as_identifier, \
+ get_docstring, \
+ NS_TP, \
+ Signature, \
+ type_to_gtype, \
+ xml_escape
+
+
+def types_to_gtypes(types):
+ return [type_to_gtype(t)[1] for t in types]
+
+
+class GTypesGenerator(object):
+ def __init__(self, dom, output, mixed_case_prefix):
+ self.dom = dom
+ self.Prefix = mixed_case_prefix
+ self.PREFIX_ = self.Prefix.upper() + '_'
+ self.prefix_ = self.Prefix.lower() + '_'
+
+ self.header = open(output + '.h', 'w')
+ self.body = open(output + '-body.h', 'w')
+
+ for f in (self.header, self.body):
+ f.write('/* Auto-generated, do not edit.\n *\n'
+ ' * This file may be distributed under the same terms\n'
+ ' * as the specification from which it was generated.\n'
+ ' */\n\n')
+
+ self.need_mappings = {}
+ self.need_structs = {}
+ self.need_arrays = {}
+
+ def do_mapping_header(self, mapping):
+ members = mapping.getElementsByTagNameNS(NS_TP, 'member')
+ assert len(members) == 2
+
+ impl_sig = ''.join([elt.getAttribute('type')
+ for elt in members])
+
+ esc_impl_sig = escape_as_identifier(impl_sig)
+
+ name = (self.PREFIX_ + 'HASH_TYPE_' +
+ mapping.getAttribute('name').upper())
+ impl = self.prefix_ + 'type_dbus_hash_' + esc_impl_sig
+
+ docstring = get_docstring(mapping) or '(Undocumented)'
+
+ self.header.write('/**\n * %s:\n *\n' % name)
+ self.header.write(' * %s\n' % xml_escape(docstring))
+ self.header.write(' *\n')
+ self.header.write(' * This macro expands to a call to a function\n')
+ self.header.write(' * that returns the #GType of a #GHashTable\n')
+ self.header.write(' * appropriate for representing a D-Bus\n')
+ self.header.write(' * dictionary of signature\n')
+ self.header.write(' * <literal>a{%s}</literal>.\n' % impl_sig)
+ self.header.write(' *\n')
+
+ key, value = members
+
+ self.header.write(' * Keys (D-Bus type <literal>%s</literal>,\n'
+ % key.getAttribute('type'))
+ tp_type = key.getAttributeNS(NS_TP, 'type')
+ if tp_type:
+ self.header.write(' * type <literal>%s</literal>,\n' % tp_type)
+ self.header.write(' * named <literal>%s</literal>):\n'
+ % key.getAttribute('name'))
+ docstring = get_docstring(key) or '(Undocumented)'
+ self.header.write(' * %s\n' % xml_escape(docstring))
+ self.header.write(' *\n')
+
+ self.header.write(' * Values (D-Bus type <literal>%s</literal>,\n'
+ % value.getAttribute('type'))
+ tp_type = value.getAttributeNS(NS_TP, 'type')
+ if tp_type:
+ self.header.write(' * type <literal>%s</literal>,\n' % tp_type)
+ self.header.write(' * named <literal>%s</literal>):\n'
+ % value.getAttribute('name'))
+ docstring = get_docstring(value) or '(Undocumented)'
+ self.header.write(' * %s\n' % xml_escape(docstring))
+ self.header.write(' *\n')
+
+ self.header.write(' */\n')
+
+ self.header.write('#define %s (%s ())\n\n' % (name, impl))
+ self.need_mappings[impl_sig] = esc_impl_sig
+
+ def do_struct_header(self, struct):
+ members = struct.getElementsByTagNameNS(NS_TP, 'member')
+ impl_sig = ''.join([elt.getAttribute('type') for elt in members])
+ esc_impl_sig = escape_as_identifier(impl_sig)
+
+ name = (self.PREFIX_ + 'STRUCT_TYPE_' +
+ struct.getAttribute('name').upper())
+ impl = self.prefix_ + 'type_dbus_struct_' + esc_impl_sig
+ docstring = struct.getElementsByTagNameNS(NS_TP, 'docstring')
+ if docstring:
+ docstring = docstring[0].toprettyxml()
+ if docstring.startswith('<tp:docstring>'):
+ docstring = docstring[14:]
+ if docstring.endswith('</tp:docstring>\n'):
+ docstring = docstring[:-16]
+ if docstring.strip() in ('<tp:docstring/>', ''):
+ docstring = '(Undocumented)'
+ else:
+ docstring = '(Undocumented)'
+ self.header.write('/**\n * %s:\n\n' % name)
+ self.header.write(' * %s\n' % xml_escape(docstring))
+ self.header.write(' *\n')
+ self.header.write(' * This macro expands to a call to a function\n')
+ self.header.write(' * that returns the #GType of a #GValueArray\n')
+ self.header.write(' * appropriate for representing a D-Bus struct\n')
+ self.header.write(' * with signature <literal>(%s)</literal>.\n'
+ % impl_sig)
+ self.header.write(' *\n')
+
+ for i, member in enumerate(members):
+ self.header.write(' * Member %d (D-Bus type '
+ '<literal>%s</literal>,\n'
+ % (i, member.getAttribute('type')))
+ tp_type = member.getAttributeNS(NS_TP, 'type')
+ if tp_type:
+ self.header.write(' * type <literal>%s</literal>,\n' % tp_type)
+ self.header.write(' * named <literal>%s</literal>):\n'
+ % member.getAttribute('name'))
+ docstring = get_docstring(member) or '(Undocumented)'
+ self.header.write(' * %s\n' % xml_escape(docstring))
+ self.header.write(' *\n')
+
+ self.header.write(' */\n')
+ self.header.write('#define %s (%s ())\n\n' % (name, impl))
+
+ array_name = struct.getAttribute('array-name')
+ if array_name != '':
+ array_name = (self.PREFIX_ + 'ARRAY_TYPE_' + array_name.upper())
+ impl = self.prefix_ + 'type_dbus_array_' + esc_impl_sig
+ self.header.write('/**\n * %s:\n\n' % array_name)
+ self.header.write(' * Expands to a call to a function\n')
+ self.header.write(' * that returns the #GType of a #GPtrArray\n')
+ self.header.write(' * of #%s.\n' % name)
+ self.header.write(' */\n')
+ self.header.write('#define %s (%s ())\n\n' % (array_name, impl))
+ self.need_arrays[impl_sig] = esc_impl_sig
+
+ self.need_structs[impl_sig] = esc_impl_sig
+
+ def __call__(self):
+ mappings = self.dom.getElementsByTagNameNS(NS_TP, 'mapping')
+ structs = self.dom.getElementsByTagNameNS(NS_TP, 'struct')
+
+ for mapping in mappings:
+ self.do_mapping_header(mapping)
+
+ for sig in self.need_mappings:
+ self.header.write('GType %stype_dbus_hash_%s (void);\n\n' %
+ (self.prefix_, self.need_mappings[sig]))
+ self.body.write('GType\n%stype_dbus_hash_%s (void)\n{\n' %
+ (self.prefix_, self.need_mappings[sig]))
+ self.body.write(' static GType t = 0;\n\n')
+ self.body.write(' if (G_UNLIKELY (t == 0))\n')
+ # FIXME: translate sig into two GTypes
+ items = tuple(Signature(sig))
+ gtypes = types_to_gtypes(items)
+ self.body.write(' t = dbus_g_type_get_map ("GHashTable", '
+ '%s, %s);\n' % (gtypes[0], gtypes[1]))
+ self.body.write(' return t;\n')
+ self.body.write('}\n\n')
+
+ for struct in structs:
+ self.do_struct_header(struct)
+
+ for sig in self.need_structs:
+ self.header.write('GType %stype_dbus_struct_%s (void);\n\n' %
+ (self.prefix_, self.need_structs[sig]))
+ self.body.write('GType\n%stype_dbus_struct_%s (void)\n{\n' %
+ (self.prefix_, self.need_structs[sig]))
+ self.body.write(' static GType t = 0;\n\n')
+ self.body.write(' if (G_UNLIKELY (t == 0))\n')
+ self.body.write(' t = dbus_g_type_get_struct ("GValueArray",\n')
+ items = tuple(Signature(sig))
+ gtypes = types_to_gtypes(items)
+ for gtype in gtypes:
+ self.body.write(' %s,\n' % gtype)
+ self.body.write(' G_TYPE_INVALID);\n')
+ self.body.write(' return t;\n')
+ self.body.write('}\n\n')
+
+ for sig in self.need_arrays:
+ self.header.write('GType %stype_dbus_array_%s (void);\n\n' %
+ (self.prefix_, self.need_structs[sig]))
+ self.body.write('GType\n%stype_dbus_array_%s (void)\n{\n' %
+ (self.prefix_, self.need_structs[sig]))
+ self.body.write(' static GType t = 0;\n\n')
+ self.body.write(' if (G_UNLIKELY (t == 0))\n')
+ self.body.write(' t = dbus_g_type_get_collection ("GPtrArray", '
+ '%stype_dbus_struct_%s ());\n' %
+ (self.prefix_, self.need_structs[sig]))
+ self.body.write(' return t;\n')
+ self.body.write('}\n\n')
+
+if __name__ == '__main__':
+ argv = sys.argv[1:]
+
+ dom = xml.dom.minidom.parse(argv[0])
+
+ GTypesGenerator(dom, argv[1], argv[2])()
diff --git a/trunk/tools/glib-interfaces-body-generator.xsl b/trunk/tools/glib-interfaces-body-generator.xsl
new file mode 100644
index 000000000..caff8917a
--- /dev/null
+++ b/trunk/tools/glib-interfaces-body-generator.xsl
@@ -0,0 +1,47 @@
+<!-- Stylesheet to extract C interface names from the Telepathy spec.
+The master copy of this stylesheet is in telepathy-glib - please make any
+changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+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.
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+ exclude-result-prefixes="tp">
+
+ <xsl:import href="c-interfaces-generator.xsl"/>
+
+ <xsl:template match="interface">
+ <xsl:text>GQuark&#10;</xsl:text>
+ <xsl:value-of select="$prefix"/>
+ <xsl:text>_iface_quark_</xsl:text>
+ <xsl:value-of select="translate(../@name, concat($upper, '/'), $lower)"/>
+ <xsl:text> (void)&#10;{&#10;</xsl:text>
+ <xsl:text> static GQuark quark = 0;&#10;&#10;</xsl:text>
+ <xsl:text> if (G_UNLIKELY (quark == 0))&#10;</xsl:text>
+ <xsl:text> {&#10;</xsl:text>
+ <xsl:text> quark = g_quark_from_static_string ("</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>");&#10;</xsl:text>
+ <xsl:text> }&#10;&#10;</xsl:text>
+ <xsl:text> return quark;&#10;</xsl:text>
+ <xsl:text>}&#10;&#10;</xsl:text>
+ </xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et noai noci: -->
diff --git a/trunk/tools/glib-interfaces-generator.xsl b/trunk/tools/glib-interfaces-generator.xsl
new file mode 100644
index 000000000..e703c407e
--- /dev/null
+++ b/trunk/tools/glib-interfaces-generator.xsl
@@ -0,0 +1,55 @@
+<!-- Stylesheet to extract C interface names from the Telepathy spec.
+The master copy of this stylesheet is in telepathy-glib - please make any
+changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+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.
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+ exclude-result-prefixes="tp">
+
+ <xsl:import href="c-interfaces-generator.xsl"/>
+
+ <xsl:template match="interface">
+ <xsl:apply-imports/>
+
+ <xsl:text>/**&#10; * </xsl:text>
+ <xsl:value-of select="$PREFIX"/>
+ <xsl:text>_IFACE_QUARK_</xsl:text>
+ <xsl:value-of select="translate(../@name, concat($lower, '/'), $upper)"/>
+ <xsl:text>:&#10; * &#10; * Expands to a call to a function that </xsl:text>
+ <xsl:text>returns a quark for the interface name "</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>"&#10; */&#10;#define </xsl:text>
+ <xsl:value-of select="$PREFIX"/>
+ <xsl:text>_IFACE_QUARK_</xsl:text>
+ <xsl:value-of select="translate(../@name, concat($lower, '/'), $upper)"/>
+ <xsl:text> \&#10; (</xsl:text>
+ <xsl:value-of select="$prefix"/>
+ <xsl:text>_iface_quark_</xsl:text>
+ <xsl:value-of select="translate(../@name, concat($upper, '/'), $lower)"/>
+ <xsl:text> ())&#10;&#10;GQuark </xsl:text>
+ <xsl:value-of select="$prefix"/>
+ <xsl:text>_iface_quark_</xsl:text>
+ <xsl:value-of select="translate(../@name, concat($upper, '/'), $lower)"/>
+ <xsl:text> (void);&#10;&#10;</xsl:text>
+ </xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et noai noci: -->
diff --git a/trunk/tools/glib-signals-marshal-gen.py b/trunk/tools/glib-signals-marshal-gen.py
new file mode 100644
index 000000000..0d02c1341
--- /dev/null
+++ b/trunk/tools/glib-signals-marshal-gen.py
@@ -0,0 +1,55 @@
+#!/usr/bin/python
+
+import sys
+import xml.dom.minidom
+from string import ascii_letters, digits
+
+
+from libglibcodegen import signal_to_marshal_name, method_to_glue_marshal_name
+
+
+class Generator(object):
+
+ def __init__(self, dom):
+ self.dom = dom
+ self.marshallers = {}
+
+ def do_method(self, method):
+ marshaller = method_to_glue_marshal_name(method, 'PREFIX')
+
+ assert '__' in marshaller
+ rhs = marshaller.split('__', 1)[1].split('_')
+
+ self.marshallers[marshaller] = rhs
+
+ def do_signal(self, signal):
+ marshaller = signal_to_marshal_name(signal, 'PREFIX')
+
+ assert '__' in marshaller
+ rhs = marshaller.split('__', 1)[1].split('_')
+
+ self.marshallers[marshaller] = rhs
+
+ def __call__(self):
+ methods = self.dom.getElementsByTagName('method')
+
+ for method in methods:
+ self.do_method(method)
+
+ signals = self.dom.getElementsByTagName('signal')
+
+ for signal in signals:
+ self.do_signal(signal)
+
+ all = self.marshallers.keys()
+ all.sort()
+ for marshaller in all:
+ rhs = self.marshallers[marshaller]
+ if not marshaller.startswith('g_cclosure'):
+ print 'VOID:' + ','.join(rhs)
+
+if __name__ == '__main__':
+ argv = sys.argv[1:]
+ dom = xml.dom.minidom.parse(argv[0])
+
+ Generator(dom)()
diff --git a/trunk/tools/gobject-foo.py b/trunk/tools/gobject-foo.py
new file mode 100644
index 000000000..5921cab8a
--- /dev/null
+++ b/trunk/tools/gobject-foo.py
@@ -0,0 +1,81 @@
+#!/usr/bin/python
+
+# gobject-foo.py: generate standard GObject type macros etc.
+#
+# The master copy of this program is in the telepathy-glib repository -
+# please make any changes there.
+#
+# Copyright (C) 2007 Collabora Ltd. <http://www.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
+
+def gobject_header(head, tail, as_interface=False):
+ out = []
+ o = out.append
+
+ name = head + '_' + tail
+ MixedCase = name.replace('_', '')
+ lower_case = name.lower()
+ UPPER_CASE = name.upper()
+
+ gtype = head.upper() + '_TYPE_' + tail.upper()
+
+ o("typedef struct _%s %s;" % (MixedCase, MixedCase))
+ o("typedef struct _%sClass %sClass;" % (MixedCase, MixedCase))
+ o("typedef struct _%sPrivate %sPrivate;" % (MixedCase, MixedCase))
+ o("")
+ o("GType %s_get_type (void);" % lower_case)
+ o("")
+
+ o("#define %s \\" % gtype)
+ o(" (%s_get_type ())" % lower_case)
+
+ o("#define %s(obj) \\" % UPPER_CASE)
+ o(" (G_TYPE_CHECK_INSTANCE_CAST ((obj), %s, \\" % gtype)
+ o(" %s))" % MixedCase)
+
+ if not as_interface:
+ o("#define %s_CLASS(klass) \\" % UPPER_CASE)
+ o(" (G_TYPE_CHECK_CLASS_CAST ((klass), %s, \\" % gtype)
+ o(" %sClass))" % MixedCase)
+
+ o("#define %s_IS_%s(obj) \\" % (head.upper(), tail.upper()))
+ o(" (G_TYPE_CHECK_INSTANCE_TYPE ((obj), %s))" % gtype)
+
+ if not as_interface:
+ o("#define %s_IS_%s_CLASS(klass) \\" % (head.upper(), tail.upper()))
+ o(" (G_TYPE_CHECK_CLASS_TYPE ((klass), %s))" % gtype)
+
+ o("#define %s_GET_CLASS(obj) \\" % UPPER_CASE)
+ o(" (G_TYPE_INSTANCE_GET_CLASS ((obj), %s, \\" % gtype)
+ o(" %sClass))" % MixedCase)
+
+ return out
+
+if __name__ == '__main__':
+ import sys
+ from getopt import gnu_getopt
+
+ options, argv = gnu_getopt(sys.argv[1:], '', ['interface'])
+
+ as_interface = False
+
+ for opt, val in options:
+ if opt == '--interface':
+ as_interface = True
+
+ head, tail = argv
+
+ print '\n'.join(gobject_header(head, tail, as_interface=as_interface))
diff --git a/trunk/tools/identity.xsl b/trunk/tools/identity.xsl
new file mode 100644
index 000000000..6630f84de
--- /dev/null
+++ b/trunk/tools/identity.xsl
@@ -0,0 +1,7 @@
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/trunk/tools/libglibcodegen.py b/trunk/tools/libglibcodegen.py
new file mode 100644
index 000000000..090e8decb
--- /dev/null
+++ b/trunk/tools/libglibcodegen.py
@@ -0,0 +1,320 @@
+"""Library code for GLib/D-Bus-related code generation.
+
+The master copy of this library is in the telepathy-glib repository -
+please make any changes there.
+"""
+
+# Copyright (C) 2006, 2007 Collabora Limited
+#
+# 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
+
+
+from string import ascii_letters, digits
+
+
+NS_TP = "http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+
+_ASCII_ALNUM = ascii_letters + digits
+
+
+def camelcase_to_lower(s):
+ out ="";
+ out += s[0].lower()
+ last_upper=False
+ if s[0].isupper():
+ last_upper=True
+ for i in range(1,len(s)):
+ if s[i].isupper():
+ if last_upper:
+ if (i+1) < len(s) and s[i+1].islower():
+ out += "_" + s[i].lower()
+ else:
+ out += s[i].lower()
+ else:
+ out += "_" + s[i].lower()
+ last_upper=True
+ else:
+ out += s[i]
+ last_upper=False
+ return out
+
+
+def camelcase_to_upper(s):
+ return camelcase_to_lower(s).upper()
+
+
+def cmp_by_name(node1, node2):
+ return cmp(node1.getAttributeNode("name").nodeValue,
+ node2.getAttributeNode("name").nodeValue)
+
+
+def dbus_gutils_wincaps_to_uscore(s):
+ """Bug-for-bug compatible Python port of _dbus_gutils_wincaps_to_uscore
+ which gets sequences of capital letters wrong in the same way.
+ (e.g. in Telepathy, SendDTMF -> send_dt_mf)
+ """
+ ret = ''
+ for c in s:
+ if c >= 'A' and c <= 'Z':
+ length = len(ret)
+ if length > 0 and (length < 2 or ret[length-2] != '_'):
+ ret += '_'
+ ret += c.lower()
+ else:
+ ret += c
+ return ret
+
+
+def escape_as_identifier(identifier):
+ """Escape the given string to be a valid D-Bus object path or service
+ name component, using a reversible encoding to ensure uniqueness.
+
+ The reversible encoding is as follows:
+
+ * The empty string becomes '_'
+ * Otherwise, each non-alphanumeric character is replaced by '_' plus
+ two lower-case hex digits; the same replacement is carried out on
+ the first character, if it's a digit
+ """
+ # '' -> '_'
+ if not identifier:
+ return '_'
+
+ # A bit of a fast path for strings which are already OK.
+ # We deliberately omit '_' because, for reversibility, that must also
+ # be escaped.
+ if (identifier.strip(_ASCII_ALNUM) == '' and
+ identifier[0] in ascii_letters):
+ return identifier
+
+ # The first character may not be a digit
+ if identifier[0] not in ascii_letters:
+ ret = ['_%02x' % ord(identifier[0])]
+ else:
+ ret = [identifier[0]]
+
+ # Subsequent characters may be digits or ASCII letters
+ for c in identifier[1:]:
+ if c in _ASCII_ALNUM:
+ ret.append(c)
+ else:
+ ret.append('_%02x' % ord(c))
+
+ return ''.join(ret)
+
+
+def get_docstring(element):
+ docstring = None
+ for x in element.childNodes:
+ if x.namespaceURI == NS_TP and x.localName == 'docstring':
+ docstring = x
+ if docstring is not None:
+ docstring = docstring.toxml().replace('\n', ' ').strip()
+ if docstring.startswith('<tp:docstring>'):
+ docstring = docstring[14:].lstrip()
+ if docstring.endswith('</tp:docstring>'):
+ docstring = docstring[:-15].rstrip()
+ if docstring in ('<tp:docstring/>', ''):
+ docstring = ''
+ return docstring
+
+
+def signal_to_marshal_type(signal):
+ """
+ return a list of strings indicating the marshalling type for this signal.
+ """
+
+ mtype=[]
+ for i in signal.getElementsByTagName("arg"):
+ name =i.getAttribute("name")
+ type = i.getAttribute("type")
+ mtype.append(type_to_gtype(type)[2])
+
+ return mtype
+
+
+_glib_marshallers = ['VOID', 'BOOLEAN', 'CHAR', 'UCHAR', 'INT',
+ 'STRING', 'UINT', 'LONG', 'ULONG', 'ENUM', 'FLAGS', 'FLOAT',
+ 'DOUBLE', 'STRING', 'PARAM', 'BOXED', 'POINTER', 'OBJECT',
+ 'UINT_POINTER']
+
+
+def signal_to_marshal_name(signal, prefix):
+
+ mtype = signal_to_marshal_type(signal)
+ if len(mtype):
+ name = '_'.join(mtype)
+ else:
+ name = 'VOID'
+
+ if name in _glib_marshallers:
+ return 'g_cclosure_marshal_VOID__' + name
+ else:
+ return prefix + '_marshal_VOID__' + name
+
+
+def method_to_glue_marshal_name(method, prefix):
+
+ mtype = []
+ for i in method.getElementsByTagName("arg"):
+ if i.getAttribute("direction") != "out":
+ type = i.getAttribute("type")
+ mtype.append(type_to_gtype(type)[2])
+
+ mtype.append('POINTER')
+
+ name = '_'.join(mtype)
+
+ if name in _glib_marshallers:
+ return 'g_cclosure_marshal_VOID__' + name
+ else:
+ return prefix + '_marshal_VOID__' + name
+
+
+class _SignatureIter:
+ """Iterator over a D-Bus signature. Copied from dbus-python 0.71 so we
+ can run genginterface in a limited environment with only Python
+ (like Scratchbox).
+ """
+ def __init__(self, string):
+ self.remaining = string
+
+ def next(self):
+ if self.remaining == '':
+ raise StopIteration
+
+ signature = self.remaining
+ block_depth = 0
+ block_type = None
+ end = len(signature)
+
+ for marker in range(0, end):
+ cur_sig = signature[marker]
+
+ if cur_sig == 'a':
+ pass
+ elif cur_sig == '{' or cur_sig == '(':
+ if block_type == None:
+ block_type = cur_sig
+
+ if block_type == cur_sig:
+ block_depth = block_depth + 1
+
+ elif cur_sig == '}':
+ if block_type == '{':
+ block_depth = block_depth - 1
+
+ if block_depth == 0:
+ end = marker
+ break
+
+ elif cur_sig == ')':
+ if block_type == '(':
+ block_depth = block_depth - 1
+
+ if block_depth == 0:
+ end = marker
+ break
+
+ else:
+ if block_depth == 0:
+ end = marker
+ break
+
+ end = end + 1
+ self.remaining = signature[end:]
+ return Signature(signature[0:end])
+
+
+class Signature(str):
+ """A string, iteration over which is by D-Bus single complete types
+ rather than characters.
+ """
+ def __iter__(self):
+ return _SignatureIter(self)
+
+
+def type_to_gtype(s):
+ if s == 'y': #byte
+ return ("guchar ", "G_TYPE_UCHAR","UCHAR", False)
+ elif s == 'b': #boolean
+ return ("gboolean ", "G_TYPE_BOOLEAN","BOOLEAN", False)
+ elif s == 'n': #int16
+ return ("gint ", "G_TYPE_INT","INT", False)
+ elif s == 'q': #uint16
+ return ("guint ", "G_TYPE_UINT","UINT", False)
+ elif s == 'i': #int32
+ return ("gint ", "G_TYPE_INT","INT", False)
+ elif s == 'u': #uint32
+ return ("guint ", "G_TYPE_UINT","UINT", False)
+ elif s == 'x': #int64
+ return ("gint64 ", "G_TYPE_INT64","INT64", False)
+ elif s == 't': #uint64
+ return ("guint64 ", "G_TYPE_UINT64","UINT64", False)
+ elif s == 'd': #double
+ return ("gdouble ", "G_TYPE_DOUBLE","DOUBLE", False)
+ elif s == 's': #string
+ return ("gchar *", "G_TYPE_STRING", "STRING", True)
+ elif s == 'g': #signature - FIXME
+ return ("gchar *", "DBUS_TYPE_G_SIGNATURE", "STRING", True)
+ elif s == 'o': #object path
+ return ("gchar *", "DBUS_TYPE_G_OBJECT_PATH", "BOXED", True)
+ elif s == 'v': #variant
+ return ("GValue *", "G_TYPE_VALUE", "BOXED", True)
+ elif s == 'as': #array of strings
+ return ("gchar **", "G_TYPE_STRV", "BOXED", True)
+ elif s == 'ay': #byte array
+ return ("GArray *",
+ "dbus_g_type_get_collection (\"GArray\", G_TYPE_UCHAR)", "BOXED",
+ True)
+ elif s == 'au': #uint array
+ return ("GArray *", "DBUS_TYPE_G_UINT_ARRAY", "BOXED", True)
+ elif s == 'ai': #int array
+ return ("GArray *", "DBUS_TYPE_G_INT_ARRAY", "BOXED", True)
+ elif s == 'ax': #int64 array
+ return ("GArray *", "DBUS_TYPE_G_INT64_ARRAY", "BOXED", True)
+ elif s == 'at': #uint64 array
+ return ("GArray *", "DBUS_TYPE_G_UINT64_ARRAY", "BOXED", True)
+ elif s == 'ad': #double array
+ return ("GArray *", "DBUS_TYPE_G_DOUBLE_ARRAY", "BOXED", True)
+ elif s == 'ab': #boolean array
+ return ("GArray *", "DBUS_TYPE_G_BOOLEAN_ARRAY", "BOXED", True)
+ elif s == 'ao': #object path array
+ return ("GArray *", "DBUS_TYPE_G_OBJECT_ARRAY", "BOXED", True)
+ elif s == 'a{ss}': #hash table of string to string
+ return ("GHashTable *", "DBUS_TYPE_G_STRING_STRING_HASHTABLE", "BOXED", False)
+ elif s[:2] == 'a{': #some arbitrary hash tables
+ if s[2] not in ('y', 'b', 'n', 'q', 'i', 'u', 's', 'o', 'g'):
+ raise Exception, "can't index a hashtable off non-basic type " + s
+ first = type_to_gtype(s[2])
+ second = type_to_gtype(s[3:-1])
+ return ("GHashTable *", "(dbus_g_type_get_map (\"GHashTable\", " + first[1] + ", " + second[1] + "))", "BOXED", False)
+ elif s[:2] in ('a(', 'aa'): # array of structs or arrays, recurse
+ gtype = type_to_gtype(s[1:])[1]
+ return ("GPtrArray *", "(dbus_g_type_get_collection (\"GPtrArray\", "+gtype+"))", "BOXED", True)
+ elif s[:1] == '(': #struct
+ gtype = "(dbus_g_type_get_struct (\"GValueArray\", "
+ for subsig in Signature(s[1:-1]):
+ gtype = gtype + type_to_gtype(subsig)[1] + ", "
+ gtype = gtype + "G_TYPE_INVALID))"
+ return ("GValueArray *", gtype, "BOXED", True)
+
+ # we just don't know ..
+ raise Exception, "don't know the GType for " + s
+
+
+def xml_escape(s):
+ s = s.replace('&', '&amp;').replace("'", '&apos;').replace('"', '&quot;')
+ return s.replace('<', '&lt;').replace('>', '&gt;')
diff --git a/trunk/tools/ls-interfaces.xsl b/trunk/tools/ls-interfaces.xsl
new file mode 100644
index 000000000..22c4ff5e8
--- /dev/null
+++ b/trunk/tools/ls-interfaces.xsl
@@ -0,0 +1,35 @@
+<!--
+Extract a space-separated list of interface classnames from the Telepathy spec.
+The master copy of this stylesheet is in the Telepathy spec repository -
+please make any changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+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
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:output method="text" indent="no" encoding="ascii"/>
+
+ <xsl:template match="text()"/>
+
+ <xsl:template match="node">
+ <xsl:value-of select="concat(' ', translate(@name, '/', ''), ' ')"/>
+ </xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et noai noci: -->
diff --git a/trunk/tools/make-all-async.xsl b/trunk/tools/make-all-async.xsl
new file mode 100644
index 000000000..634ee3ca4
--- /dev/null
+++ b/trunk/tools/make-all-async.xsl
@@ -0,0 +1,43 @@
+<!-- Alter a D-Bus introspection XML file to add the DBus.GLib.Async annotation
+to all methods.
+The master copy of this stylesheet is in the telepathy-glib repository -
+please make any changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+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
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+ <xsl:output method="xml" indent="yes" encoding="ascii"/>
+
+ <xsl:template match="method">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ <xsl:if test="not(annotation[name='org.freedesktop.DBus.GLib.Async'])">
+ <annotation name="org.freedesktop.DBus.GLib.Async" value=""/>
+ </xsl:if>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="@*|node()">
+ <xsl:copy>
+ <xsl:apply-templates select="@*|node()"/>
+ </xsl:copy>
+ </xsl:template>
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et: -->
diff --git a/trunk/tools/spec-to-introspect.xsl b/trunk/tools/spec-to-introspect.xsl
new file mode 100644
index 000000000..980604ace
--- /dev/null
+++ b/trunk/tools/spec-to-introspect.xsl
@@ -0,0 +1,51 @@
+<!-- Remove Telepathy extensions from a D-Bus interface, trying to leave only
+DTD-compliant introspection XML. The output still needs to be subjected to the
+following sed filter:
+sed -e 's@xmlns:tp="http://telepathy\.freedesktop\.org/wiki/DbusSpec.extensions-v0"@@g'
+
+The master copy of this stylesheet is in the Telepathy spec repository -
+please make any changes there.
+
+Copyright (C) 2006, 2007 Collabora Limited
+
+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
+-->
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:tp="http://telepathy.freedesktop.org/wiki/DbusSpec#extensions-v0"
+ exclude-result-prefixes="tp">
+
+ <xsl:template match="*">
+ <xsl:copy>
+ <xsl:for-each select="@*">
+ <xsl:if test="not(starts-with(name(), 'tp:'))">
+ <xsl:copy/>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="tp:*"/>
+ <xsl:template match="text()"/>
+
+ <xsl:output method="xml" indent="yes" encoding="UTF-8"
+ omit-xml-declaration="no"
+ doctype-system="http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"
+ doctype-public="-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" />
+
+</xsl:stylesheet>
+
+<!-- vim:set sw=2 sts=2 et: -->
diff --git a/trunk/tools/telepathy-glib-env.in b/trunk/tools/telepathy-glib-env.in
new file mode 100644
index 000000000..ddc47bfd8
--- /dev/null
+++ b/trunk/tools/telepathy-glib-env.in
@@ -0,0 +1,9 @@
+#!/bin/sh
+abs_top_builddir="@abs_top_builddir@"
+export abs_top_builddir
+LD_LIBRARY_PATH="${abs_top_builddir}/telepathy-glib/.libs${LD_LIBRARY_PATH:+":${LD_LIBRARY_PATH}"}"
+export LD_LIBRARY_PATH
+G_DEBUG="fatal_criticals,fatal_warnings${G_DEBUG:+",${G_DEBUG}"}"
+export G_DEBUG
+
+exec "$@"
diff --git a/trunk/tools/with-session-bus.sh b/trunk/tools/with-session-bus.sh
new file mode 100644
index 000000000..26d9f248a
--- /dev/null
+++ b/trunk/tools/with-session-bus.sh
@@ -0,0 +1,73 @@
+#!/bin/sh
+# with-session-bus.sh - run a program with a temporary D-Bus session daemon
+#
+# The canonical location of this program is the telepathy-glib tools/
+# directory, please synchronize any changes with that copy.
+#
+# Copyright (C) 2007 Collabora Ltd. <http://www.collabora.co.uk/>
+#
+# Copying and distribution of this file, with or without modification,
+# are permitted in any medium without royalty provided the copyright
+# notice and this notice are preserved.
+
+set -e
+
+me=with-session-bus
+
+dbus_daemon_args="--print-address=5 --print-pid=6 --fork"
+
+usage ()
+{
+ echo "usage: $me [options] -- program [program_options]" >&2
+ echo "Requires write access to the current directory." >&2
+ exit 2
+}
+
+while test "z$1" != "z--"; do
+ case "$1" in
+ --session)
+ dbus_daemon_args="$dbus_daemon_args --session"
+ shift
+ ;;
+ --config-file=*)
+ # FIXME: assumes config file doesn't contain any special characters
+ dbus_daemon_args="$dbus_daemon_args $1"
+ shift
+ ;;
+ *)
+ usage
+ ;;
+ esac
+done
+shift
+if test "z$1" = "z"; then usage; fi
+
+exec 5> $me-$$.address
+exec 6> $me-$$.pid
+
+cleanup ()
+{
+ pid=`head -n1 $me-$$.pid`
+ if test -n "$pid" ; then
+ echo "Killing temporary bus daemon: $pid" >&2
+ kill -INT "$pid"
+ fi
+ rm -f $me-$$.address
+ rm -f $me-$$.pid
+}
+
+trap cleanup INT HUP TERM
+dbus-daemon $dbus_daemon_args
+
+{ echo -n "Temporary bus daemon is "; cat $me-$$.address; } >&2
+{ echo -n "Temporary bus daemon PID is "; head -n1 $me-$$.pid; } >&2
+
+e=0
+DBUS_SESSION_BUS_ADDRESS="`cat $me-$$.address`"
+export DBUS_SESSION_BUS_ADDRESS
+"$@" || e=$?
+
+trap - INT HUP TERM
+cleanup
+
+exit $e